DEV Community

Cover image for Apa Itu Maigret: Pemindai OSINT yang Tidak Merusak
Walse
Walse

Posted on • Originally published at apidog.com

Apa Itu Maigret: Pemindai OSINT yang Tidak Merusak

Sebagian besar alat OSINT cepat usang: endpoint berubah, captcha berevolusi, dan halaman profil didesain ulang. Maigret adalah pengecualian yang menarik untuk dipelajari developer. Alat ini berjalan selama bertahun-tahun, mendukung 3.000+ situs, tersedia sebagai paket Python, bot Telegram, dan antarmuka web, serta menunjukkan pola engineering yang relevan untuk membangun scanner dan test suite yang tahan terhadap perubahan.

Coba Apidog hari ini

Panduan ini fokus pada implementasi: bagaimana Maigret bekerja, kapan penggunaannya sah, arsitektur yang membuatnya skalabel, dan bagaimana pola yang sama—signature database, recursive verification, drift detection—bisa diterapkan pada pengujian API dengan Apidog.

Jika Anda belum membacanya, lihat juga artikel Pengujian API tanpa Postman di tahun 2026, yang membahas pattern matching dan drift detection dalam konteks API testing.

TL;DR

  • Maigret mencari akun publik berdasarkan username di 3.000+ situs dan mengekstrak informasi profil publik.
  • Arsitekturnya berbasis signature database, recursive search, drift detection, captcha/rate-limit handling, dan mode ringkasan AI opsional.
  • Penggunaan yang sah: investigasi OSINT oleh jurnalis, pemulihan akun pribadi, pencarian orang hilang dengan otorisasi, audit keamanan, dan monitoring penyalahgunaan merek.
  • Penggunaan terhadap individu tanpa persetujuan dapat masuk ke ranah pelecehan, stalking, atau pelanggaran hukum.
  • Pattern yang dipakai Maigret bisa diterapkan langsung ke API testing: multi-signal assertion, contract replay, fixture validasi, dan alert saat schema berubah.
  • Apidog dapat digunakan untuk mendesain dan menjalankan assertion bergaya signature terhadap API Anda.

Apa itu Maigret dan Apa Bukan

Maigret adalah tool Python berlisensi MIT yang dikelola oleh soxoj. Berdasarkan README-nya, Maigret “mengumpulkan berkas tentang seseorang berdasarkan username dari lebih dari 3.000 situs”.

Instalasi dasar:

pip install maigret
Enter fullscreen mode Exit fullscreen mode

Contoh penggunaan:

maigret some_username
Enter fullscreen mode Exit fullscreen mode

Maigret akan:

  1. Membaca database situs.
  2. Membentuk URL profil berdasarkan template tiap situs.
  3. Mengirim request anonim.
  4. Mendeteksi apakah username ditemukan.
  5. Mengekstrak informasi profil publik.
  6. Membuat laporan.

Maigret overview

Ada tiga batasan penting.

Pertama, Maigret hanya memakai data publik. Tidak ada login, credential abuse, atau private API key. Jika profil bisa dibaca pengunjung anonim, Maigret membacanya. Jika tidak, hasilnya akan berupa “tidak ditemukan”, “unknown”, atau halaman yang ditandai untuk verifikasi manual.

Kedua, Maigret umum dipakai dalam konteks riset yang sah: jurnalisme investigatif, pencarian orang hilang, fraud prevention, brand protection, dan red team engagement yang memiliki otorisasi tertulis.

Ketiga, Maigret bisa disalahgunakan. Menjalankannya terhadap individu pribadi tanpa persetujuan dapat melanggar etika dan hukum. Artikel ini membahas engineering pattern-nya, bukan workflow untuk menargetkan manusia.

Basis Data Signature Situs

Komponen paling penting di Maigret adalah database signature situs. Setiap entri menjelaskan bagaimana satu situs harus diperiksa.

Sebuah signature menjawab pertanyaan berikut:

  • Bagaimana membentuk URL profil?
  • Apa indikator bahwa username ditemukan?
  • Apa indikator bahwa username tidak ditemukan?
  • Field apa yang bisa diekstrak?
  • Apakah situs memakai rate limit atau captcha?
  • Header khusus apa yang dibutuhkan?

Secara konseptual, satu entri bisa terlihat seperti ini:

{
  "name": "ExampleSite",
  "urlMain": "https://example.com",
  "url": "https://example.com/user/{username}",
  "presenseStrs": ["Profile", "@{username}"],
  "absenceStrs": ["User not found", "This profile does not exist"],
  "headers": {
    "User-Agent": "Mozilla/5.0"
  },
  "tags": ["social", "global"]
}
Enter fullscreen mode Exit fullscreen mode

Database ini disimpan sebagai JSON, di-versioning di repository, dan dapat diperbarui otomatis dari GitHub setiap 24 jam. Jadi ketika maintainer memperbaiki signature untuk situs yang berubah, instalasi Maigret lain bisa mengambil update tanpa reinstall.

Pattern ini sama dengan API testing yang baik.

Untuk setiap endpoint, Anda seharusnya punya “signature”:

  • Method dan path
  • Expected status code
  • Required response fields
  • Error envelope
  • Header penting
  • Schema response
  • Fixture response yang diketahui benar

Contoh signature endpoint:

{
  "endpoint": "GET /users/{id}",
  "expectedStatus": 200,
  "requiredFields": ["id", "email", "created_at"],
  "forbiddenFields": ["password", "token"],
  "contentType": "application/json"
}
Enter fullscreen mode Exit fullscreen mode

Jika vendor mengubah response shape, test suite harus gagal cepat dengan diff yang jelas. Pattern ini juga dibahas dalam pengembangan API berorientasi kontrak dan panduan pengujian server MCP.

Cara Maigret Mendeteksi “Username Ditemukan” vs “Tidak Ditemukan”

Scanner naïf biasanya hanya melakukan:

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

Lalu mengecek status code.

Masalahnya, banyak situs tetap mengembalikan 200 OK untuk halaman “user not found”, halaman fallback, cached page, atau captcha challenge. Karena itu, Maigret memakai deteksi multi-sinyal.

Signature situs dapat berisi:

  • urlMain
  • url
  • presenseStrs
  • absenceStrs
  • Regex ekstraksi username atau field lain
  • Header opsional
  • Tag kategori atau negara

Logika sederhananya:

def detect(response_text, presence_strs, absence_strs):
    has_presence = all(s in response_text for s in presence_strs)
    has_absence = any(s in response_text for s in absence_strs)

    if has_presence and not has_absence:
        return "found"

    if has_absence:
        return "not_found"

    return "unknown"
Enter fullscreen mode Exit fullscreen mode

Ini juga pattern yang dibutuhkan dalam API testing.

Status 200 saja tidak cukup. Untuk API, Anda perlu assertion seperti:

pm.test("status code is 200", function () {
  pm.response.to.have.status(200);
});

pm.test("response has required fields", function () {
  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

Di Apidog, pattern yang sama bisa dibuat dengan assertion status code, body field, header, dan schema dalam satu request. Ini ekuivalen dengan kombinasi presenseStrs dan absenceStrs di Maigret.

Recursive Search dan Ekstraksi Informasi

Setelah akun ditemukan, Maigret melakukan dua hal:

  1. Mengekstrak identifier publik tambahan.
  2. Memakai identifier baru itu untuk pencarian lanjutan.

Contoh identifier:

  • Email publik
  • Nomor telepon publik
  • Nama asli
  • Username lain
  • Link ke profil lain

Alurnya:

username
  -> profile ditemukan
    -> ekstrak email
      -> cari email/username terkait
        -> temukan profil lain
          -> ekstrak identifier baru
Enter fullscreen mode Exit fullscreen mode

Untuk OSINT, ini membedakan “menemukan satu akun” dari “memetakan beberapa akun yang saling terhubung”.

Untuk API testing, pattern-nya juga berguna. Jika satu endpoint mengembalikan field yang tidak terdokumentasi, field itu sering mengarah ke:

  • Endpoint terkait
  • Service downstream
  • Model internal
  • Kasus uji yang belum ada
  • Breaking change yang belum dikomunikasikan

Contoh:

{
  "id": "usr_123",
  "email": "dev@example.com",
  "billing_profile_id": "bp_456"
}
Enter fullscreen mode Exit fullscreen mode

Jika billing_profile_id tidak ada di kontrak, itu sinyal untuk:

  1. Menambahkan assertion schema.
  2. Mengecek endpoint billing terkait.
  3. Menanyakan apakah field tersebut stabil atau internal.
  4. Membuat regression test agar perubahan berikutnya terdeteksi.

Captcha dan Rate Limit Handling

Maigret tidak mencoba “mengalahkan” semua mekanisme anti-otomasi. Ia mendeteksi captcha dan rate limit dari bentuk response, lalu menyesuaikan strategi.

Strategi yang disebutkan meliputi:

  • Rotasi user-agent
  • Menghormati header retry
  • Fallback ke domain mobile atau lightweight jika tersedia
  • Routing via Tor atau I2P jika situs mengizinkan

Jika situs memakai anti-automation yang agresif, Maigret menandai kondisi tersebut sebagai captcha atau unknown dan menyerahkan verifikasi ke pengguna.

Pattern ini penting untuk API client dan test runner.

Jangan brute-force rate limit. Deteksi dan mundur dengan benar.

Contoh handling 429 Too Many Requests:

async function requestWithBackoff(fetchFn, maxRetries = 3) {
  for (let attempt = 0; attempt <= maxRetries; attempt++) {
    const response = await fetchFn();

    if (response.status !== 429) {
      return response;
    }

    const retryAfter = Number(response.headers.get("retry-after") || 1);
    await new Promise(resolve => setTimeout(resolve, retryAfter * 1000));
  }

  throw new Error("Rate limit exceeded after retries");
}
Enter fullscreen mode Exit fullscreen mode

Prinsipnya sama: test runner harus menghormati batas sistem, bukan memaksa melewatinya.

Masalah Signature Drift

Database 3.000 situs hanya berguna jika tetap mutakhir. Situs bisa:

  • Mengubah URL profil
  • Mendesain ulang halaman
  • Mengganti teks “not found”
  • Menambahkan captcha
  • Melakukan rebrand
  • Mengubah struktur HTML

Signature usang menyebabkan:

  • False negative: akun ada, tetapi tidak terdeteksi.
  • False positive: akun tidak ada, tetapi dianggap ditemukan.
  • Unknown result yang terlalu banyak.

Maigret mengurangi drift dengan beberapa lapisan:

  • Update otomatis dari repository GitHub pusat setiap 24 jam.
  • Pull request komunitas untuk memperbaiki signature.
  • Flag --update untuk memaksa refresh.
  • Test harness bawaan untuk memvalidasi signature terhadap username yang diketahui ada.

Contoh:

maigret --update some_username
Enter fullscreen mode Exit fullscreen mode

Bagian paling penting adalah fixture validasi. Untuk setiap situs, Maigret dapat memakai username yang diketahui valid. Harness mengecek apakah signature masih berhasil mendeteksi akun tersebut. Jika gagal, signature ditandai drift.

Ini persis yang dibutuhkan API contract testing.

Di Apidog, Anda bisa menerapkan pattern berikut:

  1. Simpan response yang diketahui benar untuk endpoint penting.
  2. Jalankan ulang request secara berkala.
  3. Bandingkan status code, schema, field wajib, dan response body penting.
  4. Kirim alert jika ada drift.

Alur manual untuk vendor tertentu juga dibahas di Panduan API DeepSeek V4.

Mode Ringkasan AI Opsional

Flag --ai di Maigret mengubah temuan mentah menjadi ringkasan investigasi singkat menggunakan endpoint LLM yang kompatibel dengan OpenAI. Pengguna menyediakan API key sendiri.

Arsitekturnya tepat karena:

  • Rule deterministik tetap menentukan apakah username cocok.
  • LLM tidak menjadi hakim utama.
  • LLM hanya meringkas output yang sudah dibatasi.
  • Risiko halusinasi lebih terkendali.

Pattern yang sama bagus untuk API monitoring:

deterministic assertions
  -> execution report
    -> LLM summarization
      -> Slack-friendly summary
Enter fullscreen mode Exit fullscreen mode

Gunakan rule engine untuk menentukan pass/fail. Gunakan LLM hanya untuk membuat laporan lebih mudah dibaca.

Pendekatan ini sejalan dengan artikel penggunaan komputer vs API terstruktur: lapisan terstruktur harus didahulukan.

Kasus Penggunaan Sah

Berikut konteks di mana Maigret dapat digunakan secara tepat.

1. Pemulihan akun pribadi

Gunakan Maigret pada username milik Anda sendiri untuk menemukan akun lama sebelum audit privasi atau penghapusan jejak digital.

maigret your_old_username
Enter fullscreen mode Exit fullscreen mode

2. Monitoring penyalahgunaan merek

Perusahaan dapat menjalankan pencarian terhadap nama brand atau produk untuk menemukan akun peniru.

Contoh target:

companyname
company_support
company-login
Enter fullscreen mode Exit fullscreen mode

3. Pencarian orang hilang dengan otorisasi

Organisasi pencarian dan penyelamatan dapat memakai OSINT dengan persetujuan keluarga dan koordinasi penegak hukum. Jangan bekerja sendiri tanpa koordinasi karena dapat mengganggu investigasi.

4. Red team engagement yang berwenang

Tim pentest dapat memakai Maigret untuk memetakan public attack surface organisasi dalam scope kontrak tertulis.

Scope harus jelas:

Allowed:
- company-owned domains
- public brand usernames
- employee accounts explicitly included in scope

Not allowed:
- private individuals outside scope
- unrelated third-party accounts
Enter fullscreen mode Exit fullscreen mode

5. Jurnalisme investigatif

Reporter dapat memakai OSINT untuk meneliti penipuan, pelanggaran figur publik, atau kejahatan terorganisir dengan tinjauan editorial dan hukum.

Yang tidak termasuk penggunaan sah: mencari orang asing karena penasaran, memantau mantan pasangan, atau membangun dataset orang tanpa persetujuan.

Pattern Maigret yang Bisa Diterapkan ke API Testing

Ada lima pattern engineering yang langsung bisa dipakai.

1. Simpan perilaku sebagai data, bukan kode

Alih-alih hard-code assertion di banyak file, definisikan expected behavior sebagai data.

{
  "name": "Get user profile",
  "method": "GET",
  "path": "/users/{id}",
  "expected": {
    "status": 200,
    "requiredFields": ["id", "email"],
    "forbiddenFields": ["password"]
  }
}
Enter fullscreen mode Exit fullscreen mode

2. Gunakan multi-signal assertion

Jangan hanya mengecek status code.

Minimal cek:

  • Status code
  • Content-Type
  • Required fields
  • Forbidden fields
  • Error envelope
  • Response schema

3. Sinkronkan signature secara terpusat

Maigret mengambil signature dari repository pusat. Untuk API testing, gunakan project yang tersinkronisasi agar assertion terbaru dipakai semua environment.

Apidog mendukung workflow berbasis cloud. Lihat juga pengujian API tanpa Postman.

Apidog testing workflow

4. Jadwalkan drift detection

Jalankan ulang test terhadap fixture yang diketahui benar.

Contoh jadwal:

name: API drift check

on:
  schedule:
    - cron: "0 */6 * * *"

jobs:
  drift-check:
    runs-on: ubuntu-latest
    steps:
      - name: Run API contract tests
        run: echo "Run Apidog/API test collection here"
Enter fullscreen mode Exit fullscreen mode

Tujuannya bukan hanya mencari bug, tetapi mendeteksi perubahan kontrak sebelum pengguna terdampak.

5. Pakai LLM sebagai post-processor

Jangan gunakan LLM untuk menentukan pass/fail. Gunakan rule deterministik untuk itu.

Gunakan LLM untuk merangkum:

12 endpoint failed.
Primary cause: missing field `billing_profile_id`.
First detected in staging at 02:14 UTC.
Likely impacted services: billing, checkout, account dashboard.
Enter fullscreen mode Exit fullscreen mode

Kesalahan Umum Saat Menjalankan Maigret

Jika Anda bereksperimen dengan Maigret, hindari kesalahan berikut.

Menganggap default scan sudah lengkap

Default Maigret memindai subset situs populer. Untuk memindai database penuh, gunakan:

maigret -a username
Enter fullscreen mode Exit fullscreen mode

Perhatikan bahwa proses akan lebih lama.

Mengabaikan tag

Gunakan --tags untuk membatasi kategori atau negara.

maigret username --tags social
Enter fullscreen mode Exit fullscreen mode

Default yang terlalu umum bisa melewatkan situs regional.

Tidak memperbarui database

Signature lama menghasilkan false positive dan false negative.

maigret --update username
Enter fullscreen mode Exit fullscreen mode

Menafsirkan blokir Tor sebagai sinyal user

Beberapa situs memblokir Tor exit node. Itu bukan bukti bahwa username tidak ada. Perlakukan hasil seperti ini sebagai unknown.

Mempercayai hasil ekstraksi tanpa verifikasi

Maigret mengekstrak apa yang ada di halaman publik. Halaman bisa salah, lama, atau sengaja dimanipulasi. Perlakukan hasil sebagai petunjuk, bukan bukti final.

Kasus Penggunaan Dunia Nyata

Konsultan keamanan memakai Maigret sebagai langkah awal dalam red team engagement yang memiliki scope jelas. Output-nya masuk ke laporan awal agar klien melihat public attack surface sebelum assessment dimulai.

Investigator fraud dapat memakai flag --ai untuk meringkas hasil scan besar menjadi laporan pendek untuk klien non-teknis. Data tetap berasal dari pencarian deterministik; LLM hanya membuat ringkasan.

Tim engineering dapat mengadopsi arsitektur yang sama—signature database, drift detection, scheduled replay—untuk menjaga API test suite tetap relevan di ratusan microservice. Implementasinya bisa dilakukan di Apidog; prinsipnya sama dengan Maigret.

Kesimpulan

Maigret adalah contoh bagus tentang cara membangun scanner yang bertahan lama: bukan dengan hard-code logic per situs, tetapi dengan signature database, multi-signal detection, update otomatis, drift detection, dan post-processing yang terpisah.

Lima poin utama:

  • Maigret memeriksa 3.000+ situs memakai signature database yang di-versioning.
  • Multi-signal detection lebih andal daripada status code saja.
  • Drift adalah musuh semua test suite jangka panjang.
  • LLM paling aman dipakai sebagai post-processor, bukan hakim pass/fail.
  • Pattern yang sama bisa diterapkan ke API testing di Apidog.

Langkah praktis berikutnya: ambil satu endpoint penting di proyek Anda, lalu desain seperti signature Maigret:

{
  "endpoint": "GET /orders/{id}",
  "expectedStatus": 200,
  "requiredFields": ["id", "status", "total", "created_at"],
  "forbiddenFields": ["internal_note"],
  "driftFixture": "order_known_good.json"
}
Enter fullscreen mode Exit fullscreen mode

Simpan fixture, jalankan ulang secara berkala, dan buat alert saat response berubah. Disiplin ini akan berguna saat vendor mengganti nama field pada jam 2 pagi dan test suite Anda mendeteksinya sebelum user terdampak.

FAQ

Apakah Maigret legal untuk digunakan?

Tergantung yurisdiksi dan target. Menjalankannya pada diri sendiri, akun milik Anda, perusahaan yang memberi otorisasi tertulis, atau dalam jurnalisme yang sah umumnya dapat diterima. Menjalankannya pada individu tanpa persetujuan dapat melanggar hukum stalking atau pelecehan. Periksa aturan lokal sebelum penggunaan terhadap pihak ketiga.

Apakah Maigret bisa dipakai tanpa Python?

Paket resminya membutuhkan Python 3.10+. Penulis juga menyediakan bot Telegram dan setup Cloud Shell untuk pengguna yang tidak ingin instalasi lokal.

Seberapa akurat klaim 3.000 situs?

Repository Maigret berisi 3.000+ entri situs, tetapi tidak semuanya aktif setiap saat. Update otomatis dan kontribusi komunitas membantu menjaga subset yang berfungsi tetap mutakhir.

Apa fungsi mode AI?

Flag --ai memakai LLM kompatibel OpenAI untuk meringkas temuan deterministik menjadi laporan yang mudah dibaca. Mode ini tidak mengubah proses pencarian. Anda perlu menyediakan API key sendiri.

Bisakah Maigret dipakai di CI?

Untuk investigasi OSINT, biasanya tidak ideal karena sifatnya interaktif dan bergantung konteks. Namun pattern arsitekturnya—signature database, drift detection, scheduled replay—sangat cocok untuk pipeline CI API testing. Apidog mendukung workflow semacam ini.

Apa bedanya Maigret dengan Sherlock?

Sherlock adalah tool yang lebih tua dan lebih sederhana. Maigret memperluasnya dengan ekstraksi informasi, recursive search, captcha handling, mode ringkasan AI, dan database situs yang lebih kaya. Keduanya berlisensi MIT.

Di mana melaporkan signature yang usang?

README Maigret mengarahkan pengguna ke issue dan pull request di repository GitHub. Kontribusi komunitas menjaga database tetap relevan; biasanya satu PR untuk satu situs yang perlu diperbaiki.

Top comments (0)