クライアントのソースコードの調査中に、このコードを見つけました。 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
_をバイパスできますか?
少なくとも、改行はエスケープされないため、/index.php?arg=%0Als
を介してバイパスできます(current directoryからすべてのファイルをリストする必要があります)。
また、arg
を配列(/index.php?arg[]=1
)として渡してフルパス開示を取得する可能性もあります。