I. Giới thiệu về API và Kiểm thử API
API (Application Programming Interfaces) là giao diện lập trình ứng dụng, cho phép các ứng dụng hoặc dịch vụ khác nhau giao tiếp và tương tác với nhau mà không cần hiểu rõ cấu trúc nội bộ của nhau. Có thể hình dung API như một người phục vụ trong nhà hàng, nơi bạn gọi món (gửi yêu cầu) và người phục vụ sẽ chuyển yêu cầu tới bếp (hệ thống nội bộ), rồi mang món ăn (kết quả) trở lại cho bạn.
Ví dụ về API trong thực tế
- Khi bạn sử dụng ứng dụng thời tiết, nó gọi API từ dịch vụ thời tiết để lấy thông tin như nhiệt độ và điều kiện thời tiết từ máy chủ của dịch vụ đó.
- Khi bạn đăng nhập vào một trang web thông qua tài khoản Google, trang web sử dụng API của Google để xác thực thông tin mà không cần xây dựng hệ thống xác thực riêng.
Kiểm thử API là quy trình kiểm tra khả năng bảo mật và độ tin cậy của API, từ đó phát hiện các lỗ hổng an ninh.
II. Quá trình Thu thập Thông tin về API (API Reconnaissance)
1. Lý thuyết Cơ bản về API Recon
API reconnaissance là bước đầu trong kiểm thử API. Mục tiêu của giai đoạn này là thu thập thông tin về các đặc điểm của API, bao gồm cấu trúc, cách thức hoạt động và các endpoints có sẵn.
Những thông tin quan trọng cần thu thập:
- Thông tin công khai về API
- Tài liệu hướng dẫn sử dụng API (API documentation)
- Thông tin xác thực hoặc mã thông báo có thể bị lộ
- Thông tin về phiên bản API
- Mục đích kinh doanh để hiểu rõ chức năng mong đợi
2. Một số Cách Tìm kiếm Dorking
API thường bắt đầu với đường dẫn như /api/v1
, /api/v2
... và sử dụng định dạng dữ liệu JSON. Việc xác thực thường thực hiện qua header Authorization và có thể sử dụng công cụ tài liệu RESTful như Swagger.
Ví dụ về Google Dorking:
inurl:"/api/v1" site:microsoft.com
intitle:json site:ebay.com
Ví dụ về Github Dorking:
Authorization: Bearer
filename:swagger.json
Ví dụ về Shodan Dorking:
content-type: application/json
3. Phân Tích Lab Demo
Trong lab “Exploiting an API endpoint using documentation”, mục tiêu là tìm các endpoints API bị lộ thông qua tài liệu. Bằng cách thực hiện tấn công brute force với một danh sách từ khóa API, bạn có thể xác định được API document tại /api/openapi.json
.
Dựa trên tài liệu API, chúng ta phát hiện endpoint /user/[username: String]
với phương thức DELETE có thể sử dụng để xóa người dùng. Dưới đây là cách xây dựng gói gồm:
DELETE /api/user/carlos HTTP/2
Host: 0a4f00270351b3d380e0585a004a001f.web-security-academy.net
Cookie: session=YghfxI4Jgt6v29s9DEOlUUPp7SeGBBkN
Content-Type: application/json
Content-Length: 2
{}
Khi thực hiện yêu cầu này, nếu nếu xác thực thành công, server sẽ xóa người dùng carlos
. Bạn có thể luyện tập tại lab “Finding and exploiting an unused API endpoint”.
III. Các Tham số Ẩn trong API
Tham số ẩn (hidden parameters) là những tham số không được người dùng biết tới nhưng vẫn có thể ảnh hưởng đến hành vi của server. Chúng thường xuất hiện khi cấu trúc mã không chặt chẽ hoặc trong quá trình kiểm thử.
Ví dụ, khi cập nhật thông tin người dùng với các tham số name
và email
, bạn có thể gửi thêm tham số isAdmin
mà không được phép:
{
"name": "wiener",
"email": "wiener@viblo.com",
"isAdmin": true,
}
Để dẫn đến lỗ hổng mass assignment. Qua đó, attacker có thể nâng cấp quyền hạn lên admin chỉ bằng việc thêm tham số ẩn vào yêu cầu. Việc phát hiện các tham số ẩn có thể thực hiện qua phân tích responses từ server hoặc brute force với danh sách các tham số khả dĩ.
Bạn có thể tham khảo lab “Exploiting a mass assignment vulnerability” để rèn luyện khả năng kiểm thử API của mình.