在为客户检查源代码时,我发现了这段代码。它从 GET 获取未清理的参数,对其进行清理并执行shell_exec()
$arg = $_GET['arg'];
// sanitization, I suppose...
if(preg_match("/[#\&\\+\-%@=\\\:;,\.\'\"\^`~\_|\!\/\?\*$#<>()\[\]\{\}]/i", $arg, $match)) exit;
$code = shell_exec("/some/app $arg");
echo $code;
我知道你需要escapeshellarg()
在管道到shell_exec()
. 我不是为了那个答案而来的。
我的问题是,攻击者如何利用这段代码运行任意命令?攻击者如何绕过那个特定的preg_match
?