前言
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.几秒的残余就正好被包含出来了。
直接包含出“文件”内容