命令執(zhí)行原因
`
$target = $_REQUEST[ 'ip' ];
// Determine OS and execute the ping command.
if (stristr(php_uname('s'), 'Windows NT')) {
$cmd = shell_exec( 'ping ' . $target );
echo '<pre>'.$cmd.'</pre>';
} else {
$cmd = shell_exec( 'ping -c 3 ' . $target );
echo '<pre>'.$cmd.'</pre>';
`將用戶輸入的參數(shù)帶入了shell_exec函數(shù)執(zhí)行了系統(tǒng)命令若贮,在系統(tǒng)命令中可以通過 ; && &執(zhí)行多條命令省有,如圖片
這里就同時執(zhí)行了ping和ls命令
命令執(zhí)行繞過
1.命令分隔符繞過
過濾
這種黑名單防護是很不可靠的痒留,有多種方法可以繞過,比如使用它沒有過濾的方法(如&蠢沿,|)和利用過濾本身來繞過(&;&)
|將前面命令的輸出當作后面命令的輸入伸头,例如
ls|uame
%0a符號--換行符
%0d符號--回車符
2.空格繞過
1.< 符號
2.%09
3.$IFS$9 符號${IFS} 符號
3.命令終止符繞過
%00
%20 #
4.命令黑名單繞過
$a=if;$b=config;$a$b