Hello there, ('ω')ノ
🎯 目的
- 割引コード適用処理に潜む競合状態の脆弱性を発見し悪用する。
- 20%割引を複数回適用し、本来よりも大幅に安い価格で商品を購入。
- 所持クレジット内でジャケットを購入すればラボクリア。
🔐 アカウント情報
ユーザー名: wiener パスワード: peter
🧪 攻撃準備:挙動の把握と予測
一番安い商品をカートに追加。
提供された割引コードを適用。
Burp Proxy でキャプチャし、以下のエンドポイントを確認:
POST /cart
:商品をカートに追加POST /cart/coupon
:割引コードを適用GET /cart
:カートの中身確認
GET /cart
リクエストを Repeater に送り、セッションCookieの有無で動作を確認:- Cookieあり:カートの中身が表示される
- Cookieなし:空のカート
- → カート情報はサーバー側でセッション単位で管理されていると判明
⏱ 挙動の確認(ベンチマーク)
POST /cart/coupon
を Repeater に送信。同じリクエストを2回送信:
- 1回目:割引適用成功
- 2回目:
Coupon already applied
エラー
→ ここで「適用済みチェック」と「割引登録処理」の間にレースウィンドウがあると推測可能。
🚀 攻撃実行(競合状態を発生させる)
Burp Suite Professional(2023.9+)
POST /cart/coupon
を Repeater に送り、Custom actions パネルを開く。- 「New > From template」→ Trigger race condition を選択し保存。
- 作成された「Trigger race condition」横の ▶️ をクリック → 20回の並列リクエスト送信
ブラウザで
/cart
を確認:- 割引が 複数回適用 されていれば成功!
Burp Suite Community Edition(無料版)
POST /cart/coupon
を Repeater で新しいタブグループに追加。- 右クリック →「Duplicate tab」×19 → 合計20タブにする。
- グループを右クリック →「Send group in parallel」で20並列送信
ブラウザで
/cart
を確認:- 複数回割引が適用されていれば成功!
🧥 本命商品の購入でラボクリア
- 適当な商品・割引コードをカートから削除。
- Lightweight L33t Leather Jacket をカートに追加。
POST /cart/coupon
の並列リクエストを再度送信(20回)。/cart
を更新し、価格を確認:- クレジット以下なら購入 → 🎉 ラボクリア!
- 高ければ割引コードを削除し再実行。
💡 攻略のコツとヒント
テクニック | 解説 |
---|---|
リクエストは同時送信が鍵 | 並列実行が成功率を左右する |
成功の兆候はレスポンスにあり | "Coupon applied" が複数 → 成功の合図 |
成功しないなら何度もリトライ | 割引削除 → 攻撃再実行を繰り返す |
シングルパケット攻撃(Proのみ) | タイミング制御に最適(内部・外部レイテンシ対策) |
🛡 開発側の対策
- データベース操作をアトミックにする(トランザクション使用)
- クーポン適用に一意制約(UNIQUE)を追加
- リクエストの排他制御(ロック)を行う
Best regards, (^^ゞ