我可以在 PHP 中在这里注入 shell 命令吗?

信息安全 php 代码执行
2021-08-31 22:44:30

在为客户检查源代码时,我发现了这段代码。它从 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

1个回答

至少,换行符没有被转义,因此,您可以通过它绕过它/index.php?arg=%0Als(它应该列出当前目录中的所有文件)。

此外,有可能获得arg作为数组 ( /index.php?arg[]=1) 传递的完整路径披露。