利用phpinfo与文件包含进行条件竞争


前言

2021年9月4日21:06:29

又做了很多类型的题,具体可见刷题笔记:[NPUCTF2020]ezinclude


2021国赛做到一道,记录下

类似题:利用PHP_SESSION_UPLOAD_PROGRESS进行文件包含

大致思路

前瞻

需要先找到phpinfo.php =》扫目录吧
然后有两条路:

1.给phpinfo.php发包 示例
2.利用session。
国赛这里是第二条

条件

利用session.upload_progress将木马写入session文件

1.session.use_strict_mode=off(默认)

此时用户是可以自己定义Session ID的。比如,我们在Cookie里设置PHPSESSID=flag,PHP将会在服务器上创建一个文件:/tmp/sess_flag。即使此时用户没有初始化Session,PHP也会自动初始化Session,并产生一个键值。

在Linux系统中,session文件一般的默认存储位置为/tmp或/var/lib/php/session

2.session.upload_progress.cleanup 默认开启
在默认情况下,session.upload_progress.cleanup是开启的,一旦读取了所有POST数据,它就会清除进度信息。
所以没那么简单,需要条件竞争。

具体流程

POST发包代码,方便抓包

<!DOCTYPE html>
<html>
<body>
<form action="http://e113b1bc-28b8-4f08-9e60-b74fe3a96ef3.chall.ctf.show/" method="POST" enctype="multipart/form-data">
    <input type="hidden" name="PHP_SESSION_UPLOAD_PROGRESS" value="123" />
    <input type="file" name="file" />
    <input type="submit" value="submit" />
</form>
</body>
</html>

添加一个Cookie :PHPSESSID=flag,PHP将会在服务器上创建一个文件:/session路径/sess_flag

然后两个intruder开起来,把函数执行的遍历目录结果存放到session里,然后包含出来。
原本session产生的临时文件是秒被删的,但因为条件竞争造成冲突/溢出以至于0.几秒的残余就正好被包含出来了。

直接包含出“文件”内容


文章作者: 巡璃
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 巡璃 !
评论
  目录