[MoeCTF 2022]ezphp
记一次php变量间接引用
题目来源:[MoeCTF 2022]ezphp | NSSCTF
1 |
|
代码审计一下,必须以GET或POST传入一个flag参数,才能绕过第一个exit,如果flag参数的值也同为flag,那会被第二个exit终止,如果flag参数不为flag的话,后面flag的值就会被新的值覆盖掉
分析一下两个foreach循环:形如传参name=xtyy,那么就会使$key=name $value=xtyy
重点在于第二个foreach循环
1 | foreach ($_GET as $key => $value) { |
这里是变量的间接引用,相当于把$key替换成上面的name,也就会变成$name
也就是说,传入的?name=xtyy就会变成$name=$xtyy的传参,
如果这里传入a=flag,就会把$flag的值储存在变量$a中,后面再让$flag=$a,就可以把flag原本的值拿回来
payload:
1 | ?a=flag&flag=a |
其实这相当于
1 |
|
当然如果传参:
1 | ?a=flag&b=a&flag=b |
只要能在最后把变量flag的值赋回来,都是可以的
成功的拿到了flag
