码迷,mamicode.com
首页 > Web开发 > 详细

WeChall-PHP

时间:2014-12-25 20:04:50      阅读:377      评论:0      收藏:0      [点我收藏+]

标签:

0x01  PHP 0817

 1 <?php
 2 if (isset($_GET[‘which‘]))
 3 {
 4         $which = $_GET[‘which‘];
 5         switch ($which)
 6         {
 7         case 0:
 8         case 1:
 9         case 2:
10                 require_once $which.‘.php‘;
11                 break;
12         default:
13                 echo GWF_HTML::error(‘PHP-0817‘, ‘Hacker NoNoNo!‘, false);
14                 break;
15         }
16 }
17 ?>

在$which变量后面会自动补上".php“,所以只要提交参数solution就可以了。

http://www.wechall.net/challenge/php0817/index.php?which=solution

 

0x02  Training: Register Globals

核心代码:

1 if (isset($login))
2 {
3         echo GWF_HTML::message(‘Register Globals‘, $chall->lang(‘msg_welcome_back‘, array(htmlspecialchars($login[0]), htmlspecialchars($login[1]))));
4         if (strtolower($login[0]) === ‘admin‘) {
5                 $chall->onChallengeSolved(GWF_Session::getUserID());
6         }
7 }

如果开启了register globals的话,则可以在url上输入login[0]=admin来绕过前面的逻辑判断。可以给login[0]赋初值false让代码更安全。

 

0x03  Training: PHP LFI

1 $filename = ‘pages/‘.(isset($_GET["file"])?$_GET["file"]:"welcome").‘.html‘;

这里会默认在$file的前面和后面分别加上pages和.html。所以这样构造url,“../”跨目录,%00截断。

http://www.wechall.net/challenge/training/php/lfi/up/index.php?file=../../solution.php%00

 

0x04  PHP 0818

 1 function noother_says_correct($number)
 2 {
 3         $one = ord(‘1‘);
 4         $nine = ord(‘9‘);
 5         # Check all the input characters!
 6         for ($i = 0; $i < strlen($number); $i++)
 7         { 
 8                 # Disallow all the digits!
 9                 $digit = ord($number{$i});
10                 if ( ($digit >= $one) && ($digit <= $nine) )
11                 {
12                         # Aha, digit not allowed!
13                         return false;
14                 }
15         }
16         
17         # Allow the magic number ...
18         return $number == "3735929054";
19 }

这个题目要求输入的$number要和3735929054相等,从上面的代码可以看出,输入的$number之中不能包含1-9之间的数字。在php中,数字型字符串在进行比较的时候会直接转换成数值来进行比较,所以就可以输入3735929054的hex值来bypass。这里要更安全更快的话,在return那里应该使用" === "。

 

WeChall-PHP

标签:

原文地址:http://www.cnblogs.com/hackxt/p/4147737.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!