MYSQL インジェクションの基礎 - パート 1

#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') はこのように閉じられます

おすすめ

転載: blog.csdn.net/m0_72755466/article/details/129743910