DEV Community

Cover image for Maigret là gì: Công cụ OSINT không lỗi
Sebastian Petrus
Sebastian Petrus

Posted on • Originally published at apidog.com

Maigret là gì: Công cụ OSINT không lỗi

Hầu hết công cụ OSINT lỗi thời rất nhanh: website đổi endpoint, captcha thay đổi, giao diện hồ sơ bị thiết kế lại, và chữ ký kiểm tra hỏng theo thời gian. Maigret là một ngoại lệ đáng học hỏi: công cụ này đã tồn tại nhiều năm, hỗ trợ hơn 3.000 website, có gói Python, bot Telegram, giao diện web, và quan trọng hơn là một kiến trúc kiểm tra dựa trên chữ ký có thể áp dụng trực tiếp cho kiểm thử API.

Dùng thử Apidog ngay hôm nay

Bài viết này dành cho kỹ sư muốn hiểu cách Maigret hoạt động ở mức triển khai: nó kiểm tra username như thế nào, vì sao cơ sở dữ liệu chữ ký giúp công cụ sống lâu, cách xử lý sai lệch, và cách áp dụng cùng mô hình đó vào kiểm thử API với Apidog.

Nếu bạn chưa đọc, bài viết về kiểm thử API không cần Postman vào năm 2026 cũng đề cập đến các ý tưởng tương tự: khớp mẫu, xác nhận đa tín hiệu và phát hiện sai lệch.

Tóm tắt

  • Maigret thu thập hồ sơ công khai theo username bằng cách kiểm tra hơn 3.000 website.
  • Công cụ dựa trên cơ sở dữ liệu chữ ký website, tìm kiếm đệ quy, phát hiện sai lệch và chế độ tóm tắt AI tùy chọn.
  • Các trường hợp sử dụng hợp pháp gồm OSINT báo chí, khôi phục tài khoản cá nhân, tìm người mất tích, kiểm toán bảo mật được ủy quyền và giám sát lạm dụng thương hiệu.
  • Không nên dùng Maigret để theo dõi cá nhân không đồng ý. Việc này có thể vượt ranh giới pháp lý và đạo đức.
  • Các mô hình kỹ thuật của Maigret có thể chuyển sang kiểm thử API: chữ ký endpoint, xác nhận đa tín hiệu, fixture tốt đã biết, phát lại định kỳ và cảnh báo drift.
  • Bạn có thể dùng Apidog để thiết kế các kiểm thử API theo cùng tư duy dựa trên chữ ký.

Maigret là gì và không phải là gì

Maigret là công cụ Python mã nguồn mở, giấy phép MIT, do soxoj duy trì. README mô tả mục tiêu rất rõ: “thu thập hồ sơ về một người bằng username từ hơn 3.000 website”.

Cài đặt cơ bản:

pip install maigret
Enter fullscreen mode Exit fullscreen mode

Chạy kiểm tra một username:

maigret example_username
Enter fullscreen mode Exit fullscreen mode

Maigret sẽ:

  1. Đọc cơ sở dữ liệu website.
  2. Tạo URL hồ sơ từ username.
  3. Gửi request đến từng website.
  4. Xác định tài khoản có tồn tại hay không.
  5. Trích xuất thông tin hồ sơ công khai nếu tìm thấy.
  6. Sinh báo cáo.

Maigret screenshot

Ba điểm cần làm rõ:

  • Maigret chỉ dùng dữ liệu công khai. Không đăng nhập, không dùng credential, không bypass tài khoản riêng tư.
  • Maigret có ứng dụng hợp pháp. Nhà báo điều tra, đội chống gian lận, đội bảo vệ thương hiệu, tình nguyện viên tìm người mất tích và red team được ủy quyền đều có thể dùng công cụ kiểu này.
  • Maigret có thể bị lạm dụng. Chạy công cụ trên cá nhân không đồng ý có thể vi phạm luật về quấy rối hoặc rình rập tại nhiều khu vực pháp lý.

Phần còn lại tập trung vào kiến trúc và mô hình kiểm thử có thể áp dụng lại, không hướng dẫn nhắm mục tiêu cá nhân.

Cơ sở dữ liệu chữ ký website

Ý tưởng kỹ thuật quan trọng nhất của Maigret là site signature database: mỗi website được mô tả bằng dữ liệu đủ để công cụ quyết định username có tồn tại hay không.

Một chữ ký website thường cần trả lời các câu hỏi:

  • URL hồ sơ được tạo như thế nào?
  • Trang “tìm thấy user” trông ra sao?
  • Trang “không tìm thấy user” trông ra sao?
  • Có chuỗi hoặc regex nào xác nhận trạng thái không?
  • Có thể trích xuất trường nào từ hồ sơ?
  • Website có captcha, rate limit hoặc header đặc biệt không?

Cơ sở dữ liệu này là JSON, được version trong repository và có thể tự động cập nhật. Khi website thay đổi, maintainer hoặc cộng đồng chỉ cần sửa chữ ký tương ứng; người dùng nhận bản cập nhật mà không cần viết lại logic quét.

Đây cũng là mô hình tốt cho kiểm thử API. Thay vì hard-code mọi assertion trong code, hãy mô tả từng endpoint bằng chữ ký:

{
  "endpoint": "GET /users/{id}",
  "expectedStatus": 200,
  "requiredFields": ["id", "email", "createdAt"],
  "forbiddenFields": ["password", "token"],
  "headers": {
    "content-type": "application/json"
  }
}
Enter fullscreen mode Exit fullscreen mode

Khi API thay đổi shape, test phải fail với diff rõ ràng. Đây là cùng tư duy được dùng trong phát triển API ưu tiên hợp đồngkiểm thử máy chủ MCP.

Cách Maigret phân biệt “tìm thấy” và “không tìm thấy”

Cách đơn giản nhất để kiểm tra username là gửi request:

GET https://example.com/user/<username>
Enter fullscreen mode Exit fullscreen mode

Sau đó kiểm tra status code.

Nhưng trong thực tế, cách này không đủ. Nhiều website trả về 200 OK cho cả hai trường hợp:

  • User tồn tại.
  • User không tồn tại.
  • Trang bị redirect về homepage.
  • Trang hiển thị captcha.
  • Trang lỗi được cache.

Vì vậy Maigret dùng nhiều tín hiệu hơn:

  • urlMain
  • url
  • presenseStrs: chuỗi phải xuất hiện khi user tồn tại
  • absenceStrs: chuỗi xác nhận user không tồn tại
  • regex trích xuất username hoặc metadata
  • header tùy chỉnh
  • tag theo quốc gia hoặc danh mục

Logic tổng quát:

def classify_response(body, presence_strs, absence_strs):
    has_presence = all(s in body for s in presence_strs)
    has_absence = any(s in body for s in absence_strs)

    if has_presence and not has_absence:
        return "found"

    if has_absence and not has_presence:
        return "not_found"

    return "unknown"
Enter fullscreen mode Exit fullscreen mode

Trong kiểm thử API, nguyên tắc tương tự là: không chỉ kiểm tra status code.

Ví dụ assertion nên kiểm tra đồng thời:

pm.test("response is valid user profile", function () {
  pm.response.to.have.status(200)

  const json = pm.response.json()

  pm.expect(json).to.have.property("id")
  pm.expect(json).to.have.property("email")
  pm.expect(json).to.not.have.property("password")
})
Enter fullscreen mode Exit fullscreen mode

Trong Apidog, bạn có thể kết hợp kiểm tra status code, body, header và schema trong cùng một request. Đây là phiên bản kiểm thử API của presenseStrs + absenceStrs.

Tìm kiếm đệ quy và trích xuất thông tin

Khi Maigret tìm thấy một tài khoản, nó không dừng lại ở URL hồ sơ. Công cụ tiếp tục trích xuất các định danh công khai khác như:

  • email
  • số điện thoại
  • tên thật
  • username khác
  • liên kết mạng xã hội
  • website cá nhân

Sau đó các định danh mới có thể được đưa lại vào vòng tìm kiếm. Đây là tìm kiếm đệ quy.

Ví dụ luồng OSINT hợp pháp:

username -> GitHub profile
GitHub profile -> personal website
personal website -> email
email/alias -> other public profiles
Enter fullscreen mode Exit fullscreen mode

Trong kiểm thử API, mô hình này cũng hữu ích. Khi một endpoint trả về trường chưa được tài liệu hóa, đừng bỏ qua nó. Hãy biến nó thành tín hiệu để kiểm tra tiếp:

{
  "id": "user_123",
  "billingAccountId": "ba_456"
}
Enter fullscreen mode Exit fullscreen mode

Nếu billingAccountId không có trong contract, bạn nên hỏi:

  • Đây có phải trường mới?
  • Có endpoint liên quan không?
  • Có cần cập nhật tài liệu API không?
  • Có rủi ro lộ dữ liệu không?

Một bộ test tốt không chỉ xác nhận “request thành công”; nó phát hiện thay đổi trong mô hình dữ liệu.

Xử lý captcha và rate limit

Maigret không cố đánh bại mọi biện pháp chống tự động hóa. Công cụ chủ yếu phát hiện captcha hoặc rate limit thông qua shape của response, sau đó ghi nhận trạng thái để người dùng kiểm tra thủ công.

Các chiến lược thường gặp:

  • xoay vòng user agent
  • tôn trọng retry header
  • thử domain mobile hoặc endpoint đơn giản hơn nếu website hỗ trợ
  • dùng Tor hoặc I2P trong trường hợp website cho phép

Điểm quan trọng: Maigret không nên được hiểu là công cụ vượt qua phòng thủ. Nó hoạt động tốt nhất với dữ liệu công khai có thể truy cập ẩn danh.

Với API testing, nguyên tắc đúng là tương tự: phát hiện rate limit và giảm tải một cách có kiểm soát.

Ví dụ xử lý 429 Too Many Requests:

if (response.status === 429) {
  const retryAfter = response.headers.get("Retry-After")

  console.log(`Rate limited. Retry after ${retryAfter || "unknown"} seconds.`)

  // Không spam retry ngay lập tức.
  // Đưa request vào queue hoặc đánh dấu test là throttled.
}
Enter fullscreen mode Exit fullscreen mode

Một test runner tốt nên:

  • không brute-force retry
  • đọc Retry-After
  • backoff theo cấp số nhân
  • phân biệt lỗi thật với throttling
  • tránh làm IP của team bị block

Vấn đề sai lệch chữ ký

Một cơ sở dữ liệu hơn 3.000 website chỉ hữu ích nếu chữ ký luôn được cập nhật. Website có thể:

  • đổi URL profile
  • redesign HTML
  • thêm captcha
  • thay đổi redirect
  • đổi brand sau khi được mua lại
  • thay đổi thông báo lỗi

Chữ ký cũ tạo ra hai loại lỗi:

  • False negative: tài khoản tồn tại nhưng công cụ báo không tìm thấy.
  • False positive: tài khoản không tồn tại nhưng công cụ báo tìm thấy.

Maigret xử lý vấn đề này bằng nhiều lớp:

  • tự động cập nhật từ GitHub
  • pull request từ cộng đồng
  • cờ --update để buộc cập nhật
  • test tích hợp để xác thực chữ ký bằng username tốt đã biết

Chạy cập nhật thủ công:

maigret --update example_username
Enter fullscreen mode Exit fullscreen mode

Mô hình tương tự nên có trong API regression testing:

  1. Lưu response tốt đã biết cho từng endpoint.
  2. Chạy lại endpoint theo lịch.
  3. So sánh status, header, schema và body quan trọng.
  4. Cảnh báo nếu có drift.

Ví dụ fixture đơn giản:

{
  "request": {
    "method": "GET",
    "path": "/v1/users/user_123"
  },
  "expected": {
    "status": 200,
    "schema": {
      "required": ["id", "email", "createdAt"]
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Apidog hỗ trợ lưu request, response mẫu, assertion và chạy kiểm thử định kỳ. Cách làm thủ công cho một nhà cung cấp cụ thể cũng được trình bày trong hướng dẫn API DeepSeek V4.

Chế độ tóm tắt AI tùy chọn

Cờ --ai của Maigret dùng một endpoint LLM tương thích OpenAI để tóm tắt kết quả quét thành báo cáo dễ đọc. Người dùng tự cung cấp API key.

Điểm kiến trúc đáng chú ý: LLM không quyết định username có khớp hay không. Quyết định đó vẫn do rule xác định đảm nhiệm. LLM chỉ xử lý hậu kỳ.

Đây là mô hình an toàn hơn:

deterministic rules -> raw findings -> LLM summary
Enter fullscreen mode Exit fullscreen mode

Không nên làm ngược lại:

LLM guesses -> pass/fail decision
Enter fullscreen mode Exit fullscreen mode

Trong API monitoring, bạn có thể áp dụng cùng mô hình:

  1. Dùng assertion xác định trong Apidog.
  2. Sinh báo cáo chạy test.
  3. Dùng LLM để tóm tắt thay đổi cho Slack hoặc email.
  4. Không để LLM quyết định test pass/fail.

Bài viết về sử dụng máy tính so với API có cấu trúc giải thích vì sao lớp cấu trúc nên là nguồn sự thật.

Các trường hợp sử dụng hợp pháp

Có năm bối cảnh mà việc dùng Maigret có thể phù hợp.

1. Khôi phục tài khoản của chính bạn

Bạn có thể kiểm tra username cũ để tìm các tài khoản đã quên trước khi xóa dấu vết kỹ thuật số hoặc kiểm toán quyền riêng tư cá nhân.

2. Giám sát lạm dụng thương hiệu

Công ty có thể kiểm tra tên thương hiệu hoặc sản phẩm để phát hiện tài khoản mạo danh.

3. Hỗ trợ tìm người mất tích

Các tổ chức tìm kiếm cứu nạn hoặc tình nguyện viên có thể dùng công cụ OSINT với sự đồng ý của gia đình và phối hợp với cơ quan chức năng.

4. Red-team engagement được ủy quyền

Đội pentest có thể dùng Maigret để lập bản đồ bề mặt tấn công công khai của tổ chức trong phạm vi hợp đồng.

5. Báo chí điều tra

Phóng viên điều tra có thể dùng công cụ OSINT dưới sự xem xét của ban biên tập và pháp lý.

Các trường hợp không phù hợp:

  • theo dõi người lạ vì tò mò
  • kiểm tra đối tác cũ
  • xây dựng dataset về người không đồng ý
  • tự ý điều tra cá nhân ngoài phạm vi pháp lý

Các mô hình từ Maigret có thể áp dụng cho kiểm thử API

Dưới đây là năm mô hình thực tế.

1. Dùng cơ sở dữ liệu chữ ký thay vì hard-code

Thay vì viết logic kiểm tra rải rác trong codebase, hãy định nghĩa hành vi mong đợi của endpoint dưới dạng dữ liệu.

- name: Get user profile
  method: GET
  path: /users/{id}
  expected:
    status: 200
    requiredFields:
      - id
      - email
      - createdAt
    forbiddenFields:
      - password
      - accessToken
Enter fullscreen mode Exit fullscreen mode

2. Xác nhận đa tín hiệu

Một request pass khi nhiều điều kiện cùng đúng:

  • status code đúng
  • header đúng
  • body đúng shape
  • trường bắt buộc tồn tại
  • trường nhạy cảm không xuất hiện
  • error envelope đúng format

3. Cập nhật chữ ký theo lịch

Nếu contract hoặc assertion nằm trong workspace dùng chung, hãy đồng bộ định kỳ. Với Apidog, team có thể quản lý request, schema và test trong cùng một nơi. Quy trình này cũng được đề cập trong Kiểm thử API không cần Postman.

API testing workflow

4. Phát hiện drift bằng fixture tốt đã biết

Chạy lại endpoint với dữ liệu mẫu đã biết. Nếu response thay đổi ngoài contract, cảnh báo sớm trước khi production bị ảnh hưởng.

5. Dùng LLM để tóm tắt, không để phán quyết

Rule xác định nên quyết định pass/fail. LLM chỉ nên tạo bản tóm tắt dễ đọc cho con người.

Những cạm bẫy thường gặp khi chạy Maigret

Chạy mặc định rồi nghĩ rằng kết quả đã đầy đủ

Mặc định Maigret có thể ưu tiên nhóm website phổ biến. Nếu cần quét toàn bộ danh sách, dùng:

maigret -a example_username
Enter fullscreen mode Exit fullscreen mode

Lưu ý: quét nhiều website hơn sẽ lâu hơn.

Bỏ qua tag

Dùng --tags để giới hạn theo danh mục hoặc quốc gia:

maigret example_username --tags jp
Enter fullscreen mode Exit fullscreen mode

Điều này hữu ích khi phạm vi điều tra liên quan đến khu vực hoặc loại dịch vụ cụ thể.

Không cập nhật chữ ký

Trước khi chạy nghiêm túc, nên cập nhật:

maigret --update example_username
Enter fullscreen mode Exit fullscreen mode

Chữ ký cũ làm tăng false positive và false negative.

Diễn giải sai kết quả từ Tor

Một số website chặn Tor exit node. Việc bị chặn không chứng minh gì về username. Hãy coi đó là trạng thái môi trường mạng.

Tin dữ liệu trích xuất mà không xác minh

Maigret trích xuất những gì trang công khai hiển thị. Hồ sơ có thể giả mạo. Kết quả nên được xem là manh mối, không phải bằng chứng cuối cùng.

Ví dụ ứng dụng thực tế

Một công ty tư vấn bảo mật có thể dùng Maigret trong giai đoạn scoping của red-team engagement. Báo cáo ban đầu giúp khách hàng thấy bề mặt công khai trước khi kiểm thử sâu hơn.

Một điều tra viên gian lận có thể dùng --ai để biến kết quả quét lớn thành bản tóm tắt ngắn cho khách hàng không chuyên kỹ thuật. Dữ liệu vẫn đến từ rule xác định; AI chỉ làm lớp trình bày.

Một đội backend có thể áp dụng cùng kiến trúc cho 200 microservices: mỗi endpoint có chữ ký, fixture tốt đã biết, kiểm thử định kỳ và cảnh báo drift trong Apidog.

Kết luận

Maigret đáng học không chỉ vì nó là công cụ OSINT mạnh, mà vì nó cho thấy cách xây dựng một hệ thống kiểm tra sống lâu trước các bề mặt thay đổi liên tục.

Năm điểm kỹ thuật chính:

  • Maigret dùng cơ sở dữ liệu chữ ký được version và cập nhật để kiểm tra hơn 3.000 website.
  • Xác nhận đa tín hiệu đáng tin cậy hơn kiểm tra status code đơn giản.
  • Drift là kẻ thù của mọi bộ test sống lâu; fixture tốt đã biết giúp phát hiện sớm.
  • LLM nên là bộ xử lý hậu kỳ, không phải nguồn quyết định pass/fail.
  • Cùng mô hình này áp dụng tốt cho kiểm thử API trong Apidog.

Bước tiếp theo: đọc định dạng cơ sở dữ liệu website của Maigret, sau đó mở Apidog và thiết kế một endpoint theo cùng cách: dựa trên chữ ký, xác nhận đa tín hiệu, có fixture đã lưu và kiểm tra drift định kỳ.

Câu hỏi thường gặp

Sử dụng Maigret có hợp pháp không?

Phụ thuộc vào khu vực pháp lý và đối tượng. Chạy trên chính bạn, tài khoản bạn sở hữu, tổ chức đã ủy quyền bằng văn bản, hoặc trong hoạt động báo chí được kiểm duyệt pháp lý thường là hợp lý. Chạy trên cá nhân không đồng ý có thể vi phạm luật rình rập hoặc quấy rối.

Maigret có hoạt động nếu không cài Python không?

Gói chính thức yêu cầu Python 3.10+. Tác giả cũng duy trì bot Telegram và tùy chọn Cloud Shell cho người không muốn cài cục bộ.

Tuyên bố hơn 3.000 website chính xác đến mức nào?

Repository liệt kê hơn 3.000 mục, nhưng không phải mọi website đều hoạt động tại mọi thời điểm. Tự động cập nhật và đóng góp cộng đồng giúp duy trì các chữ ký còn dùng được.

Chế độ AI bổ sung gì?

Cờ --ai dùng LLM tương thích OpenAI để tóm tắt kết quả xác định thành báo cáo dễ đọc. Nó không thay đổi quá trình tìm kiếm.

Tôi có thể dùng Maigret trong CI không?

Với điều tra OSINT, thường không nên vì đây là công việc cần ngữ cảnh và xác minh thủ công. Nhưng mô hình kiến trúc của Maigret — chữ ký, fixture, phát hiện drift và phát lại định kỳ — rất phù hợp cho CI kiểm thử API. Apidog hỗ trợ các quy trình này.

Maigret khác Sherlock như thế nào?

Sherlock là công cụ tiền thân đơn giản hơn. Maigret mở rộng thêm trích xuất thông tin, tìm kiếm đệ quy, xử lý captcha, chế độ tóm tắt AI và cơ sở dữ liệu website phong phú hơn.

Báo cáo chữ ký cũ ở đâu?

README của Maigret hướng dẫn dùng GitHub issues và pull requests trong repository. Một PR cho mỗi website lỗi thời là cách đóng góp tốt nhất.

Top comments (0)