[!前因]
这次校赛本来是不想出题的,奈何学弟们准备的web方向题目数量确实有点太少了,导致一下子没题做了,然后我想想还是再出一道吧,一大早兴冲冲的准备搞个点试试,因为之前一直猜想很久了,然后想自己试试!
CVE-2024-2961
这个洞是去年我最喜欢的一个cve,能够从任意文件读取到rce,算是一个纯pwn的漏洞!
整个漏洞的流程分为: php 伪协议 filter的验证->/proc/self/maps 文件的读取,并进行敏感信息探测->获得glibc详细信息和内存区域分布,然后生成恶意payload->再生成一个php filter的恶意数据回去进行攻击
整个漏洞在有原作者的(exp)下变得极其好用,简直是脚本小子的福音!
but:
坑点1
之前没注意到版本要求,这次不测不知道,一测吓一跳
开始的时候还拿着个5.x的php环境在那测,
然后在docker环境下的镜像也有要求,得用这种的,
不能用带 fpm-alpine 的php镜像,好像无法定位heap,当然不确定是不是nginx的问题…
反正后者的**/proc/self/maps**文件如下:
存在漏洞能打通的情况(以p神的那个vulhub靶场为例)
坑点2
原作者的exp十分的不好用,poc部分和发包部分写的太死了…
应该给出更多的diy空间,导致明显存在漏洞情况但是却显示poc检测失败,无法验证成功…
之前说ghctf中存在吞字符的情况,这次也遇到了.好像是错怪了那位师傅了,这里留个坑,我感觉好像还是跟php的版本有关系!
建议: 如果明确存在文件读取且支持伪协议的情况下,可以提前注释掉poc验证部分,直接进入exp利用部分, 并且建议通过中间人代理进行抓包分析,这样可以更方便调试和知道问题所在
坑点3
我这次是以xxe漏洞想模拟一个漏洞环境,然后通过LFI到RCE,因为特征吻合,也能正确解析.
但是就是到最后一步exp发送过去报错.
不知道是不是php xml解析函数有啥限制还是如何,还是我xxe漏洞模拟的环境不对.
但是作者明确给出了存在xxe与该漏洞组合的情况,我自己也是想了下,按常理来说应该是可以结合成功的
一模一样的环境我用函数 file_get_contents模拟能够正常打通
xxe 漏洞代码:
1 |
|
dockerfile:
1 | FROM php:7.4.33-apache |
调了好久,累了,还是没搞出来…