1. コード実行関数
コードを実行できる PHP の関数。 eval()、assert()、``、system()、exec()、shell_exec()、passthru()、escapeshellcmd()、pcntl_exec() など
デモコード 1.1:
コードインジェクションを含む 2 つのファイル
このファイルには、include()、include_once()、require()、require_once() などの特定の条件下での関数のコード インジェクションが含まれています。
allow_url_include=On および PHP Version>=5.2.0 の場合、コード インジェクションが発生します。
デモコード 2.1:
http://127.0.0.1/include.php?a=data:text/plain,%3C?php%20phpinfo%28%29;?%3E、つまり
にアクセスしてください。phpinfo()を実行します。
3 つの通常のマッチング コードの挿入
よく知られている preg_replace() 関数はコード インジェクションを引き起こします。 /e モード修飾子がパターンに存在する場合、コードの実行が許可されます。ここでは 3 つの状況に分けて説明します
3.1 preg_replace() パターンパラメータの注入
パターンは、最初のパラメーターのコード インジェクションです。
magic_quotes_gpc=Off の場合、コードが実行されます。
デモコード 3.1:
http://127.0.0.1/preg_replace1.php?reg=%3C/php%3E/e (
) にアクセスしてください。phpinfo()を実行します。
3.2 preg_replace() 置換パラメータの挿入
置換とは、2 番目のパラメーターのコード インジェクションであり、コードが実行されます。
デモコード 3.2:
http://127.0.0.1/preg_replace2.php?h=phpinfo() を送信すると、
になります。phpinfo()を実行します。
3.3 preg_replace()
の 3 番目のパラメーターの挿入subject パラメータを構築してコードを実行します。送信: http://127.0.0.1/preg_replace3.php?h=
phpinfo()
または http://127.0.0.1/preg_replace3.php?h=
${phpinfo%28%29}
原因コードの実行
デモコード 3.3:
4 つの動的コード実行
4.1 動的変数コードの実行
デモコード 4.1:
http://127.0.0.1/dyn_func.php?dyn_func=system&argument=ipconfig を送信し、ipconfig コマンドを実行します
4.2 関数コードの動的実行
デモコード 4.2:
http://127.0.0.1/create_function.php?foobar=system%28dir%29 を送信し、dir コマンド
を実行します。他 5 名
5.1 ob_start()関数のコード実行
デモコード 5.1:
5.2 array_map()関数のコード実行
デモコード 5.2:
http://127.0.0.1/array_map.php?callback=phpinfo を送信し、phpinfo() を実行します。
5.3 unserialize() と eval()
Unserialize() は、PHP で非常に頻繁に使用される関数です。 unserialize() を不適切に使用すると、簡単にセキュリティ リスクが発生する可能性があります。
http://127.0.0.1/unserialize.php?saved_code=O:7:%22Example%22:1:{s:3:%22var%22;s:10:%22phpinfo%28%29;%22 を送信します。 ;} つまり、phpinfo()を実行します。
5.4 セキュリティ上の問題を引き起こしやすい機能
同じタイプの関数が他にもたくさんあります
array_map()
usort()、uasort()、uksort()
array_filter()
array_reduce()
array_diff_uassoc()、array_diff_ukey()
array_udiff()、array_udiff_assoc()、array_udiff_uassoc()
array_intersect_assoc()、array_intersect_uassoc()
array_uintersect()、array_uintersect_assoc()、array_uintersect_uassoc()
array_walk()、array_walk_recursive()
xml_set_character_data_handler()
xml_set_default_handler()
xml_set_element_handler()
xml_set_end_namespace_decl_handler()
xml_set_external_entity_ref_handler()
xml_set_notation_decl_handler()
xml_set_processing_instruction_handler()
xml_set_start_namespace_decl_handler()
xml_set_unparsed_entity_decl_handler()
stream_filter_register()
set_error_handler()
register_shutdown_function()
register_tick_function()