Maigret: Thám Tử Số Biết Chạy Lúc 2 Giờ Sáng

10 phút đọc English
Featured image for soxoj/maigret — Maigret: Thám Tử Số Biết Chạy Lúc 2 Giờ Sáng

TL;DR

  • Giải quyết gì: mở tab thủ công từng mạng xã hội để tìm một username mất cả buổi tối
  • Tại sao quan trọng: bỏ sót một diễn đàn tiếng Nga là hỏng cả bức tranh điều tra
  • Phù hợp với ai: nhà báo điều tra, pentester, red team, hoặc ai muốn biết mình để lộ gì
  • Khác biệt chính: recursive search — tự động đào tiếp khi phát hiện username mới trong bio
  • Ví dụ cụ thể: maigret hoangyell tìm thấy 40 tài khoản trên 509 sites trong 45 giây - GitHub, YouTube, Facebook, LinkedIn, SoundCloud và 35 trang khác

Cái Ngày Tôi Check Tay 47 Tab

Anh khách hàng nhắn lúc 10 giờ tối: “Em ơi, tìm giúp anh cái tài khoản quanghunter_ này. Nghi nó là nhân viên cũ đang leak thông tin ra ngoài.”

Tôi mở tab đầu tiên. Facebook — không thấy. Twitter — có, nhưng private. LinkedIn — không tồn tại. GitHub — có, nhưng repo rỗng. Reddit — có, lịch sử comment đáng ngờ. Steam — có, 200 giờ CS:GO.

45 phút sau, tôi đang ở tab thứ 12 trong số… bao nhiêu? Tôi không biết còn bao nhiêu mạng xã hội trên đời. Và tôi vẫn chưa mở lần nào đến các diễn đàn tiếng Nga, tiếng Nhật, hay những trang chia sẻ ảnh tối tăm mà cái username kia khả năng cao cũng đăng ký.

Đây là lúc tôi biết mình đang làm sai cách.

Maigret Thực Ra Làm Gì

Repo này nhận username vào, trả về danh sách tài khoản tìm thấy trên mạng — và làm điều đó với 3.000+ trang web trong vài phút.

Không cần API key. Không cần tài khoản. Chỉ cần Python 3.10+ và kết nối internet.

Nói cho intern mới vào: Maigret là một công cụ OSINT Python. Chạy một lệnh với một username, nó gửi HTTP request bất đồng bộ đến từng site trong database, kiểm tra response theo rule riêng của từng site, và báo cáo real-time những nơi tìm thấy. Mặc định check 500 site xếp hạng cao nhất theo Majestic Million. Flag -a để quét toàn bộ 3.000+.

Đây là output thực tế khi chạy với username của tôi:

maigret hoangyell
[*] Checking username hoangyell on 509 sites
[+] GitHub: https://github.com/hoangyell
       ├─fullname: HoangYell
       ├─location: Da Nang
       └─twitter_username: hoangyell
[+] YouTube: https://www.youtube.com/@hoangyell/about
[+] Reddit: https://www.reddit.com/user/hoangyell
[+] Instagram: https://www.instagram.com/hoangyell/
[+] Facebook: https://www.facebook.com/hoangyell
[+] SoundCloud: https://soundcloud.com/hoangyell
[+] LinkedIn: https://linkedin.com/in/hoangyell
[+] DEV Community: https://dev.to/hoangyell
...
[*] Found 40 accounts in 44.9s (509 sites checked)

45 giây. Không phải 45 phút.

Phần Đệ Quy Mới Là Chỗ Hay

Sherlock, công cụ OSINT quen thuộc hơn, cũng làm được cái trên. Nó cũng có ~400 site, cũng check bất đồng bộ, cũng trả về URL danh sách.

Nhưng Sherlock dừng ở đó.

Maigret không dừng. Khi tìm thấy tài khoản GitHub, Maigret dùng thư viện socid_extractor để parse trang hồ sơ đó và trích xuất những gì nằm bên trong: username trên mạng khác, user ID số, email, vị trí, link đến hồ sơ khác. Mọi username mới đều được đưa vào hàng đợi và bắt đầu một vòng tìm kiếm tiếp theo.

maigret hoangyell -a
[*] Searching hoangyell on 3000+ sites
[+] GitHub: https://github.com/hoangyell
       ├─uid: 7069077
       ├─fullname: HoangYell
       ├─location: Da Nang
       ├─twitter_username: hoangyell
       └─bio: 🦥 I'm crazy, lazy and busy!
[-] Extracted IDs: {'hoangyell': 'username', 'HoangYell': 'username'}
[*] Extended info extracted from 15 accounts
[*] Countries: us, vn, cn, pk
[*] Interests: coding, social, photo, gaming, video, business, messaging, discussion
[*] Found 40 accounts in 44.9s (509 sites checked)

Đây là lúc bức tranh bắt đầu thành hình. Không phải chỉ “tài khoản này tồn tại hay không” — mà còn có cả metadata: quốc gia, sở thích, mạng lưới liên kết. Maigret vẽ ra cái profile đó mà không cần bạn làm gì thêm.

Các Lệnh Chính

LệnhMục đích
maigret usernameTìm trên top 500 sites
maigret username -aTìm toàn bộ 3.000+ sites
maigret username -HPTạo báo cáo HTML + PDF
maigret username --tags ru,vnChỉ tìm trên sites từ Nga và Việt Nam
maigret username --tags codingChỉ sites liên quan lập trình
maigret username --json ndjsonOutput JSON machine-readable
maigret username --graphTạo đồ thị tương tác D3 (HTML)
maigret --parse <url>Trích xuất username từ URL hồ sơ, tìm tiếp
maigret --permute hope dreamTạo 12 biến thể và tìm tất cả
maigret --web 5000Mở web UI trên cổng 5000

Tôi thường dùng -HP nhất. Báo cáo HTML/PDF gọn gàng, đủ đưa cho khách hàng mà không cần giải thích terminal output.

Maigret vs Sherlock

Sherlock vẫn tốt. Nhanh hơn, đơn giản hơn, dùng được với Python cũ hơn. Không phải Maigret luôn thắng.

Tính năngMaigretSherlock
Số lượng sites3.000+ (mặc định 500)~400
Recursive searchKhông
Trích xuất email, UID, tênKhông
Lọc theo quốc giaCó (--tags ru, --tags vn)Không
Báo cáo HTML+PDFHTML cơ bản
Đồ thị D3 / MindmapKhông
Web UI tích hợpKhông
Telegram botKhông
Parse URL hồ sơKhông
Windows EXEKhông
Tự cập nhật databaseMỗi 24 giờKhông
Python tối thiểu3.10+3.6+

Chọn Sherlock khi cần quick check và không muốn cài thêm deps. Chọn Maigret khi cần báo cáo đầy đủ cho client hoặc khi cần đào sâu hơn một username đơn lẻ.

Khi Nào Dùng Maigret

Báo chí điều tra: đối tượng dùng username giả trên một diễn đàn ẩn danh. Chạy Maigret với --tags ru hoặc --tags de, tìm tài khoản liên kết với thông tin thật. Đủ để xác minh danh tính mà không cần đặt vấn đề với platform.

Red team và recon: trước khi pen test, kiểm tra username của nhân viên target. Hay phát hiện tài khoản GitHub cũ để lộ email công ty, stack nội bộ, hoặc đoạn code nhạy cảm người ta đăng lên Stack Overflow năm 2019 rồi quên mất.

maigret target_employee -a --json ndjson
[*] Searching target_employee on 3000+ sites...
[+] GitHub: https://github.com/target_employee (email: [email protected])
[+] StackOverflow: https://stackoverflow.com/users/1234567/target_employee
[+] GitLab: https://gitlab.com/target_employee
...
[*] Found 14 accounts  -  saved to target_employee.ndjson

Kiểm tra dấu chân số của bản thân: muốn biết mình để lộ gì online?

maigret hoangyell -a -HP --graph
[*] Searching hoangyell on 3000+ sites...
[+] Found 40 accounts (15 with extended info)
[*] Countries: us, vn, cn, pk
[*] Interests: coding, social, photo, gaming, video, business
[*] Reports saved: report_hoangyell_plain.html, report_hoangyell.pdf
[-] Graph report on all usernames saved in report_hoangyell_graph.html

Nhận báo cáo PDF, nhìn qua danh sách, quyết định cần xóa tài khoản nào. Roblox, Wowhead, Tripline — những tài khoản đăng ký từ 10 năm trước mà đã quên hoàn toàn.

Cờ --graph sẽ tạo ra một file HTML chứa đồ thị mạng lưới D3 tương tác, giúp bạn dễ hình dung sự liên kết, trông đại khái thế này:

       [GitHub] --- (hoangyell) --- [Reddit]
          |              |              |
     (Da Nang)     (HoangYell)    [DeviantART]
          |              |
      [Twitter]      [SoundCloud]

Còn cờ -HP sẽ tự động gom tất cả dữ liệu thành một báo cáo PDF và HTML sạch đẹp. Cực kỳ tiện để nén lại gửi ngay cho khách hàng xem mà không bắt họ phải đọc những dòng log chi chít trên terminal.

Điều tra tiền mã hóa: username crypto_whale_2020 xuất hiện trên một exchange forum. Không biết URL hồ sơ, chỉ có link? Parse thẳng:

maigret --parse https://bitcointalk.org/index.php?action=profile;u=12345
[*] Parsing profile: https://bitcointalk.org/index.php?action=profile;u=12345
[+] Extracted username: crypto_whale_2020
[*] Searching crypto_whale_2020 on 500 sites...
[+] Binance: https://www.binance.com/en/feed/profile/crypto_whale_2020
[+] GitHub: https://github.com/crypto_whale_2020
    Extracted IDs: [email protected]
...
[*] Found 9 accounts

Maigret trích xuất username thật, tìm tiếp, phát hiện email đăng ký exchange. Từ đó thì đã là việc của người khác.

Phần Thật Thà

False positive nhiều hơn bạn tưởng: Maigret báo “found” không có nghĩa là đúng người đó. Một số site kiểm tra HTTP status code thay vì nội dung thật. Username phổ biến như admin hay user1 có thể trả về 200 OK ở mọi nơi. Luôn verify thủ công những link quan trọng trước khi đưa vào báo cáo.

Mặc định 500 sites không phải tất cả: flag -a cho toàn bộ 3.000+ site, nhưng sẽ chậm hơn và false positive tăng lên đáng kể. Với mục tiêu ban đầu, 500 sites mặc định thường đủ. Dùng -a khi đã có leads từ vòng đầu.

Database cũ là chuyện bình thường: site có thể đổi URL pattern hoặc đóng cửa mà database chưa theo kịp. Chạy maigret -a --self-check định kỳ để phát hiện sites lỗi, hoặc thêm --auto-disable để tự vô hiệu hóa.

maigret -a --self-check --auto-disable

Đạo đức và giới hạn: Maigret chỉ đụng vào thông tin công khai — không crack password, không bypass authentication. Nhưng tổng hợp thông tin công khai cũng có thể vi phạm quyền riêng tư tùy ngữ cảnh và tùy luật từng quốc gia. Dùng để kiểm tra bản thân, trong phạm vi công việc được ủy quyền, hoặc với mục tiêu có sự đồng ý. Không phải để theo dõi người khác.

Cài Đặt

# pip -- đơn giản nhất
pip3 install maigret
maigret username

Yêu cầu Python 3.10+, khuyến nghị 3.11.

# Docker CLI
docker run -v /mydir:/app/reports soxoj/maigret:latest username --html
# Báo cáo lưu vào /mydir/

# Docker Web UI
docker run -p 5000:5000 soxoj/maigret:web
# Mở http://127.0.0.1:5000

Không muốn cài gì cả? Gửi username đến @maigret_search_bot trên Telegram, nhận báo cáo ngay trên điện thoại.


Cái tên Maigret lấy từ thám tử Jules Maigret của Georges Simenon — nhân vật nổi tiếng với khả năng đọc người qua tiểu tiết. Username là tiểu tiết. Mạng lưới tài khoản là bức tranh toàn cảnh.

24.400+ sao trên GitHub. Không phải vì nó hay. Vì nó được việc lúc 2 giờ sáng khi bạn cần câu trả lời trước sáng.

soxoj/maigret

Hoang Yell

Hoang Yell

Một nhà phát triển phần mềm và là người kể chuyện kỹ thuật. Tôi dành thời gian để khám phá những repository mã nguồn mở thú vị nhất trên GitHub và trình bày chúng dưới dạng những câu chuyện dễ hiểu cho mọi người.