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 hoangyelltì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ệnh | Mục đích |
|---|---|
maigret username | Tìm trên top 500 sites |
maigret username -a | Tìm toàn bộ 3.000+ sites |
maigret username -HP | Tạo báo cáo HTML + PDF |
maigret username --tags ru,vn | Chỉ tìm trên sites từ Nga và Việt Nam |
maigret username --tags coding | Chỉ sites liên quan lập trình |
maigret username --json ndjson | Output JSON machine-readable |
maigret username --graph | Tạ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 dream | Tạo 12 biến thể và tìm tất cả |
maigret --web 5000 | Mở 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ăng | Maigret | Sherlock |
|---|---|---|
| Số lượng sites | 3.000+ (mặc định 500) | ~400 |
| Recursive search | Có | Không |
| Trích xuất email, UID, tên | Có | Không |
| Lọc theo quốc gia | Có (--tags ru, --tags vn) | Không |
| Báo cáo HTML+PDF | Có | HTML cơ bản |
| Đồ thị D3 / Mindmap | Có | Không |
| Web UI tích hợp | Có | Không |
| Telegram bot | Có | Không |
| Parse URL hồ sơ | Có | Không |
| Windows EXE | Có | Không |
| Tự cập nhật database | Mỗi 24 giờ | Không |
| Python tối thiểu | 3.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.
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.