ksnctf – login

リンク先のソース、開発者ツールでの通信状況を見ても特に問題なし。

ID に ‘ OR 1=1; — を渡すとヒントが出る。sqlite3 での SQL インジェクションの問題であることがわかる。

sqlmap をインストール

python

git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev

ubuntu

sudo apt install sqlmap

攻撃

以下を実行 (ubuntu install の場合)

sqlmap -u "https://ctfq.u1tramarine.blue/q6/" --data "id=admin&pass=admin" -o --dump --risk=3 --dbms=sqlite3

sqlmap のオプションパラメータについて

–data

POST の場合に使う。ここで指定した値は他のパラメータ探索時にこの値で固定する。(pass=を探索するとき id=admin を固定して探索)

-o

冗長なテストを省略したり、レスポンスの違いをより効率的に判定するようになる

–dump

取得可能な情報の限り、テーブル内容を列挙する。
特定の DB 名を取得したい場合 -D <db名> を指定する。同様にテーブル名は -T <テーブル名>, カラム名は -C <カラム名> を指定する。

–dbms

デフォルトでは MySQL, PostgreSQL, Microsoft SQL, Oracle 等の全種類を想定して探索するが、dbms がわかっている場合はこれを指定して無駄を省くことができる

–level

テストの深さ・範囲を指定
level=1 → 最小限。基本的な GET/POST パラメータだけをテスト。(default)
level=2 → Cookie パラメータも対象に含める。
level=3 → User-Agent や Referer ヘッダも対象に含める。
level=4,5 → より多くの HTTP ヘッダや隠しパラメータまで対象にする。

–risk

テストの危険度を指定
risk=1 → 安全寄り。エラーを誘発しない基本的なペイロード。(default)
risk=2 → 少し危険。エラーメッセージを引き出すようなペイロードも使う。
risk=3 → 高リスク。時間遅延系(sleep)、重いクエリ、サービスに負荷をかける可能性のあるペイロードも使う。

今回は時間遅延系を使うっぽい?