时间:2021.2.15
靶场信息:
地址:https://www.vulnhub.com/entry/raven-2,269/
发布日期:2018年11月9日
目标:Raven 2是中级boot2root VM, 有四个标志要捕获,在多次违反之后,Raven Security采取了额外的措施来加固其Web服务器,以防止黑客入侵。您是否仍然可以违反Raven?
一、信息收集
1、获取靶机IP地址
nmap -sP 192.168.137.0/24
由探测的结果可知,靶机的IP为192.168.137.130
2、扫描开放的端口和服务
nmap -sS -sV -T5 -A -p- 192.168.137.130
得到开放的端口信息:
22/tcp open ssh OpenSSH 6.7p1 Debian 5+deb8u4 (protocol 2.0)
80/tcp open http Apache httpd 2.4.10 ((Debian))
111/tcp open rpcbind 2-4 (RPC #100000)
35264/tcp open status 1 (RPC #100024)
3、网站信息收集
由于开放了80端口,运行了一个web应用,打开浏览器访问看看
先使用dirb进行目录扫描
dirb的简单使用
参数:
======================== OPTIONS ========================
-a <agent_string> : Specify your custom USER_AGENT.
-b : Use path as is.
-c <cookie_string> : Set a cookie for the HTTP request.
-E <certificate> : path to the client certificate.
-f : Fine tunning of NOT_FOUND (404) detection.
-H <header_string> : Add a custom header to the HTTP request.
-i : Use case-insensitive search.
-l : Print "Location" header when found.
-N <nf_code>: Ignore responses with this HTTP code.
-o <output_file> : Save output to disk.
-p <proxy[:port]> : Use this proxy. (Default port is 1080)
-P <proxy_username:proxy_password> : Proxy Authentication.
-r : Don't search recursively.
-R : Interactive recursion. (Asks for each directory)
-S : Silent Mode. Don't show tested words. (For dumb terminals)
-t : Don't force an ending '/' on URLs.
-u <username:password> : HTTP Authentication.
-v : Show also NOT_FOUND pages.
-w : Don't stop on WARNING messages.
-X <extensions> / -x <exts_file> : Append each word with this extensions.
-z <millisecs> : Add a milliseconds delay to not cause excessive Flood.
这里简单的爆破一下目录
这里重点看一下vendor目录,一个个点开看了看,然后在PATH文件里找到了第一个flag
接着在README.md里面看到了PHPMailer(一个功能齐全的PHP电子邮件创建和传输类)
并且在VERSION里看到了版本为5.2.16
二、漏洞探测
PHPMailer远程命令执行漏洞
PHPMailer是PHP电子邮件创建及传输类,用于多个开源项目:WordPress, Drupal, 1CRM, SugarCRM, Yii, Joomla!等。
PHPMailer < 5.2.18版本存在安全漏洞,可使未经身份验证的远程攻击者在Web服务器用户上下文中执行任意代码,远程控制目标web应用
参考链接:
[PHPMailer任意文件读取漏洞分析] https://www.freebuf.com/vuls/124820.html [POC] https://www.exploit-db.com/exploits/43056三、漏洞利用
利用searchsploit 搜索可以利用的漏洞
将对应的py文件拷贝出来
然后修改exp里面的参数
然后python 40974.py,如果报错的话,就需要安装requests_toolbelt模块
pip install requests-toolbelt
然后执行成功之后,结果如下:
接着访问http://192.168.137.130/contact.php,就会生成后门shell.php,然后本地用nc开启监听,再访问shell.php,就成功反弹了一个shell
这里反弹shell之后有几个小技巧:
-
由于我们获取的shell并不是一个具有完整交互的shell,因此可能会在使用过程中被挂起,甚至还可能会因为我们的操作失误,例如不小心摁下了 “Ctrl-C”键,这将直接终止我们的整个shell进程让徒劳而归。除了没有正确处理SIGINT(信号)之外,这些“哑”shell还有其它诸多缺点:
-
一些命令如su和ssh,需要一个正确的终端才能运行
-
通常不显示STDERR
-
无法正常使用vim等文本编辑器
-
没有完成标签
-
没有向上箭头使用历史
-
没有jobcontrol等
我们可以使用python提供的pty模块,只需要一行脚本就可以创建一个原生的终端
python -c 'import pty; pty.spawn("/bin/bash")'
-
在反弹shell中,可能会出现比如方向键编码错误,如上图所示,这就很烦,怎么解决呢,我们可以更改编码格式为raw
ctrl + z 暂停进程
stty -echo raw 改编码格式
fg 切换回原来进程
ok,具体操作上图已经有了,我们继续找flag
好像找到了两个可能和flag有关的文件,我们打开看看
果然,两个文件都存在flag,我们现在获取的是一个低权限的用户,最后一个flag猜测应该是要获取到root权限才能找得到,很有可能和wordpress有关,我们进入wordpress文件夹里,发现其配置文件
查看wp-config.php的内容,发现了网站的数据库为mysql,以及mysql的root密码
四、提权
LinEnum
LinEnum是一款Linux文件枚举及权限提升检查工具,可以帮助渗透测试人员对linux系统漏洞或安全问题进行一键式体检
具体的可参考:
[LinEnum] https://github.com/rebootuser/LinEnum/blob/master/README.md在kali中下载好
用python搭建以一个简易的服务器来把文件下载到靶机里面
python -m SimpleHTTPServer 8888
然后修改一下LinEnum.sh的权限,让它可以执行
执行之后发现Mysql是用root登录的
当然也可以使用如下命令:
ps -aux | grep root:查看当前以root用户身份运行的所有进程
ps -ef | grep mysql:查看所有关于mysql的进程
dpkg -l | grep mysql:查看mysql相关安装包的版本
根据之前获得的mysql的root用户的密码,我们可以登录mysql
mysql的版本果然为5.5.6,然后在exploit-db里找到了可以利用的漏洞信息:
[MySQL 4.x / 5.0(Linux)-用户定义函数(UDF)动态库(2)] https://www.exploit-db.com/exploits/1518相应的exp它也给出来了,这里就用kali里面现成的:
exp的具体使用方法也给出了
然后在kali上进行编译生成so文件
关于gcc的用法,可以参考:
[GCC 参数详解] https://www.runoob.com/w3cnote/gcc-parameter-detail.html再将生成的so文件上传到靶机上
然后进入数据库创建数据表 foo,向表中插入二进制数据,然后利用dumpfile函数把文件导出, 再新建存储函数do_system 类型是integer,别名(soname)文件名字
然后通过do_system函数给find命令所有者的suid权限,使其可以执行root命令
然后使用find执行 shell,最后找到第四个flag
总结
第一次接触到了PHPMailer相关的漏洞,对于mysql的udf提权有了更加深刻的认识,当然在渗透的过程中也认识了一些新的、实用的命令和工具。