1. API Testing là gì?
API (Application Programming Interface) cho phép các hệ thống và ứng dụng giao tiếp, trao đổi dữ liệu với nhau. Trong các website hiện đại, gần như mọi chức năng đều hoạt động thông qua API.
Vì vậy, API testing rất quan trọng. Nếu API tồn tại lỗ hổng, kẻ tấn công có thể ảnh hưởng trực tiếp đến:
Nhiều lỗ hổng web quen thuộc như SQL Injection hay Broken Access Control cũng có thể xuất hiện trong API.
2. API Recon – Thu thập thông tin ban đầu
Bước đầu tiên khi kiểm thử API là xác định attack surface, tức là tìm càng nhiều thông tin về API càng tốt. Xác định API endpoint
Endpoint là nơi API nhận request. Ví dụ:
GET /api/books HTTP/1.1
Host: example.com
Endpoint ở đây là:
/api/books
Endpoint khác có thể là:
/api/books/mystery
Sau khi xác định endpoint, cần tìm hiểu:
3. Tìm API Documentation
Nhiều API có tài liệu hướng dẫn cho developer, thường ở dạng:
Một số đường dẫn phổ biến để tìm documentation:
Nếu thấy endpoint như:
/api/swagger/v1/users/123
Hãy thử:
Công cụ thường dùng:
4. Xác định API Endpoint bằng cách phân tích ứng dụng
Ngay cả khi có documentation, vẫn nên tự phân tích:
Nhiều endpoint không được hiển thị trực tiếp trên giao diện nhưng vẫn tồn tại.
5. Tương tác với API
Sau khi tìm được endpoint, hãy:
Lỗi từ server đôi khi tiết lộ:
6. Kiểm tra HTTP Methods
Mỗi endpoint có thể hỗ trợ nhiều method:
GET /api/tasks → lấy danh sách
POST /api/tasks → tạo mới
DELETE /api/tasks/1 → xóa
Hãy thử nhiều method khác nhau vì:
7. Kiểm tra Content-Type
API thường xử lý dữ liệu theo định dạng cụ thể:
Thay đổi Content-Type có thể:
8. Tìm Hidden Endpoints
Có thể brute force endpoint bằng:
Ví dụ:
PUT /api/user/update
Có thể thử:
9. Tìm Hidden Parameters
Một số tham số tồn tại nhưng không được document.
Công cụ hỗ trợ:
10. Mass Assignment Vulnerability
Mass assignment xảy ra khi framework tự động bind dữ liệu request vào object.
Ví dụ:
PATCH request:
{
"username": "user1",
"email": "user1@mail.com"
}
GET response:
{
"id": 123,
"username": "user1",
"email": "user1@mail.com",
"isAdmin": false
}
Tham số isAdmin có thể là hidden parameter.
Nếu server không kiểm tra chặt chẽ, attacker có thể gửi:
{
"username": "user1",
"email": "user1@mail.com",
"isAdmin": true
}
Kết quả: người dùng có thể được cấp quyền admin trái phép.
11. Kết luận
API testing là một phần cực kỳ quan trọng trong pentest web hiện đại vì:
Một quy trình cơ bản:
API (Application Programming Interface) cho phép các hệ thống và ứng dụng giao tiếp, trao đổi dữ liệu với nhau. Trong các website hiện đại, gần như mọi chức năng đều hoạt động thông qua API.
Vì vậy, API testing rất quan trọng. Nếu API tồn tại lỗ hổng, kẻ tấn công có thể ảnh hưởng trực tiếp đến:
- Confidentiality – rò rỉ dữ liệu
- Integrity – thay đổi dữ liệu trái phép
- Availability – gây gián đoạn dịch vụ
Nhiều lỗ hổng web quen thuộc như SQL Injection hay Broken Access Control cũng có thể xuất hiện trong API.
2. API Recon – Thu thập thông tin ban đầu
Bước đầu tiên khi kiểm thử API là xác định attack surface, tức là tìm càng nhiều thông tin về API càng tốt. Xác định API endpoint
Endpoint là nơi API nhận request. Ví dụ:
GET /api/books HTTP/1.1
Host: example.com
Endpoint ở đây là:
/api/books
Endpoint khác có thể là:
/api/books/mystery
Sau khi xác định endpoint, cần tìm hiểu:
- Các tham số đầu vào (bắt buộc và tùy chọn)
- Phương thức HTTP hỗ trợ (GET, POST, PUT, DELETE…)
- Cơ chế xác thực
- Giới hạn tần suất (rate limit)
3. Tìm API Documentation
Nhiều API có tài liệu hướng dẫn cho developer, thường ở dạng:
- Human-readable: hướng dẫn đọc được bởi con người
- Machine-readable: JSON, XML, OpenAPI
Một số đường dẫn phổ biến để tìm documentation:
- /api
- /swagger/index.html
- /openapi.json
Nếu thấy endpoint như:
/api/swagger/v1/users/123
Hãy thử:
- /api/swagger/v1
- /api/swagger
- /api
Công cụ thường dùng:
- Burp Suite
- Postman
- SoapUI
4. Xác định API Endpoint bằng cách phân tích ứng dụng
Ngay cả khi có documentation, vẫn nên tự phân tích:
- Dùng Burp để crawl
- Xem file JavaScript
- Tìm các URL chứa /api/
Nhiều endpoint không được hiển thị trực tiếp trên giao diện nhưng vẫn tồn tại.
5. Tương tác với API
Sau khi tìm được endpoint, hãy:
- Gửi request bằng Burp Repeater
- Quan sát response và lỗi trả về
- Thay đổi method và dữ liệu gửi
Lỗi từ server đôi khi tiết lộ:
- Cấu trúc dữ liệu
- Tham số hợp lệ
- Logic xử lý
6. Kiểm tra HTTP Methods
Mỗi endpoint có thể hỗ trợ nhiều method:
GET /api/tasks → lấy danh sách
POST /api/tasks → tạo mới
DELETE /api/tasks/1 → xóa
Hãy thử nhiều method khác nhau vì:
- Có thể phát hiện chức năng ẩn
- Có thể bypass kiểm soát
7. Kiểm tra Content-Type
API thường xử lý dữ liệu theo định dạng cụ thể:
- JSON
- XML
- Form data
Thay đổi Content-Type có thể:
- Gây lỗi tiết lộ thông tin
- Bypass filter
- Khai thác injection
8. Tìm Hidden Endpoints
Có thể brute force endpoint bằng:
- Wordlist
- Burp Intruder
Ví dụ:
PUT /api/user/update
Có thể thử:
- /delete
- /add
- /reset
9. Tìm Hidden Parameters
Một số tham số tồn tại nhưng không được document.
Công cụ hỗ trợ:
- Burp Intruder
- Param Miner
- Content Discovery
10. Mass Assignment Vulnerability
Mass assignment xảy ra khi framework tự động bind dữ liệu request vào object.
Ví dụ:
PATCH request:
{
"username": "user1",
"email": "user1@mail.com"
}
GET response:
{
"id": 123,
"username": "user1",
"email": "user1@mail.com",
"isAdmin": false
}
Tham số isAdmin có thể là hidden parameter.
Nếu server không kiểm tra chặt chẽ, attacker có thể gửi:
{
"username": "user1",
"email": "user1@mail.com",
"isAdmin": true
}
Kết quả: người dùng có thể được cấp quyền admin trái phép.
11. Kết luận
API testing là một phần cực kỳ quan trọng trong pentest web hiện đại vì:
- Website hiện nay phụ thuộc rất nhiều vào API
- Nhiều endpoint không được hiển thị trên giao diện
- Lỗi logic và lỗi kiểm soát truy cập xuất hiện rất thường xuyên
Một quy trình cơ bản:
- Recon – tìm endpoint và documentation
- Phân tích request/response
- Thử method và content-type
- Tìm endpoint và parameter ẩn
- Kiểm tra mass assignment