标签:
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那里应该使用" === "。
标签:
原文地址:http://www.cnblogs.com/hackxt/p/4147737.html