# Lab 1: Limit overrun race conditions


- Sau khi đọc docx thì ta biết được server sẽ xử lý request đầu tiên và kết thúc khi cập nhật DB để cho biết rằng bạn đã sử dụng mã này.
- Thời gian này được gọi là race window, và ta có thể liên tục yêu cầu giảm giá bao nhiêu lần tùy thích.
- Do đó, ta sẽ tấn công race condition bằng cách gửi song song nhiều request cùng lúc.
Ta có request áp dụng coupon

Sau đó tạo khoảng 20 request như vậy để gửi. Nhóm chúng lại để gửi cùng 1 lúc (như 1 cuộc đua)

Chọn gửi request song song



Giờ thì mua được áo với giá siêu hời

# Lab 2: Bypassing rate limits via race conditions

Vẫn là gửi nhiều request để tận dụng race window nhưng áp dụng kỹ thuật này để bypass mật khẩu `carlos`
Đầu tiên, kiểm tra chức năng login

Nếu nhập sai password quá 3 lần thì sẽ bị khóa
Thử làm giống lab trước, gửi 20 request với password sai xem sao

Như vậy, ta sẽ login được nhiều hơn 3 lần trước khi bị khóa
Gửi qua Turbo intruder để xử lý


Vậy tìm được `carlos: shadow`

Done!
# Lab 3: Multi-endpoint race conditions

Đầu tiên, gửi 1 request đến server thì mất hơn 600ms để phản hồi

Nếu gửi nhanh 2 request thì mất 300ms để phản hồi

- Hệ thống xảy ra điều này bởi vì khi gửi request 1 đến thì server sẽ kiểm tra session trong 600ms, ngay lập tức lại nhận được request 2 (300ms) và không cần kiểm tra lại session nên phản hồi nhanh hơn.
- Ta có độ trễ khoảng 300ms. Tận dụng độ trễ này thực hiện attack race condition.
- Thêm 2 request sau vào 1 group


- Sử dụng request `GET /` để xác thực giúp quá trình phản hồi của 2 request trên nhanh hơn

Attack race condition trong quá trình mua gift card nào

Đầu tiên, send "homepage", tiếp theo gửi nhanh 2 lần "group"

Done!
# Lab 4: Single-endpoint race conditions

- Lab chứa chức năng update email bằng cách nhấp vào link xác nhận được gửi qua email


- Nếu gửi 2 hoặc nhiều request đến 1 điểm cuối thì có thể gây ra nhầm lẫn: reset password cho victim nhưng mã xác nhận lại gửi cho hacker.
- Vì vậy, nếu ta gửi nhiều request update email đến server thì cũng gây ra hiện tượng tương tự.
Thử xem đúng không nào, gửi song song 5 request với 5 địa chỉ email khác nhau


Server xảy ra nhầm lẫn như dự đoán
Áp dụng đối với email `carlos` để giải lab


Lặp lại vài lần ta mới gặp được email này =))))


Done!
# Lab 5: Partial construction race conditions

Đầu tiên, kiểm tra chức năng register


Hệ thống chỉ cho phép đăng ký với domain `@ginandjuice.shop`
Kiểm tra request thì thấy hệ thống sử dụng script js để xác thực người dùng, script này submit form đến `/confirm?action`, `action` này chứa truy vấn có mã token

Kiểm tra cách xác thực của server với các giá trị token



Nhận được các thông báo lỗi khác nhau tức là nó đọc được các loại dữ liệu khác nhau.
Nếu cần xác thực lại thì sẽ mất 1 thời gian race window nhỏ. Vì vậy sẽ có 1 token hợp lệ để xác nhận đăng ký của người dùng.
Bây giờ đi register đồng thời để tìm được token đó. Script như sau:
```python
def queueRequests(target, wordlists):
engine = RequestEngine(endpoint=target.endpoint,
concurrentConnections=1,
engine=Engine.BURP2
)
confirmEmail = '''POST /confirm?token[]= HTTP/2
Host: 0ac200a503fc8e228002126700410079.web-security-academy.net
Cookie: phpsessionid=XeQZfcHZmjjjPbvNmfrs4JgAhtGqnnIG
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/119.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: https://0ac200a503fc8e228002126700410079.web-security-academy.net/register
Sec-Fetch-Dest: script
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
Te: trailers
'''
for user in range(20):
username = 'a1' + str(user)
engine.queue(target.req, username, gate=str(user))
for confirm in range(50):
engine.queue(confirmEmail, gate=str(user))
engine.openGate(str(user))
def handleResponse(req, interesting):
table.add(req)
```

Reponse đăng ký thành công cho tài khoản `a111: 123`

Login với tài khoản vừa đăng ký được


Done!
# Lab 6: Exploiting time-sensitive vulnerabilities

Đầu tiên, kiểm tra lab này có attack theo race condition được không
Ta cần gửi ít nhất 2 request

Mặc dù gửi 2 request song song nhưng request thứ 2 nhận được phản hồi trễ 300ms


Vậy là server xử lý lần lượt chứ không xử lý đồng thời
Ta sẽ thay đổi giá trị của session và csrf xem sao

Giờ thì 2 request đã được xử lý cùng lúc

Còn token thì vẫn nhận được 1 token duy nhất

Race condition tương tự lab trên thui
Đổi username thành `carlos`



Không thành công
Lặp lại vài lần nữa thì oki rùi

