リンク先のソース、開発者ツールでの通信状況を見ても特に問題なし。
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)、重いクエリ、サービスに負荷をかける可能性のあるペイロードも使う。
今回は時間遅延系を使うっぽい?