利用PHP_SESSION_UPLOAD_PROGRESS进行文件包含

正好遇到一个题,也记录下这个东西

image-20210720103347176

我们可以利用session.upload_progress将木马写入session文件,然后包含这个session文件。不过前提是我们需要船家女一个session文件,并且知道session文件的存放位置。

session里有一个默认选项,session.use_strict_mode默认值为off

image-20210720103436410

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

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

但是session.upload_progress.cleanup默认是开启的

image-20210720103545027

框着的这句话意思就是说在默认情况下,session.upload_progress.cleanup是开启的,一旦读取了所有POST数据,它就会清除进度信息

这里我们可以利用条件竞争来进行文件上传

下面讲个例题来实践一下:

其实这个只需要一个文件就可以了,需要进行条件竞争

image-20210720103741955

构造上传的payload

1
2
3
4
5
6
7
8
9
10
<html>
<body>
<form action="http://47.96.38.46:9000/index.php?action=" 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>

抓取数据包1

image-20210720103950942

抓取数据包2

image-20210720104026110

最终出现phpinfo

image-20210720104110610

成功获取到一个shell

这里是禁用了命令执行函数的

成功找到flag

image-20210720104237583

成功解出flag

image-20210720104336898