HackThisSite - Extended Basic Mission 12
Challenge
This site is run by a serious web admin. But the web developer doesn't know that much. URL: moo.com (any script you want); Exploit this code:
站点由一个认真的 web 管理员在维护,但写代码的开发者水平不高。题目给定
moo.com上的任意脚本(any script you want),要求利用这段 PHP。
关卡页给出的脚本正文:
1 |
|
Solution
$$key = $value 是 PHP 的变量变量写法:把
$key
的值当作变量名,再给它赋值。foreach ($_GET as $key => $value)
遍历 URL query string 的每个参数,于是
?userpass=IWantToCow会执行$userpass = 'IWantToCow';?password=IWantToCow会执行$password = 'IWantToCow';- 任何其他名字同理,脚本里的变量表完全由请求者给出的 query string 决定。
脚本原本先把 $password 设成
'IWantToCow',但紧接着的循环会把它连同
$userpass 一起覆盖。最终判据是:
1 | if ($userpass == $password) { ok(); } |
判据只比较 $userpass 与 $password
两个变量,而两者都在循环的可写范围内。既然 query string
能同时给它们赋值,直接让二者取同一个值就恒为真