Nền tảng An toàn Web & Cơ chế Trình duyệt
5/20
Bài 5 / 20~15 phútGiải phẫu Web Traffic & Bộ công cụ Thực nghiệmMiễn phí… lượt xem

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()

Luồng can thiệp tham số HTTP trong Mini-Challenge

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:

HTTP
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
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ụ:

  1. 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?
  2. 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ì?
  3. 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:

Dự đoán hành vi (Predict): Nguyên lý Zero Trust với Header

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:

Tự kiểm tra
0/3 câu đã trả lời
  1. Q1
    Phân tích vì sao thay đổi X-Client-Role thành admin trên Repeater lại thành công?
  2. Q2
    Tạ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?
  3. Q3
    Mã 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.

Thảo luận & góp ý

Hỏi đáp về bài này

Bài tiếp theo

Tổng kết module Giải phẫu Web Traffic & Bộ công cụ Thực nghiệm