PHP Web サイトを攻撃するテクニックについて教えてください
皆さん、こんにちは。最近、変態教師に変態的なトピックを提供してもらいました。いくつか提案をいただければ幸いです:
彼は学校で Linux + Apache + PHP を作成しました。 LAN + PostgreSQL で構築された個人サイト、そして私たちの仕事はサイト内のバグを見つけるか、サイトを直接攻撃することです (サーバーを乗っ取ってブラックスクリーンにしたい!)。バグを見つけると追加ポイントが...
思い浮かぶ 2 つの方法は次のとおりです:
1. シェルを作成し、Web サイトの正当なアカウントが見つかるまで延々とテストします。 (何人かの生徒がすでにこれを実行し、5 分間でログイン要求パケットが 10,000 に達しましたが、失敗しました。その理由は、教師が狡猾で、ID が一般ユーザーや webadmin などではないため、この方法が困難であるためです)
2. セッションを使用して記事を書く (ネットで見たのですが、操作方法がわかりません)
この分野での経験がなく、良いアイデアもありません。そこで、ここで専門家をお招きします。もし何かアドバイスがあれば、もう少し詳しく教えていただければ幸いです。
よろしくお願いします。回答に満足したらポイントを追加してください
-----解決策-------- ---- --------
SQL インジェクト / XSS / CC....
------解決策---------
素晴らしい。 。 。
------解決策---------
SQL インジェクト / XSS
これら 2 つ 比較的信頼できる
------解決策------------------
参考のみ:
PHP Web サイトに侵入する方法
講義 1: インジェクション ポイントがあるかどうかを判断する
これは非常に簡単です。ページの形式は :index.php?id=2 であることを確認してください。このアドレスを送信すると、PHP は MYSQL データベースと併用されることがよくあります。プログラムは通常、次のように処理します。
1. GET または POST を使用して、送信した id=1 を取得し、この値を変数 id に渡します。
2. select * from settings_table where id =$id.
上記のステートメントはクエリステートメントで、$id=1 を代入すると次のようになります。
select * from settings_table where id=1
これで問題はありません。id 1 の情報が取得されます。出力されて表示されるため、通常のページが表示されます。
————————————————————————
判断方法を参照してください:
1. id=1 と 1 を送信します。 =1
これを見てください。どのような効果があるでしょうか? ここの $id は 1 で、1=1 です。どのようになるかを見てみましょう:
select * from settings_table where id =1 and 1=1
このステートメントは and ステートメントを追加し、その後に 1=1 が確実に成立するため、上記のステートメントの成立には影響しません。また、id=1 の情報を取り出して表示します。元の通常ページのままです。
2. id =1 と 1=2 を送信してみましょう。
これがどのような影響を与えるかを見てみましょう。
select * from を SQL で実行する方法を見てみましょう。 settings_table where id =1 and 1=2
このステートメントを分析すると、最後に 1=2 が追加されることを除いて、以前と同じです。これは当然当てはまりません。そしてandで繋がっているので当然条件に合うものが見つからない!エラーまたは空白のページが表示されるだけです。 !
上記は、一般的に and 1=1 & および 1=2 を使用して判断する基本的な理由ですが、ここで次のような注意点があります。
1. プログラムを処理するときは、次のようにする必要があります。 be where id =$id と It's not where id=$id は大きく異なります。なぜ異なるのかについては後で説明します。 。
2. プログラムが送信したパラメータを処理しないか、うまく処理しないため、プログラムが送信したパラメータをさらに処理する場合は別の話になります。
レクチャー 2: MYSQL のバージョンを簡単に判断する
前提条件: news.php?id=1 などのインジェクション ポイントを取得します。
このポイントを見つけました。submit and 1=1 and and 1= 2違う形で返されます。
この方法で MYSQL のバージョンを推測できます。 。手順は次のとおりです:
1. /news.php?id=1/*!40000%20s*/ を送信します。正常に返された場合は、MYSQL バージョンがバージョン 4000 未満であることを意味します。最大値は調整できます。たとえば、Submit 39000 に変更しました。再度正常に動作する場合は、Submit 38000 を実行します。エラー メッセージが返されるまで、最終的な修正バージョンは MYSQL バージョンです。 。
以下は私がテストを提出したときのプロセスです(MYSQL版のみ)
40000 (+)--39000 (+)--38000 (+)--370000 (-)--37900 (+)- - 37800(+)--37700(-)--終了! !
取得した MYSQL のバージョンは 37700 です。
2. 一般に、MYSQL が 4.0 以降であるかどうかのみを考慮します。以下はサポートされていないため、通常は 40000% のみを使用します。 20s*/ バージョン 4.0 以降であるかどうかを確認します。
追記: /*!40000%20s*/ /*!......*/ は mysql の特別なコメント メソッドです。使い方を覚えておいてください~~
レクチャー 3: PHP インジェクションを通じてテーブル名を取得する方法。 。
書こうとしていたところ、質問されていたのでまとめて第3回講座とさせていただきます!
引用:
原文投稿者: Spirit by 2006-5-16 05:57 PM:
とてもたくさんの記事を読みました...目がくらくらしてしまいました
それに関係するものまた、比較的包括的でもあります
しかし、テーブルの作成方法がまだわかりません
フィールドを直接削除することはできませんか? ?
一つ一つ説明してください
データベーステーブルのフィールド値...
このロジックは正しいと思います...
ところで、私は今でもそう感じています...
テーブルは本当に難しいです直接公開される可能性がある ASP とは異なり、PHP はまだ公開できません。
1. 経験に基づいて推測します: 一般的に使用される admin、user、news、vote、wenzhang、guanliyuan など。 、など、待ってください、それについては何もできません。 。
2. コードを公開する: Load_file を使用してファイル コードを公開すると、データがどのテーブルとフィールドに補間されているかがわかります。しかし、load_file も非常に優れています。 。それについては後で詳しく説明します。 。
-----------------------------------------------
これについて詳しく説明します。
1. これについては何も言うことはありません。たとえば、news.php?id=1 のようなインジェクション ポイントが見つかった場合は、ユニオン クエリを使用して次のことを行うことができます。例: news.php?id=1 および 1=2 結合選択 1,2,3,4 が確立されます。
次のように推測できます: news.php?id=1 および 1= 2 Union select 1 ,2,3,4 from admin/*admin テーブルが存在する場合は true を返し、そうでない場合はテーブル admin が存在しません。他はこれと同じです。
2. これは少し究極ですが、たとえば、絶対パスを取得すると、ファイルのコードを取得できます。たとえば、管理者のログインページを取得すると、次のようになります。 SQL ステートメントを見れば、彼がどのテーブルから値を取得したかがわかりますね?》》
原理は次のようなものです。もっと考えて、あなたの経験を共有したいと思います。 。 。 。
レクチャー 4: 引用符を付ける場合と付けない場合の違い
多くの友人は、引用符の機能についてあまり知りません。彼らは、引用符を付けても付けなくても同じ効果があると考えています。
引用符(一重、二重を含む)は正しいです。 私たちの注入は大きな影響を及ぼし、主に魔法の状態に関係します。魔法がオフの場合は効果がありませんが、魔法がオンの場合は完全に影響します。違う。 。