實驗吧--web--你真的會php嗎


---恢復內容開始---

實驗吧的一道題php審計題。拉下來寫一寫。 

http://ctf5.shiyanbar.com/web/PHP/index.php

打開之后說have fun

那就抓包來看看吧

  

 

嗯...沒啥收獲,放在repeater里面看看

 

 

是這樣的,根據response反饋的信息,我們可以看見 hint(提示)

那就打開它看看吧

 

 代碼審計走一波。

<?php

$info = ""; 
$req = [];
$flag="xxxxxxxxxx";

ini_set("display_error", false); 
error_reporting(0); 


if(!isset($_POST['number'])){ //注意這里post請求  1.不能為空
   header("hint:6c525af4059b4fe7d8c33a.txt");  //文件頭添加hint提示。

   die("have a fun!!"); // 直接就die了
}
foreach([$_POST] as $global_var) { //遍歷數組
    foreach($global_var as $key => $value) { 
        $value = trim($value); //trim() 函數移除字符串兩側的空白字符或其他預定義字符。
        is_string($value) && $req[$key] = addslashes($value); 
    } 
} 
//global $var是外部$var的同名引用或者指針。
//函數
function is_palindrome_number($number) { 
    $number = strval($number); //本函數可將數組及類之外的變量類型轉換成字符串類型。
    $i = 0; 
    $j = strlen($number) - 1;//strlen() 函數返回字符串的長度 
    while($i < $j) { 
        if($number[$i] !== $number[$j]) { 
            return false; 
        } 
        $i++; 
        $j--; 
    } 
    return true; 
} 

//判斷是否為數值型
if(is_numeric($_REQUEST['number'])){

   $info="sorry, you cann't input a number!";

}elseif($req['number']!=strval(intval($req['number']))){

     $info = "number must be equal to it's integer!! ";  

}else{

     $value1 = intval($req["number"]);
     $value2 = intval(strrev($req["number"])); //strrev() 函數反轉字符串。 

     if($value1!=$value2){
          $info="no, this is not a palindrome number!";
     }else{
          //判斷回文數
          if(is_palindrome_number($req["number"])){
              $info = "nice! {$value1} is a palindrome number!"; 
          }else{
             $info=$flag;
          }
     }

}

echo $info;

 

如果要拿flag,需要滿足以下條件:
1.不為空,且不能是一個數值型數字,包括小數。(由is_numeric函數判斷)
2.不能是一個回文數。(is_palindrome_number判斷)
3.該數的反轉的整數值應該和它本身的整數值相等。即:
4.post個number.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM