ホームページ  >  記事  >  バックエンド開発  >  PHPの脆弱性徹底解説(2) ~コマンドインジェクション攻撃~

PHPの脆弱性徹底解説(2) ~コマンドインジェクション攻撃~

黄舟
黄舟オリジナル
2016-12-22 09:09:551558ブラウズ

コマンドインジェクション攻撃

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の脆弱性徹底解説(2) ~コマンドインジェクション攻撃~

evalインジェクション攻撃

eval関数は入力文字列パラメータをPHPプログラムコードとして実行します

関数プロトタイプ:

mixed eval(string code_str) //eval インジェクションは通常、攻撃者が入力文字列を制御できる場合に発生します

http://www.sectop.com/ex2.php?arg=phpinfo( ); を送信するとき、この脆弱性は

動的関数



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)!


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。