Mini-challenge: Bắt và sửa gói tin giải mã luồng API
Thử thách độc lập: Sử dụng Burp Repeater và script Python để chặn bắt, phân tích gói tin và sửa đổi dữ liệu vượt qua xác thực cơ bản.
TL;DR: Bài thử thách này đặt bạn vào vị trí của một kỹ sư an toàn thông tin đang đánh giá một API nội bộ. Ứng dụng client gửi dữ liệu xác thực kèm theo một chuỗi header tùy biến và chữ ký đơn giản. Bằng cách kết hợp toàn bộ kiến thức đã tích lũy từ đầu module, nhiệm vụ của bạn là sử dụng Burp Suite để chặn bắt gói tin đang gửi, chẩn đoán cấu trúc dữ liệu, và sau đó viết một script Python độc lập để tự động hóa việc tính toán lại tham số và gửi request nhận cờ thành công mà không cần mở trình duyệt.
1. Tình huống thử thách
Bạn được giao nhiệm vụ đánh giá an toàn cho một cổng API nội bộ tại địa chỉ http://127.0.0.1:8000/api/v1/unlock (hoặc giả lập domain https://internal-vault.corp/api/v1/unlock). Giao diện web của ứng dụng chỉ có một nút bấm duy nhất: "Request Unlock Code". Khi bạn bấm nút trên trình duyệt, ứng dụng luôn hiển thị thông báo lỗi màu đỏ: "Access Denied: Missing Hardware Integrity Signature".
[!TIP] Thực hành trên máy thật (Hands-on Local Lab): Bạn có thể tự khởi chạy mock API server ngay trên máy tính bằng một file Python 20 dòng siêu nhẹ (không cần cài thêm thư viện):
Python# Lưu thành mock_vault.py và chạy: python3 mock_vault.py import http.server, time class VaultHandler(http.server.BaseHTTPRequestHandler): def do_POST(self): if self.path != "/api/v1/unlock": self.send_response(404); self.end_headers(); return role = self.headers.get("X-Client-Role", "guest") ts = int(self.headers.get("X-Request-Timestamp", "0")) now = int(time.time()) if role != "admin" or abs(now - ts) > 5: self.send_response(403) self.send_header("Content-Type", "application/json; charset=utf-8") self.send_header("X-Security-Rule", "Role 'guest' is not permitted to request vault unlock") self.send_header("X-Server-Time", str(now)) self.end_headers() self.wfile.write(b'{"error":"forbidden","message":"Requires admin privileges and timestamp skew < 5s"}') return self.send_response(200) self.send_header("Content-Type", "application/json; charset=utf-8") self.end_headers() self.wfile.write(b'{"status":"unlocked","flag":"FLAG{HTTP_TAMPERING_MASTERED_OLHUB}"}') http.server.HTTPServer(("127.0.0.1", 8000), VaultHandler).serve_forever()

Hình 1.4: Mô hình can thiệp tham số HTTP Request bằng Burp Suite Proxy trước khi gói tin tới Backend Server.
Bật Burp Suite Proxy và bấm nút lại, bạn thu thập được HTTP request thô sau:
POST /api/v1/unlock HTTP/1.1
Host: internal-vault.corp
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Content-Type: application/json
X-Client-Role: guest
X-Request-Timestamp: 1729938000
Content-Length: 19
{"action":"unlock"}
Và server trả về response:
HTTP/1.1 403 Forbidden
Content-Type: application/json; charset=utf-8
X-Security-Rule: Role 'guest' is not permitted to request vault unlock
X-Server-Time: 1729938002
{"error":"forbidden","message":"Requires admin privileges and timestamp skew < 5s"}
2. Nhiệm vụ của bạn
Hãy vận dụng toàn bộ kiến thức về cấu trúc gói tin HTTP, kỹ năng Burp Suite Repeater và scripting Python để thực hiện ba nhiệm vụ:
- Nhiệm vụ 1 (Chẩn đoán & Thay đổi header): Đưa request sang Burp Repeater, tìm cách thay đổi các trường headers nào để vượt qua quy tắc phân quyền sơ cấp mà server vừa để lộ trong response?
- Nhiệm vụ 2 (Xử lý Timestamp Skew): Server yêu cầu độ lệch thời gian
timestamp skew < 5s. Nếu bạn chỉnh sửa thủ công bằng tay trên Repeater, bạn sẽ gặp khó khăn gì? - Nhiệm vụ 3 (Lập trình PoC Python): Viết một script Python hoàn chỉnh sử dụng thư viện
requestsđể tự động lấy thời gian hệ thống hiện tại (int(time.time())), cấu hình đầy đủ headers và bắn request nhận mã mở khoá thành công.
Dưới đây là một câu hỏi dự đoán trước khi bạn xem lời giải mẫu:
Một API dựa vào các custom headers gửi từ client để xác định thẩm quyền truy cập vi phạm nguyên tắc bảo mật cơ bản nào?
3. Lời giải mẫu & Đối chiếu thực nghiệm
Tự mình hoàn thành thử thách trước khi đối chiếu với lời giải chi tiết dưới đây:
- Q1Phân tích vì sao thay đổi X-Client-Role thành admin trên Repeater lại thành công?
- Q2Tại sao việc kiểm tra 'timestamp skew < 5s' lại khiến việc bấm Send thủ công trên Repeater dễ thất bại?
- Q3Mã nguồn Python hoàn chỉnh để tự động hóa giải mã thử thách này được viết như thế nào?
Bài tiếp theo: Tổng kết module Giải phẫu Web Traffic & Bộ công cụ Thực nghiệm
Bài này có giúp bạn hiểu bản chất không?
Bài này đáng gửi cho bạn học cùng?
Copy link đã gắn nguồn — dán group, chat, hoặc LinkedIn.
Tự động hóa kiểm thử an toàn ứng dụng với cURL và Python
Bài tiếpTổng kết module Giải phẫu Web Traffic & Bộ công cụ Thực nghiệm
Thảo luận & góp ý
Hỏi đáp về bài này