SQL インジェクションは、*** がデータベースを攻撃するために使用する一般的な方法の 1 つです。その中心的なアイデアは次のとおりです: *** は、データベース データを呼び出す必要がある通常の URL の後にデータベース クエリ コードを構築し、次にそれに基づいて返された結果を使用して、必要なデータの一部を取得します。次に、SQL インジェクションの脆弱性を利用して、すでに構築されている *** プラットフォームを攻撃し、Web サイト管理者のアカウントとパスワードを取得します。ターゲット サーバーの IP アドレス: 192.168.80.129、*** ホストの IP アドレス: 192.168.80.128。
(1) インジェクションポイントを見つける
Web ページを開いて、URL に注目してください。
インジェクション ポイントは、コマンド呼び出し「shownews」がある「http://192.168.80.129/shownews.asp?id=7」のようなページである必要があります。 asp? "id=7" はページによって渡される値です。つまり、"id=7" は処理のために "shownews.asp" ページに渡されます。
テストのために、この URL の後に and 1=1 と and 1=2 を追加できます。
http://192.168.80.129/shownews.asp?id=7 および 1=1 の場合、Web ページは引き続き正常に表示されます。
http://192.168.80.129/shownews.asp?id=7 および 1=2 の場合、Web ページが正常に表示されません。
これは、「asp?」がコマンド パラメーターとして追加した「and 1=1」も呼び出すことを示しています。その後、呼び出されて実行される SQL ステートメントを構築できるため、情報を取得する必要があります。これは次のとおりです。インジェクション脆弱性と呼ばれます。コマンド パラメーターを呼び出すことができるこのような Web ページは、インジェクション ポイントと呼ばれます。
(2) テーブル名を推測します
***Web サイト *** の主な目的は、Web サイト管理者のユーザー名とパスワードを取得することです。とパスワードは両方ともバックエンド データベースのテーブルに保存されるため、最初にこのデータ テーブルの名前を推測する必要があります。
最も一般的に使用されるテーブル名は admin と admin_user です。テーブル名を推測するために、インジェクション ポイント URL の後にこのようなステートメントを追加できます:
http://192.168.80.129/shownews 。 asp?id=7 および (select count(*) from admin) > 0
「select count(*) from admin」は、管理テーブルに存在するレコードの数をカウントすることを意味します。管理テーブルが存在する場合の場合、このステートメントは値を取得します。この値が 0 と比較される限り、結果は正しく、Web ページは正常に表示されます。逆に、管理テーブルが存在しない場合、「select count(*) from admin」では値が得られず、>0と比較した結果が成立せず、Webページが正常に表示されません。
Web ページが正常に表示できない場合は、正常に表示されるまで別のテーブル名を試してください:
http://192.168.80.129/shownews.asp?id=7 および ( admin_user から count(*) を選択) > 0
#http://192.168.80.129/shownews.asp?id=7 および (manage_user から count(*) を選択) > 0 この Web サイトのテーブル名は manage_user です。 一般的なテーブル名は次のとおりです: admin sysadmin manger admin123 webadmin member manage_user注: テーブル名が本当に推測できない場合は、Mingxiaozi などのツールを使用することもできます。
(3) フィールドの数を推測します
次のステップは、このテーブルのどのフィールドにユーザー名が格納されているかを推測することです。まず、データテーブルにフィールドがいくつあるかを知る必要があります。 ここでは、order by ステートメントを使用しています。order by の本来の意味は、特定のフィールドで並べ替えることです。「order by 10」は、10 番目のフィールドで並べ替えることです。10 番目のフィールドが存在する場合は、を選択すると、Web ページは正常に表示されますが、Web ページが正常に表示されない場合は、10 番目のフィールドが存在しないことを意味します。 http://192.168.80.129/shownews.asp?id=7 order by 11このメソッドを使用すると、このテーブルに合計 11 個のフィールドがあると推測できます。(4) フィールド名を推測します
次のステップは、どのフィールドにユーザー名とパスワードが格納されているかを確認することです。「union select」結合クエリ ステートメントが使用されます。ここ。#http://192.168.80.129/shownews.asp?id=7 manage_user から結合選択 1,2,3,4,5,6,7,8,9,10,11
ここでは、ユーザー名とパスワードを保存するフィールドが公開されます。
ユーザー名を保存するフィールドは通常ユーザー名と呼ばれ、パスワードを保存するフィールドは通常パスワードと呼ばれます。2 番目と 3 番目のフィールドを次の 2 つの名前に置き換えます:
http://192.168.80.129/shownews.asp?id=7 manage_user から結合選択 1、ユーザー名、パスワード、4、5、6、7、8、9、10、11
この時点でユーザー名とパスワードが判明しました。
(5) バックグラウンド管理の入り口を推測しますこの Southern Data Template バージョン 2.0 には、「管理者ログイン」というページがすでに含まれています。へのリンク。現在、ほとんどの Web サイトではこのように設定されていないため、通常は経験に基づいて推測する必要があります。管理入口は通常、Web サイトのサブディレクトリ admin に保存されます。アドレス http://192.168.80.129/admin を入力し、自動的に管理ポータルが表示されます。
ここでは、以前に公開された管理者アカウントとパスワードを使用してログインできますが、パスワード「3acdbb255b45d296」は明らかに MD5 によって暗号化されています。
以上が手動SQLインジェクションの実装方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。