Hello there, ('ω')ノ
🧠 脆弱性の概要
このラボでは、ショッピングカートの数量パラメータに対する不適切なサーバー側バリデーションを突くことで、商品価格を意図的に操作し、高額商品を格安で購入することが可能です。具体的には、負の数量を利用してカート内の合計金額を減少させるというロジックの抜け穴を悪用します。
🛠️ 攻略手順(Burp Suiteを使用)
1. ログインと初期確認
提供された資格情報でログインします:
- ユーザー名:
wiener
- パスワード:
peter
- ユーザー名:
ログイン後、アカウントが残高(例:\$100)を確認します。
2. 安価な商品の追加と数量操作
任意の安価な商品(例:価格が\$10の商品)をカートに追加します。
Burp SuiteのProxy > HTTP historyで、
POST /cart
リクエストを確認し、quantity
パラメータが存在することを確認します。Interceptを有効にし、同じ商品を再度カートに追加します。
インターセプトされた
POST /cart
リクエストのquantity
パラメータを負の値(例:-3
)に変更し、リクエストを送信します。カートを確認し、該当商品の数量が負の値になっていることを確認します。
3. 合計金額の調整
負の数量を利用して、カート内の合計金額が負の値になるように調整します。
例えば、\$10の商品を
-11
個追加すると、合計金額が-$110
になります。
4. 高額商品の追加と最終調整
"Lightweight l33t leather jacket"(価格が\$1000以上)をカートに追加します。
カート内の合計金額が、アカウントの残高(\$100)以下になるように、負の数量を調整します。
- 例:負の合計金額が
-$950
であれば、ジャケットの価格が\$1000でも、最終的な支払い額は$50
となり、購入可能になります。
- 例:負の合計金額が
5. 購入の確定
カート内の合計金額が残高以下であることを確認し、注文を確定します。
正常に注文が完了すれば、ラボは解決済みとなります。
🎯 攻略のポイントと注意点
サーバー側のバリデーション不備を突くことが重要です。クライアント側の制御(例:JavaScriptによる入力制限)は容易に回避可能です。
負の数量を利用することで、カート内の合計金額を意図的に減少させることができます。
高額商品の価格を直接操作するのではなく、他の商品との組み合わせで合計金額を調整するアプローチが効果的です。
💡 学習のまとめ
ビジネスロジックの脆弱性は、開発者の想定外のユーザー操作によって引き起こされることが多く、自動化されたツールでは検出が難しい場合があります。
Burp SuiteのRepeaterやIntruder機能を活用し、さまざまな入力値(特に異常値)を試すことで、脆弱性の有無を確認できます。
今回のような脆弱性は、実際のECサイトでも発生する可能性があり、金銭的な損失につながる重大な問題となり得ます。
Best regards, (^^ゞ