#3点注入
可制御変数
データベースへのクエリ実行
変数が存在しないか、フィルターが厳密ではありません
#SQL インジェクションの分類
SQL インジェクションには、数値と文字の 2 種類があります。
数値: 入力パラメーターが整数の場合、デジタル インジェクションと見なすことができます (絶対ではありません)。
データベースから * を選択します。id=1 のテーブル
文字型: 入力パラメーターが文字列の場合、または ' " シングル クォーテーションまたはダブル クォーテーションで囲まれている場合、文字型と呼ばれます。
データベースから * を選択します。id="1" のテーブル
文字入力か数値インジェクションかを判断する方法
1. and 1=1 and and 1=2 を使って判断する(デジタル式は内容を数値で提出するのが一般的ですが、数値は必ずしもデジタル式とは限りません)
ケースプレゼンテーション:
Sqlilabse の第 1 レベル (数字か文字かの判断)
使用および 1=2 ページは正常です
Sqlilabse 2 番目のパス
and 1=2 を使用して、エコーせずにエラーを直接報告します
Web サイトに注入ポイントがあることがわかった場合 (フィルタリングや保護手段なしで)、and 1=2 を使用して理由を検出します。
彼が数字の場合、彼のクエリステートメントは
Select * from databases.tables where ?id=3 and 1=2 Select * from databases.tables where ?id=3 and 1=2 確立されていない場合、ページはエラーを返します
しかし、彼が文字クエリの場合
Select * from databases.tables where ?id=3 and 1=2 Select * from databases.tables where ?id="3 and 1=2" 彼は二重引用符で囲まれているため、内部の and は含まれません。
まとめ: 1パス目のsubmission and 1=1とsubmission and1=2はどちらもページを正常に表示できるので、デジタルインジェクション、つまり文字インジェクションはありえない。
第 2 レベル、送信 1=2 の条件が満たされない、ステートメントがデータベースによってクエリされない、ページが正常に表示されない、デジタル インジェクションと判断される
2.「-」を使用してクエリを実行します
デジタルデモ:
?id=3 に注意
ページ表示名ダミー
?id=3-1 で直接
彼が数字の場合、彼は id=2 でインターフェースを照会します
3-1=2だから
インターフェースが変わればデジタルインジェクション、ページが変わらなければ文字インジェクションと判断
この時点で、ページの内容が変更されました
名前:アンジェリーナ
彼がデジタルであることを確認してください
キャラクターデモ:
名前の確認: ダンミー
3-1 に入る
インターフェース:ダミー
変化なし
必ずキャラクタータイプに属してください
まとめ: 数字か文字種か分からない時は「-」で判断すると文字種なら計算してくれるので3-1で2を計算し、クエリは 2 つの結果を見つけ、インターフェイスに戻ります。ただし、文字タイプは動作しません
注: プラス記号はスペースとして解釈される場合があるため、「+」記号は使用しないことをお勧めします。
#閉鎖
1.閉ざされた道
' '' ') ") ')) "))
2. 閉鎖の役割
閉じた記号を手動で送信して、前の段落のクエリ ステートメントを終了し、後で他のステートメントを追加します。クエリに必要なパラメーターと不要なステートメントは、コメント記号でコメント アウトできます。
キャラクター注入ポイントだとします
sql语句:select * from databatase.tables where id="3"
クロージャーが使用されていない場合、作成する sql ステートメントは次のようになります。
sql语句:select * from databatase.tables where id="3 and 1=1"
このように、注入ステートメントは二重引用符で囲まれているため、その機能を実行できません。
閉じて使用
SQL ステートメント: SQL ステートメント: select * from database.tables where id= " 3 " and 1=1 --+ "
青色はそれに付随するダブルコーテーション、赤色は入力したダブルコーテーション、赤色のダブルコーテーションは事前に閉じるために使用します
次に、次のステートメントと 1=1 ステートメントを干渉なく正常にテストできますが、コメントアウトしたため、後でそれに付随する青い二重引用符は機能しません。
3. 注意事項
コメント: "--+" " # " "%23" "/**/" "--%20"
社内研修の注意事項: /*! SQL文*/ mysqlだけが認識できるもので、wafをバイパスするためによく使われます
例: select *from databases.tables where id=1
インライン インジェクションを使用します: select *from databases.tables where id=-1 /*! union */ /*! select */ 1,2,3,4
コメントアウト: コメント記号を使用して、プログラム ブロックを一時的に無効にします。
特定のプログラムを「コメント アウト」することは、一時的に実行しないことを意味します (削除するのではなく)。
ケースプレゼンテーション:
sqlilabs-最初のパス
この最初のレベルと同じように、彼は文字タイプのインジェクションです。「彼はエラーを報告します」と入力します
彼の SQL ステートメントを推測します。
*データベースから選択します。table wehre id="3' "
私たちは彼自身をコメントアウトすることができます」
Sql ステートメントを推測します。
*データベースから選択します。tabel wehre id="3 ' --+ "
' 一重引用符が 1 つだけになる
この時点で、後ろに sql ステートメントを記述して、注入ポイントがあるかどうかを判断できます。
SQL ステートメント
*データベースから選択します。tabel wehre id="3 'and 1=2 --+"
#締め方を決める
1. エラー報告をエコー
詳細はhttps://mp.csdn.net/mp_blog/creation/success/129761719を参照
一重引用符をドロップするか、二重引用符を挿入するだけです
エラーメッセージを取り出す
エラーの原因を分析する
まず、前後の緑色のシングルクォーテーションは対応関係で、対になっています
赤い部分が別ペア
最後に一重引用符が 1 つしか残っておらず、別の二重引用符が見つからないため、エラーを報告します
彼の原文は ''3'' なので limit 0,1
3 左右の位置は「 」、シングルクォーテーションで囲み、文字型であることを確認、シングルクォーテーションで閉じる
2. 閉鎖方法の判断(ブラインドインジェクションで、エラーメッセージは表示されません)
まず、ページが正常でid=1が正常であると判断します
一重引用符を入れるだけで、ページはエラーを報告します
?id=1 ' の後に --+ を追加し、次のコメントアウトを依頼します。
元の SQL ステートメントを推測します select * from databases.tables where id='1'
SQL インジェクション ステートメントを推測します select * from databases.tables where id='1'--+'
代表者が私にシングルクォーテーションマークを付けるように頼んだとき、ページエラーは故意に彼にエラーをさせたことに相当し、彼はそれを見つけることができなかったので、私たちのページは誤りです.
一重引用符を削除すると、彼のページは真です。それ以外の場合は、冗長インターフェイスをコメントアウトします
実際には、1つずつ比較してスペシャルを推測することしかできません。例えば
テストステートメント
http://127.0.0.1/sqli-labs-master/Less-8/?id=1'
http://127.0.0.1/sqli-labs-master/Less-8/?id=1"
http://127.0.0.1/sqli-labs-master/Less-8/?id=1')
http://127.0.0.1/sqli-labs-master/Less-8/?id=1")
どのエラーが報告されているかを確認し、エラー ステートメントを個別に取り出します
などのテスト
http://127.0.0.1/sqli-labs-master/Less-8/?id=1') --+
--+ を使用して次の内容をコメントアウトし、ページが正常にエコーされるかどうかを確認します。もしそうなら、彼が使用していることを確認してください
('1') はこのように閉じられます