# Lab 1: Excessive trust in client-side controls

- Lab này không xác nhận đầy đủ thông tin đầu vào của người dùng và chứa lỗ hổng logic trong quy trình mua hàng.
- Để giải lab: mua `Lightweight l33t leather jacket` với mức giá ngoài ý muốn
Login với tài khoản lab cung cấp để kiểm tra chức năng mua hàng

Sau khi thêm sản phẩm vào giỏ thì trong request chứa cả giá sản phẩm

Ta sửa giá này về số nhỏ

Giá ở web đã thay đổi, lại còn có thể xN số lượng nữa

Đặt hàng thui

# Lab 2: High-level logic vulnerability

Yêu cầu giống lab trên
Đầu tiên, thêm thử 1 sản phẩm giá rẻ vào giỏ hàng

Trong request lúc này không chứa `price` nữa

Nhưng ta có thể thay đổi `quantity` xem sao


Nếu đổi `quantity` thành 1 số âm thì sao

Lúc này, tổng tiền trở thành âm

Hệ thống kiểm tra số lượng < kho nên vẫn cho phép, đây chính là lỗ hổng logic hệ thống gặp phải
Giờ ta sẽ đi mua hàng bằng cách trên để có thể mua được sản phẩm với giá rẻ nhất

Thay đổi số lượng của sản phẩm âm sao cho tổng dương cộng tổng âm bằng số dương bé nhất, và số dương này nhỏ hơn `store credit`
Đặt hàng thui

# Lab 3: Low-level logic flaw

Yêu cầu vẫn như lab trên
Sửa `quantity` thành 1000 thì trả về lỗi `Invalid parameter: quantity`

Thử với các số bé thì không gặp lỗi gì

Ta cần xác định xem `quantity` tối đa là bao nhiêu bằng Intruder


Đến payload 100 thì gặp lỗi, chứng tỏ giỏ hàng tối đa là `99`

Tiếp theo, ta sẽ gây ra sự tràn số, nếu có tràn tức là tổng tiền trở thành âm, lại giống lab 2 rồi
- Attack type: Sniper
- Payload: Null payloads, continue indefinitely
- Resource Pool: 1 concurrent request




Như vậy chỉ cần thêm 1 sản phẩm khác và tăng số lượng cho đến khi âm, tổng tiền 2 sản phầm lúc này phải nằm trong khoảng 0 -> 100$ (store credit)


# Lab 4: Inconsistent handling of exceptional input

- Lab này chứa lỗ hổng ở phần đăng ký tài khoản.
Thử đăng ký tài khoản và kiểm tra các request nhưng không thu được gì

Khi đăng ký hệ thống sẽ gửi link xác nhận qua email nên ta thử đăng ký với một email dài

Hệ thống chỉ hiển thị độ dài của email là 255 ký tự

Vì email client có thể nhận được subdomain nên ta sẽ thay đối
- domain trở thành `@dontwannacry.com.exploit-0a2c00ce03fd7427848af9ce019b00db.exploit-server.net`
- `@dontwannacry.com` có 17 ký tự, cần thêm 238 ký tự tiền tố nữa
```py
text = "a" * 238 + "@dontwannacry.com" + ".exploit-0a2c00ce03fd7427848af9ce019b00db.exploit-server.net"
print(text)
```



Có thể truy cập trang admin rùi


# Lab 5: Inconsistent security controls

Đăng ký tài khoản

Sau khi update email thành `a@dontwannacry.com` thì có thể truy cập vào trang admin


# Lab 6: Weak isolation on dual-use endpoint

- Lab này đưa ra giả định sai sót về quyền của người dùng dựa trên thông tin đầu vào của họ.
- Do đó, khai thác tính logic của các tính năng quản lý tài khoản để có quyền truy cập vào tài khoản của người khác tùy ý.
Sau khi đăng nhập, ta thấy chức năng đổi mật khẩu


Xóa đi tham số `current-password` thì đã đổi mật khẩu thành công

Đổi `username` thành `administrator` rồi đổi mật khẩu xem sao

Thành công, giờ login với `administrator: 1` và xóa `carlos`


# Lab: 7 Insufficient workflow validation

- Lab này có lỗi thiếu xác thực trong quá trình mua hàng
- Đầu tiên, kiểm tra các lỗi lúc thêm giỏ hàng thì không thu được gì
Đi mua thử 1 sản phẩm rẻ xem sao


Sau khi mua thì nhận được request chuyển đến đường dẫn `/cart/order-confirmation?order-confirmed=true` để xác nhận đã mua hàng
Tiếp theo, thêm *Lightweight l33t leather jacket* vào giỏ hàng và gửi lại request trên

# Lab 8: Authentication bypass via flawed state machine

Lab này chứa lỗ hổng trong quá trình đăng nhập.
Thử truy cập trực tiếp vào trang admin thì không thành công

Sau khi login ta được chuyển đến trang chọn role

Sau khi chọn role xong thì cũng không khai thác được gì
Giờ ta sẽ dùng burp suite bắt `GET /role-selector` và drop request này

Truy cập đến my account bằng cách thêm `/my-account` vào URL


# Lab 9: Flawed enforcement of business rules

Vào web ta sẽ nhận được mã giảm giá

Lướt xuống và signup lại nhận được mã thứ 2

Áp mã `NEWCUST5` rồi đến `SINGUP30` xem nào

Vẫn chưa đủ tiền mua
Tiếp tục áp `SINGUP30`

Không cho phép vì mã này đã được sử dụng
Vậy ta lại áp mã `NEWCUST5`

Thành công, vì vậy ta sẽ áp luân phiên 2 mã này cho đến khi đủ tiền mua áo

# Lab 10: Infinite money logic flaw

Lab này có thêm Gift card code

Mua ngay 1 cái gift card thuii

Nhập mã và store credit có thêm 3$

Nếu lặp lại các bước trên nhiều lần, chắc sẽ có rất nhiều tiền
Tự động hóa quy trình này như sau:
- Tạo macro cho chuỗi yêu cầu
```
POST /cart
POST /cart/coupon
POST /cart/checkout
GET /cart/order-confirmation?order-confirmed=true
POST /gift-card
```








- Test macro: status 302 và nhận được gift-card tức là macro chạy đúng

- Gửi `GET /my-account` qua Intruder
- Attack type: Sniper
- Payload: Null payloads, Generate `409` payloads (vì ta có 112$ , cần 1225$ nữa, mỗi 1 payload được cộng 3$)
- Maximum concurrent request: 1



- F5 để kiểm tra

- Mua áo thui

# Lab 11: Authentication bypass via encryption oracle

Ở phần commnet nếu nhập sai email thì ta nhận được thông báo


Trong cookie trả về `notification` đã được mã hóa

Sau khi login thì ta cũng nhận được cookie có dạng tương tự

Ở `GET /post?postId` ta thấy`notification` đã được encode, vì vậy ta sẽ thay thế cookie này bằng giá trị của `stay-logged-in`

Cookie duy trì đăng nhập chứa thông tin người dùng và một số trông giống như dấu thời gian
Vậy đổi chuỗi này thành `administrator:1699609413705` để duy trì đăng nhập cho admin

Gặp lỗi `Invalid email address` có vẻ do cookie đã mã hóa

Decode cookie này
- Mật mã sử dụng kích thước khối 16 byte. Dựa trên những hình ảnh trên 32 byte cũng có thể. Tuy nhiên, điều này sẽ rất bất thường và chỉ sử dụng quản trị viên làm tham số email sẽ hiển thị ba dòng được sử dụng và xác nhận 16 byte là kích thước khối.
- Trong mỗi khối, một số sự khuếch tán xảy ra. Khối thứ hai khác nhau trên mỗi byte trong khi 7 byte cuối cùng trong thông báo lỗi là tĩnh.

Ta sẽ xóa đi khối đầu tiên (23 byte) sau đó encode base64 -> url

Có thể xóa toàn bộ khối văn bản mã hóa mà không ảnh hưởng đến các khối sau. Có 7 byte thông báo lỗi nằm trong khối thứ hai: `dress: `. Ta không thể đơn giản xóa 7 byte này khỏi khối thứ hai vì điều này vi phạm tính toàn vẹn của khối

Tuy nhiên, nếu thêm 9 byte khác vào trước bản rõ mong muốn thì nó sẽ lấp đầy hoàn toàn khối 16 byte thứ hai và bản rõ bắt đầu ở đầu khối thứ ba.

Decode url -> base64 và xóa đi 2 khối đầu tiên (32 byte)

Encode 1 lần nữa: base64 -> url

Vậy là cookie này đã đúng

Thay thế `stay-logged-in` bằng cookie vừa tìm được





Done!