---
# System prepended metadata

title: API Hacking
tags: [study]

---

# 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
![image](https://hackmd.io/_uploads/rk_WNxiYke.png)

Ở Community chứa các bài đăng của user, khi GET thì ta có được cardId 
![image](https://hackmd.io/_uploads/rJzQNgit1e.png)

Thay đổi cardId, vậy là có thể xem được thông tin của user khác
![image](https://hackmd.io/_uploads/BkIVNxot1g.png)

## 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
![image](https://hackmd.io/_uploads/ByZukxsKkl.png)

Mỗi 1 report được gửi đi id sẽ tăng lên 1
![image](https://hackmd.io/_uploads/S1ItJgiKyx.png)

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
![image](https://hackmd.io/_uploads/S1JpygjF1e.png)
![image](https://hackmd.io/_uploads/HJhaJesKJx.png)

# 2. Broken User Authentication
## Challenge 3 - Reset the password of a different user
Chức năng reset password
![image](https://hackmd.io/_uploads/ByHehljKyl.png)

Sau khi nhập email thì mã OTP sẽ được gửi về địa chỉ email đó, mã này gồm 4 chữ số
![image](https://hackmd.io/_uploads/Syc-3gjK1l.png)

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.
![image](https://hackmd.io/_uploads/HJ__hgsFJx.png)

Request `Set Password` tương ứng
![image](https://hackmd.io/_uploads/Hk72hgsFke.png)

Giờ thử với email của user khác
![image](https://hackmd.io/_uploads/Sy6z6esKkg.png)

Ta sẽ brute force OTP
![image](https://hackmd.io/_uploads/S1B86eitJx.png)

Tuy nhiên thì ở API đã bị rate limit
![image](https://hackmd.io/_uploads/H10-ReiYyx.png)

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
![image](https://hackmd.io/_uploads/Bk9eSQntke.png)
![image](https://hackmd.io/_uploads/S1UDBXhFJl.png)

# 3. Excessive Data Exposure
## Challenge 4 - Find an API endpoint that leaks sensitive information of other users
Community
![image](https://hackmd.io/_uploads/SyWVPXnY1l.png)

## 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
![image](https://hackmd.io/_uploads/Bk8lCX2YJx.png)
![image](https://hackmd.io/_uploads/rJJaa73t1g.png)

# 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`
![image](https://hackmd.io/_uploads/S1iMmEhtJg.png)

Thay đổi chúng để gửi nhiều request đến server
![image](https://hackmd.io/_uploads/ryGgEEhF1g.png)

# 5. Broken Function Level Authorization (BFLA)
## Challenge 7 - Delete a video of another user
Chức năng thay đổi tên video
![image](https://hackmd.io/_uploads/H1z3NN3FJg.png)

Sử dụng method OPTIONS để xem server cho phép ta sử dụng các method nào
![image](https://hackmd.io/_uploads/r1Gs442Yyg.png)
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
![image](https://hackmd.io/_uploads/ryxirN3Ykx.png)
![image](https://hackmd.io/_uploads/B1FpHEnFkg.png)
![image](https://hackmd.io/_uploads/SyA7L42Ykl.png)

# 6. Mass Assignment
## Challenge 8 - Get an item for free
Chức năng đặt hàng
![image](https://hackmd.io/_uploads/Syauj43Kke.png)

Sau khi đặt xong có thể xem thông tin đơn hàng
![image](https://hackmd.io/_uploads/BkghiNntye.png)

Response trả về chứa trạng thái của đơn hàng: `delivered`, và cho phép sử dụng method PUT.
![image](https://hackmd.io/_uploads/H1yQnNhFye.png)

Vậy ta sẽ sửa trạng thái của order bằng PUT
![image](https://hackmd.io/_uploads/rk7QnEnKkl.png)
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
![image](https://hackmd.io/_uploads/HkAVhN3Ykl.png)
![image](https://hackmd.io/_uploads/By6Y34nK1l.png)

## 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
![image](https://hackmd.io/_uploads/SkSxRNnYJx.png)

Vậy thì tăng số lượng vật phẩm thì sao
![image](https://hackmd.io/_uploads/rJ6MkB2Kyx.png)
![image](https://hackmd.io/_uploads/SyIb1H2FJg.png)

## Challenge 10 - Update internal video properties
Khi thay đổi tên video thì có request sau
![image](https://hackmd.io/_uploads/SkFdJrnYJe.png)

Thay đổi các giá trị thành công
![image](https://hackmd.io/_uploads/Hy0TJShYJl.png)

# 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 đó
![image](https://hackmd.io/_uploads/H15QZr2FJg.png)

Nên ta chỉ cần thay thế thành www.google.com
![image](https://hackmd.io/_uploads/B13YbrhtJl.png)

# 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
![image](https://hackmd.io/_uploads/HJRSmrnYkx.png)

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
![image](https://hackmd.io/_uploads/HJWBQH2YJe.png)

Phản hồi thành công
![image](https://hackmd.io/_uploads/rkXEXB3K1e.png)

# 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