6月23日,DC0531在泉城济南顺利举办,来自各个安全领域的大牛们给大家带来了一场炫酷的技术视听盛宴!大会举办期间,还开展了线上CTF比赛,供网络安全人员进行现场技术比拼。
本期“安仔课堂”,ISEC实验室的王老师,将为大家记录本次比赛的解题思路及方法。
Web1
首先关注一下比赛方的公众号,按照题目制定的battle ground的规则开始玩,先了解该公众号提供的所有功能。有两种解题方法,一种是抓取流量包,一种是命令执行。
方法一
图1
先看一下有哪些武器,选择一个捡起,载入武器,向你的VPS射击,就可以获取到题目的IP。在射击之前,用tcpdump -nn -i eth0 icmp -w dc0531.cap先在你的VPS上抓包。
图2
这题存在git泄露,先把源代码扒下来:
图3
这里只解释代码的关键部分,关键代码路径在: Application/Home/Controller/TestController.class.php。
先看P方法,改方法主要是用于将$weapon文件的内容base64加密后前100个字符存放在$this->info[bullet]中,用在下面的s方法,代码如下:
图4
再看r方法,该方法用于初始化$this->info[status] = 100,经过初始化之后才能利用s方法。s方法就是携带上面base64加密后的$weapon文件的内容前100个字符,去ping目标主机,也就是微信公众号中的shot功能,ping命令的-p 选项可以设置icmp报文数据部分的内容。这里要注意下面代码中16、17行,$this->info[status] - 1为99,相应$bullet = $this->info[bullet][100-99];即从$this->info[bullet][1]开始,漏掉了$this->info[bullet][0],所以我们最后获取的内容在开头要加上一个字符。
图5
明白了以上三个方法,我们就知道如何利用漏洞获取flag了。首先我们要把flag文件装入$weapon,然后一直shot我们的VPS,具体利用如下:
图6
VPS上用tcpdump抓包,提取内容为:D9waHAKJGZsYWcgPSAiREMwNTMxe1dlY2hBdF9Jc19Tb19DMG9sfSI7Cg== ,在开头随便加上一个字母,这里我加P,解出来如下:
图7
方法二
下面说另外一个解法,就是通过命令执行的方式获得flag。其实一开始我发现方法u中存在命令执行,但是看了前面的代码,发现没有调用到该函数,就暂时忽略了。后来想到这是ThinkPHP的程序,Thinkphp是可以通过路由方式调用方法的,方法u的代码如下:
图8
下面就说说如何利用这个命令执行漏洞。首先在我们的VPS上留下python反弹shell脚本,然后根据Thinkphp3.2.3的路由规则,分别访问一下两个链接,当然你要在你的VPS上提前侦听某个端口,链接如下:
图9
图10
Web2
题目地址:http://150.95.146.178/
这道题目可以本地搭环境复现,题目使用的是Metinfo6.0.0,上网搜索该版本cms漏洞,可以看到《Metinfo 6.0.0 任意文件读取漏洞》的漏洞分析,题目刚好也是考察这个漏洞,只是题目环境用的是最新版的Metinfo6.0.0,与该博客上的版本代码略有差别,不过还是能绕过,具体分析可以看那篇文章,这里不赘述,直接给出利用方式。
图11
Web3
题目地址:nc 139.198.191.81 9999
python沙箱逃逸,遇到空格和某些关键字就会直接断开,直接read也会断开,payload如下:
图12
图13
Web4
题目地址:http://139.198.191.81:18080/
用dirb扫描发现存在git泄露,用Githack将泄露的文件扒下来,flag.php中即可找到flag。
图14
图15
这题是一个经典的配置文件写入问题,实际考察内容可参考《 CTF_web/web200-7 》)