前言
这是defcamp ctf 2018 vulture 的题解,使用的方法为利用phar拓展进行PHP反序列化攻击。
We created an online service where you can upload pictures of vultures (or other birds). Each user has a feed so you can privately enjoy the photos you took of this majestic killing machines :)
Target: https://vulture.dctfq18.def.camp/
Author: Anatol
打开网站后发现是一个图片留言板一类的东西,用户可以上传一张图片和描述图片的文字。
经过测试后发现如果选择不存在的图片时会报Image not found
的错误。所以这里很有可能使用了file_exists
去检查文件是否存在。
在知道创宇的一篇文章中提到过利用phar进行反序列化攻击的例子(这里不再赘述,建议直接看原文。)。而他的利用条件是:
在这道题中,题目的环境都满足利用条件。
在利用反序列化过程中需要找好可以任意代码执行的类,很显然,以目前的条件我们还得不到这样一个类。
当我们尝试访问一个不存在的页面时会爆出如下错误:
1 | Exception: xxxController handler class cannot be loaded |
Google后可以发现这是一个叫
Phalcon
的PHP framework,而网上还有一个利器PHPGGC: PHP Generic Gadget Chains
,它可以为我们生成ROP Gadget,类似于pwn。1 | 项目地址:https://github.com/ambionics/phpggc |
而这个项目里就含有这个框架的gadget。
接下来我们修改
gadgetchains/Phalcon/RCE/1/chain.php
:1 | <?php |
使用
./phpggc Phalcon/RCE1
得到exp:可以看到生成的phar文件变成了GIF。我们将这个文件上传上去:
这里注意到结果是
false
但这并不影响我们使用,实际上已经上传成功了。接着根据phpggc的提示:
1 | This chain does not expect parameters, will eval() any code supplied in |
所以我们只需在post body里写命令执行的代码即可:
1 | <?php die(`ls -la`); |
这里注意需要在
image
的前面加&
,不然会造成错误。接着我们直接cat flag即可。