1. 遅延注入の原理
タイム ブラインド インジェクションとも呼ばれる遅延インジェクションは、SQL ブラインド インジェクションの手法です。ブラインド タイム インジェクションは、ページに SQL インジェクションに対する応答がない場合、または応答に違いがない場合に使用できます。
ブラインド インジェクション: SQL インジェクションの場合、SQL ステートメントがクエリを実行した後、クエリされたデータはページにエコーされず、いくつかの特別な方法を使用して判断または試行する必要があります.このプロセスはブラインド インジェクションと呼ばれます.
一般的に、ブラインドには次の 3 つのタイプがあります。
1. ブール ブラインド ノート: ページが存在するかどうかに関係なく、true または false を返します;
2. タイム ブラインド ノート: ページが遅延しているかどうかを判断します;
3. エラー ブラインド ノート: ページにエラーを報告させる特別な文を入力します,エラーメッセージを返して判断します。
一般的に使用される関数の遅延注入:
- プログラムをハングアップさせます (秒単位)
sleep(<seconds>)
- if ステートメント
if(<condition>,<true_expr>,<false_expr>)
構文: 条件が true の場合は true_expr を返し、それ以外の場合は false_expr を返します。
- 文字列の長さを取得する
length()
一般的に使用される: ?id=1' and if((length(查询语句) =1), sleep(5), 3) -- a
、クエリ結果の長さを判断するために、応答時間が 5 秒を超える場合は、判断が正しいことを意味し、間違っている場合はクエリの長さを増やし続けます。
- インターセプト文字列
substr(string,num start,num length)
- 文字はアスキーコード値に変換(文字内容の判断に使用、32~126を網羅)
ascii()
一般的なペイロード:
sleep(10)--
benchmark(1000000000,md5(1))--
pg_sleep(10)--
; WAITFOR DELAY ‘00:00:10’;--
?id=1 and if(1,sleep(5),3) -- a
?id=1' and if(1,sleep(5),3) -- a
?id=1" and if(1,sleep(5),3) -- a
2. データパケット解析
① データ パッケージを開くと、明白な POST 要求が表示されます。
②データ パケットを選択し、右クリックしてフローを追跡します –> HTTP フロー。ascii、substr、sleep などのキーワードが表示されます。
③ テキストの ASCII 文字(;/?@:&=+%$ などの URI コンポーネントを区切る句読点など)がエンコードされていることがわかり、encodeURIComponent() 関数が有効であると判断されます。使用、オンライン ツールボックスを使用してデコードするには (https://www.sojson.com/encodeurl.html):
デコード後、リクエスト ステートメントにまだエンコードが含まれていることがわかり、結果が再度デコードされます。
④ 遅延注入ステートメントがはっきりとわかります: id=1) and if((ascii(substr((select flag from flag),1,1))='40'),sleep(3),0) – , where '40' は ASCII の左括弧に対応します;
⑤ この時点で、フィルタ frame.time_delta>3&&http を使用して、遅延が 3 を超えるパケットを除外し、その後の分析を実行してすべての ASCII 文字を抽出できます。