# Web Security Academy Business logic vulnerabilities Writeup [toc] ## Excessive trust in client-side controls https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-excessive-trust-in-client-side-controls wiener:peterでログインすると、`$100.00`しか持っていないため、`Lightweight "l33t" Leather Jacket`を購入できないことがわかります。 試しに`Add to cart`をするときのリクエストを見てみると、 ```text= POST /cart HTTP/2 Host: 0a89008504943c938191436700b10009.web-security-academy.net Cookie: session=gQWMBb8eG2haem5V74BXGZErInW2TCg6 (redacted) productId=1&redir=PRODUCT&quantity=1&price=133700 ``` `price`というパラメータがあることがわかります。 これを試しに`1`とすると、`$0.01`でカゴに入っていることがわかります。 購入をしてみるとラボクリアです。 ## High-level logic vulnerability https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-high-level カートに追加時のリクエストのBody Parameter `quantity`が負数を受け付けることがわかります。 ![image](https://hackmd.io/_uploads/SkWYXF5Ra.png) このようにすることで購入できる金額まで操作すれば良いです。 ## Inconsistent security controls https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-inconsistent-security-controls > Admin interface only available if logged in as a DontWannaCry user どうやら`/admin`には`@dontwannacry.com`ドメインのアカウントのみアクセスが可能なようです。 `Register`の際は、`@dontwannacry.com`を選択したところでメールを受け取れません。 ただし、ユーザ登録後ログインを行うとメールアドレス変更機能があります。 ここではメールアドレスの検証をおこなわないため、`@dontwannacry.com`をドメインとしてもつメールアドレスを指定してあげれば`Admin panel`が見えるのであとはcarlosを消すだけです。 ## Flawed enforcement of business rules https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-flawed-enforcement-of-business-rules このラボでは、アクセス時に表示されるクーポンコードの他に画面下にSignupしたらもらえるクーポンがあります。 この2つのクーポンを交互に使用することで、本来一度使ったクーポンは使用できないのに使用できるというバグがあります。 これを利用して購入できる金額までクーポンを適用し、`lightweight leather jacket`を購入すればこのラボはクリアです。 ## Low-level logic flaw https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-low-level 32123個カートに入れると、`-$1221.96`請求されます。 ![image](https://hackmd.io/_uploads/BJyCahqR6.png) これから適当に正を向くように追加していけばラボがクリアできます。 ![image](https://hackmd.io/_uploads/BkHgAh9Ra.png) ## Inconsistent handling of exceptional input https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-inconsistent-handling-of-exceptional-input /adminにアクセスすると、以下のメッセージが見えます。 > Admin interface only available if logged in as a DontWannaCry user `@dontwannacry.com`を持つユーザを作成しないと目的を達成できなさそうです。 アカウント登録の際、メールアドレスを長くしてみます。 すると、ログイン後`Your email is: `が、255文字のみ表示されていることがわかります。 ではこのとき、`@dontwannacry.com (17char)`をつけるとどうなるでしょうか? ```text= 239char@dontwannacry.com.{your-domain.com} # example aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@dontwannacry.com.{YOUR EMAIL DOMAIN} ``` のように。 こうすれば、`.{YOUT EMAIL DOMAIN}`部分が削られ、`@dontwannacry.com`をEmailに持つユーザになってくれることを期待します。 ![image](https://hackmd.io/_uploads/rkeCfTqCa.png) うまく行っているようです。 後はcarlosを消し終わりです。 ## Weak isolation on dual-use endpoint https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-weak-isolation-on-dual-use-endpoint `wiener:peter`でログインすると、パスワード変更機能があることがわかります。 パスワード変更の際のリクエストから、`username`をadministrator, `current-password`を削除してリクエストを送るとパスワード変更ができたことがわかります。 後は、new passwordに指定したパスワードとadministratorでログインをし、carlosを削除すれば終わりです。 ## Insufficient workflow validation https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-insufficient-workflow-validation `[POST] /cart/checkout`した際、成功すれば`/cart/order-confirmation?order-confirmed=true`にリダイレクトします。 この挙動を利用して、`Lightweight "l33t" Leather Jacket`をカートに追加し、リダイレクト先のリクエストを発行すればラボがクリアされます。 ## Authentication bypass via flawed state machine https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-authentication-bypass-via-flawed-state-machine `/admin`にアクセスしてみると、administrator以外アクセスできないと出ます。 > Admin interface only available if logged in as an administrator ログインをする過程で、`/role-selector`という謎画面が登場します。 どうやらroleを選択するようです。 `admin`, `administrator`を入れてもうまく行きません。 `[POST] /login`を`wiener:peter`で通過したら、`[GET] /admin`にアクセスすると何故かAdmin panelにアクセスできるので削除して終わりです ## Infinite money logic flaw https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-infinite-money Gift Cardを`SIGNUP 30`クーポンコードで購入し、gift card codeを自分で入れると持金が何故か増えます。 また、Coupon Codeは一回の購入処理に付き一度ですが、何度も使用できそうです。 この挙動を利用して持金をどんどん増やしていけば良さそうです。 このラボをクリアするためにはマクロを組んだほうがいいですが、よしなにやりましょう。 ## TODO : Authentication bypass via encryption oracle