3.03 | Missing Function Level Access Control
🔥 Phân tích & Cách khai thác lỗ hổng "Try It" trong WebGoat
✅ 1️⃣ Ý nghĩa của bài tập này?
Bài tập này nhấn mạnh vào việc kiểm tra quyền truy cập bị bỏ sót. Nhiều ứng dụng chỉ ẩn chức năng trên giao diện người dùng (UI) mà không thực sự kiểm tra quyền trên backend, dẫn đến việc hacker có thể truy cập trái phép bằng cách thử trực tiếp các endpoint.
📌 Bài toán thực tế:
- Bạn đã tìm thấy 2 menu ẩn:
/usersvà/config - Mục tiêu: Khai thác endpoint
/usersđể lấy danh sách người dùng - Cần tìm hash của tài khoản Jerry và nhập vào WebGoat
🚀 2️⃣ Cách khai thác lỗ hổng "Try It"
🔎 Cách 1: Sử dụng Burp Suite/ZAP để chặn & thay đổi request
Bước 1️⃣: Bật Intercept (chặn request)
- Mở Burp Suite → Bật Intercept
- Truy cập WebGoat → Click Submit dưới mục "User Hash"
- Chặn request để kiểm tra endpoint nào bị gọi
Bước 2️⃣: Tìm & sửa request
- Xem request bị chặn, đổi endpoint từ
/user-hashthành/users - Nếu lỗi "Unsupported Media Type", thêm header:
Content-Type: application/json; charset=UTF-8 - Nếu lỗi "Expected JSON object", chuyển từ
POSTsangGET - Nếu lỗi quyền truy cập, thử chèn role admin (
WEBGOAT_ADMIN)
Bước 3️⃣: Gửi request & trích xuất dữ liệu
- Nếu request thành công, dữ liệu user sẽ trả về.
- Tìm hash của Jerry và nhập vào WebGoat.
🔎 Cách 2: Dùng Developer Tools (DevTools)
Bước 1️⃣: Mở DevTools (F12) → Chuyển sang tab Network
- Truy cập
http://localhost:8080/WebGoat/users - Xem các request gửi đi, tìm endpoint
/users
Bước 2️⃣: Chỉnh sửa request
- Click vào request
/users→ Edit & Resend - Thêm header:
Content-Type: application/json - Gửi request và kiểm tra phản hồi.
🔒 3️⃣ Giải pháp phòng tránh
✅ 1. Kiểm soát quyền truy cập trên Backend
Không chỉ kiểm tra role trên UI, mà phải kiểm tra trên API:
[Authorize(Roles = "Admin")]
public IActionResult GetUsers()
{
return Json(userService.GetAllUsers());
}
✅ 2. Tránh để lộ thông tin trong response
- Không trả về danh sách user nếu không cần thiết.
- Hash toàn bộ dữ liệu nhạy cảm.
✅ 3. Ghi log & chặn hành vi đáng ngờ
- Nếu có nhiều request bất thường đến
/users, có thể là hacker đang tấn công. - Ghi lại các request bị từ chối.
🔥 4️⃣ Kết luận
| ❌ Sai lầm | ✅ Cách sửa |
|---|---|
| Chỉ ẩn menu bằng UI | Kiểm soát quyền từ backend |
| Không kiểm tra quyền trên API | Dùng [Authorize] để chặn API |
| Lộ thông tin user trong response | Chỉ trả về thông tin cần thiết |
📌 Bài học rút ra:
🔹 Chỉ vì bạn không thấy không có nghĩa là nó không tồn tại! 🚀
Xem chi tiết tại đây.