# Setup môi trường - crAPI
- Tải file `https://github.com/OWASP/crAPI/archive/refs/heads/develop.zip` về và giải nén
- `cd crAPI-develop/deploy/docker`
- `docker-compose pull`
- `docker-compose -f docker-compose.yml --compatibility up -d`
Access: http://localhost:8888
- Đối với các lỗ hổng IDOR hoặc Broken Access Control, cần tạo 2 tài khoản để test.
# 1. Broken Object Level Authorization (BOLA) Vulnerabilities
## Challenge 1 - Access details of another user’s vehicle
Khi Refresh Location, web lấy vị trí theo cardId, cardId này được truyền vào URL

Ở Community chứa các bài đăng của user, khi GET thì ta có được cardId

Thay đổi cardId, vậy là có thể xem được thông tin của user khác

## Challenge 2 - Access mechanic reports of other users
Ở chức năng Contact Mechanic, khi gửi request đi ta nhận được reponse là 1 link report, link này chứa report_id trên URL

Mỗi 1 report được gửi đi id sẽ tăng lên 1

Chỉ cần thay đổi report_id là ta có thể truy cập vào báo cáo của người dùng khác


# 2. Broken User Authentication
## Challenge 3 - Reset the password of a different user
Chức năng reset password

Sau khi nhập email thì mã OTP sẽ được gửi về địa chỉ email đó, mã này gồm 4 chữ số

Mật khẩu mới sẽ được gửi đi kèm với OTP vừa nhận được. Vậy ta có thể brute force OTP này để reset password của user khác.

Request `Set Password` tương ứng

Giờ thử với email của user khác

Ta sẽ brute force OTP

Tuy nhiên thì ở API đã bị rate limit

Mà ở đề có nói
> If you face any protection mechanisms, remember to leverage the predictable nature of REST APIs to find more similar API endpoints.
Đổi thử sang v2 thì oke


# 3. Excessive Data Exposure
## Challenge 4 - Find an API endpoint that leaks sensitive information of other users
Community

## Challenge 5 - Find an API endpoint that leaks an internal property of a video
Khi upload 1 video, các thuộc tính nội bộ của nó được hiển thị trong response


# 4. Rate Limiting
## Challenge 6 - Perform a layer 7 DoS using 'contact mechanic' feature
Request chức năng Contact Mechanic, ta thấy có 2 giá trị `"repeat_request_if_failed":false` và `"number_of_repeats":1`

Thay đổi chúng để gửi nhiều request đến server

# 5. Broken Function Level Authorization (BFLA)
## Challenge 7 - Delete a video of another user
Chức năng thay đổi tên video

Sử dụng method OPTIONS để xem server cho phép ta sử dụng các method nào

Server yêu cầu phải là admin mới được xóa
Thay đổi endpoint thành admin thì thành công



# 6. Mass Assignment
## Challenge 8 - Get an item for free
Chức năng đặt hàng

Sau khi đặt xong có thể xem thông tin đơn hàng

Response trả về chứa trạng thái của đơn hàng: `delivered`, và cho phép sử dụng method PUT.

Vậy ta sẽ sửa trạng thái của order bằng PUT

Response trả về gợi ý về giá trị `status`, chỉ cần sửa thành `returned` là ta đã mua hàng free thành công


## Challenge 9 - Increase your balance by $1,000 or more
Tương tự chall 8, nhưng cần hoàn tiền với số tiền lớn hơn. Ở đây, ta thử tăng giá sản phẩm lên thì không thành công

Vậy thì tăng số lượng vật phẩm thì sao


## Challenge 10 - Update internal video properties
Khi thay đổi tên video thì có request sau

Thay đổi các giá trị thành công

# 7. SSRF
## Challenge 11 - Make crAPI send an HTTP call to "www.google.com" and return the HTTP response.
Ở chức năng Contact Mechanic, request gửi đi có chứa url và nhận phản hồi từ url đó

Nên ta chỉ cần thay thế thành www.google.com

# 8. NoSQL
## Challenge 12 - Find a way to get free coupons without knowing the coupon code.
Khi request 1 coupon code không hợp lệ ta sẽ nhận được lỗi 500

Dữ liệu gửi lên ở dạng JSON nên ta sẽ chèn toán tử truy vấn: lấy các coupon code không phải invalid trong db

Phản hồi thành công

# Reference
https://github.com/OWASP/crAPI
https://owasp.org/www-project-crapi/
https://www.youtube.com/playlist?list=PL-DxAN1jsRa-BzhRSBWCVEa9g4BBTBJ1Y
https://medium.com/@riteshs4hu/owasp-crapi-walkthrough-baec54214f85