コマンドインジェクション攻撃
PHPでは次の5つの関数を使用して外部アプリケーションや関数を実行できます
system、exec、passthru、shell_exec、"(shell_execと同じ関数)
関数プロトタイプ
string system(string command , int &return_var)
command 実行するコマンド
return_var は、実行コマンド実行後のステータス値を格納します
string exec (string command, array &output, int &return_var)
command 実行するコマンド
を取得する出力実行コマンド 文字列出力の各行
return_var にはコマンド実行後のステータス値が格納される
void passthru (string command, int &return_var)
コマンド 実行されるコマンド
return_var にはコマンド実行後のステータス値が格納される
string shell_exec (文字列コマンド)
command 実行するコマンド
脆弱性の例
例 1:
命令注入攻击 PHP中可以使用下列5个函数来执行外部的应用程序或函数 system、exec、passthru、shell_exec、“(与shell_exec功能相同) 函数原型 string system(string command, int &return_var) command 要执行的命令 return_var 存放执行命令的执行后的状态值 string exec (string command, array &output, int &return_var) command 要执行的命令 output 获得执行命令输出的每一行字符串 return_var 存放执行命令后的状态值 void passthru (string command, int &return_var) command 要执行的命令 return_var 存放执行命令后的状态值 string shell_exec (string command) command 要执行的命令 漏洞实例 例1:
http://www.sectop.com/ex1.php?dir=| を送信します。
送信後、コマンドはsystem("ls -al | cat /etc/passwd");になります
php
func A()
{
dosomething()
}
func B()
{
dosomething() }
if (isset( $_GET["fアンク"]))
{
$myfunc = $_GET["func"];
echo $myfunc();
}
?>
プログラマは元々、関数 A と関数 B を動的に呼び出すことを望んでいました。 submit http://www.sectop.com/ex.php?func=phpinfo 脆弱性の発生
予防方法
1. 外部コマンドを実行しないようにする
2. 外部コマンドを置き換える機能をカスタム関数または関数ライブラリを使用するコマンド
3. エスケープシェルラーグ関数を使用してコマンドパラメータを処理します
4. 実行可能ファイルのパスを指定するには、safe_mode_exec_dir を使用します
esacpeshellarg 関数は、パラメータまたはコマンドの末尾となる文字をエスケープし、一重引用符 "'" で置き換えます。 「'」、二重引用符「"」、セミコロン「;」を「;」に置き換える
safe_mode_exec_dir を使用して、ここに使用するコマンドを事前に指定できます。パス内
safe_mode = On
safe_mode_exec_dir = /usr/local/php/bin/
上記は、PHP の脆弱性 (2) - コマンド インジェクション攻撃に対する完全な解決策です。 PHP 中国語 Web サイト (www.php.cn)!