0x01 环境配置&利用条件
环境分析
-
session.use_strict_mode默认值为0,此时用户是可以自己定义Session ID的
我们在Cookie里设置PHPSESSID=flag,PHP将会在服务器上创建一个文件:/tmp/sess_flag
-
session.upload_progress.prefix由我们构造的session.upload_progress.name值组成,最后被写入sess_文件里。
所以:
- 这个文件名是PHPSESSID=flag,文件名可控
- 内容也是可以通过PHP_SESSION_UPLOAD_PROGRESS写入的
- 如果有文件包含,就可以 getshell
一般情况还需要条件竞争:
在默认情况下,session.upload_progress.cleanup是开启的
所以要是处理了所有POST数据,它就会清除进度信息,这个文件就没了
所以需要使用条件竞争:
要在没有处理完post数据的时候就要去触发
0x02 题目
这个题是第五空间CTF的一道WEB题
<?php
if(!isset($_GET['mode'])){
highlight_file(__file__);
}else if($_GET['mode'] == "eval"){
$shell = $_GET['shell'] ?? 'phpin