WeChall:Training: Register Globals (Exploit, PHP, Training)
这题所需的知识点是:register global—将所有提交的参数注册为全局变量,进而将某些变量的值覆盖为我们所需要的。更多参考PHP: Using Register Globals - Manual
从32行开始,有下面这段代码:
1. if (isset($login))
{
echo GWF_HTML::message('Register Globals', $chall->lang('msg_welcome_back', array(htmlspecialchars($login[0]), htmlspecialchars($login[1]))));
if (strtolower($login[0]) === 'admin') {
$chall->onChallengeSolved(GWF_Session::getUserID());
}
}
意思是:如果$login[0] === ‘admin’,那么解题成功。
由于在28行已经有下面代码:
1. $login = array($_POST['username'], (int)$row['level']);
因而, l o g i n [ 0 ] 已 经 被 赋 值 为 login[0]已经被赋值为 login[0]已经被赋值为_POST[‘username’],但是可以通过全局变量来覆盖它。
在这里,程序会将GET等语句得到的变量注册成为全局变量,就可以覆盖掉源代码中的变量值。
因此在地址栏输入下面链接,回车即可成功解题
http://www.wechall.net/challenge/training/php/globals/globals.php?login[0]=admin
转载: https://www.tuziang.com/combat/1683.html