# WP-Audit — Black Box WordPress Security Scanner
██╗ ██╗██████╗ █████╗ ██╗ ██╗██████╗ ██╗████████╗
██║ ██║██╔══██╗ ██╔══██╗██║ ██║██╔══██╗██║╚══██╔══╝
██║ █╗ ██║██████╔╝ ███████║██║ ██║██║ ██║██║ ██║
██║███╗██║██╔═══╝ ██╔══██║██║ ██║██║ ██║██║ ██║
╚███╔███╔╝██║ ██║ ██║╚██████╔╝██████╔╝██║ ██║
╚══╝╚══╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝
Versi: 2.0 | Mode: Black Box | Checks: 120+ | Output: HTML Dashboard + JSON
Peringatan: Tool ini hanya boleh digunakan pada website yang Anda miliki atau yang Anda memiliki izin tertulis untuk melakukan pengujian keamanan. Penggunaan tanpa izin adalah tindakan ilegal.
- Tentang Tool Ini
- Perbedaan Black Box dan Grey Box
- Persyaratan Sistem
- Instalasi
- Cara Penggunaan
- Opsi dan Parameter
- Modul Pemeriksaan
- Memahami Hasil Scan
- Struktur Direktori
- Menambah Modul Baru
- Troubleshooting
WP-Audit Black Box adalah scanner keamanan WordPress yang bekerja dari luar server, mengirimkan HTTP request seperti yang dilakukan oleh seorang peneliti keamanan atau penyerang eksternal. Tool ini tidak memerlukan akses ke file server, database, atau kredensial apapun.
Hasil scan ditampilkan dalam bentuk dashboard HTML interaktif bergaya Nessus dengan:
- Security Score dari 0–100 dan Grade A hingga F
- Grafik distribusi temuan per severity
- Filter dan pencarian temuan secara real-time
- Detail bukti teknis dan rekomendasi perbaikan untuk setiap temuan
| Aspek | Black Box (tool ini) | Grey Box (wp-audit-grey) |
|---|---|---|
| Cara kerja | HTTP request dari luar | Baca file dan database langsung |
| Perlu akses server | Tidak | Ya (dijalankan di server) |
| Baca wp-config.php | Tidak bisa | Baca langsung |
| Akses database | Tidak bisa | Query MySQL langsung |
| Akurasi versi plugin | Terbatas | Akurat (baca readme.txt) |
| Scan malware | Tidak bisa | Bisa (scan seluruh PHP) |
| Cek file permission | Tidak bisa | Bisa (chmod audit) |
| Cocok untuk | Audit eksternal, pengujian dari sisi penyerang | Audit internal oleh pemilik server |
| Komponen | Keterangan |
|---|---|
| Python | 3.8 atau lebih baru |
| Sistem Operasi | Windows 10/11, macOS, Linux (Ubuntu/Debian/CentOS) |
| Koneksi Jaringan | Diperlukan untuk menghubungi target |
| RAM | Minimal 256 MB |
Langkah 1 — Ekstrak file project
Pastikan struktur direktori seperti berikut:
wp-audit/
├── wp_audit.py
├── debug_scan.py
├── generate_demo.py
├── requirements.txt
└── modules/
Langkah 2 — Install dependensi
pip install -r requirements.txtLangkah 3 — Verifikasi instalasi
python wp_audit.py --helppython wp_audit.py https://example.com# HTTP biasa (paling umum untuk localhost)
python wp_audit.py http://localhost/wordpress
# Dengan port custom
python wp_audit.py http://localhost:8080/wordpress
# Domain lokal
python wp_audit.py http://wordpress.localScanner otomatis melakukan fallback dari HTTPS ke HTTP jika koneksi SSL gagal, sehingga
https://localhostpun akan tetap berjalan.
# HTML saja (default)
python wp_audit.py https://example.com -o laporan_audit.html
# JSON saja
python wp_audit.py https://example.com --output-format json
# HTML dan JSON sekaligus
python wp_audit.py https://example.com -o laporan.html --output-format both# Scan lebih cepat
python wp_audit.py https://example.com --threads 20
# Melalui proxy Burp Suite
python wp_audit.py https://example.com --proxy http://127.0.0.1:8080
# Output verbose
python wp_audit.py https://example.com -v
# Paksa scan meski WordPress tidak terdeteksi
python wp_audit.py https://example.com --forceJika sebuah file yang seharusnya ada tidak muncul di laporan:
python debug_scan.py http://localhost/wordpress /.env
python debug_scan.py https://example.com /wp-config.php.bakTool ini menjelaskan langkah per langkah mengapa scanner menerima atau menolak sebuah URL.
python generate_demo.pyMembuat file wp_audit_demo_report.html berisi 47 temuan fiktif untuk melihat tampilan dashboard.
| Parameter | Default | Keterangan |
|---|---|---|
target |
Wajib diisi | URL target WordPress |
-o, --output |
wp_audit_report.html |
Nama file laporan output |
--output-format |
html |
Format: html, json, atau both |
-t, --threads |
10 |
Jumlah thread paralel |
--timeout |
10 |
Batas waktu per request (detik) |
--proxy |
(kosong) | URL proxy, contoh: http://127.0.0.1:8080 |
--user-agent |
WP-Audit/2.0 |
User-Agent HTTP custom |
--no-ssl-verify |
Tidak aktif | Nonaktifkan verifikasi sertifikat SSL |
--force |
Tidak aktif | Lanjutkan scan meski WP tidak terdeteksi |
--skip-detection |
Tidak aktif | Lewati tahap deteksi WordPress |
-v, --verbose |
Tidak aktif | Tampilkan detail proses di terminal |
Scanner terdiri dari 18 modul yang berjalan secara paralel menggunakan thread pool.
Information Disclosure (info_disclosure.py) — 12 checks
Memeriksa informasi yang tidak seharusnya diekspos secara publik: versi WordPress di meta generator tag, readme.html, license.txt, debug.log yang aksesibel, wp-cron.php publik, RSD link dan WLW manifest di header, PHP error di halaman, versi server di header HTTP, X-Powered-By PHP version, versi WordPress di feed RSS dan sitemap.
Version Detection (version_detection.py) — 5 metode
Mendeteksi versi WordPress melalui: meta generator tag, URL parameter aset di feed RSS, header wp-login.php, readme.html, dan endpoint REST API. Versi yang terdeteksi dicocokan dengan riwayat kerentanan untuk menentukan severity.
User Enumeration (user_enumeration.py) — 5 checks
Memeriksa apakah username WordPress bisa dienumerasi melalui: parameter ?author=N, endpoint REST API /wp/v2/users, perbedaan pesan error login, endpoint oEmbed, dan sitemap pengguna.
Login Security (login_security.py) — 7 checks
Memeriksa: keberadaan proteksi brute force, username admin default, aksesibilitas halaman login, registrasi pengguna terbuka, akses wp-admin, endpoint AJAX publik, dan keberadaan CAPTCHA.
XML-RPC Security (xml_rpc.py) — 3 checks
Memeriksa apakah XML-RPC aktif, apakah system.multicall bisa digunakan untuk brute force massal, dan apakah pingback.ping aktif yang berpotensi disalahgunakan untuk SSRF dan DDoS amplification.
REST API Security (rest_api.py) — 4 checks
Memeriksa: endpoint root REST API publik, endpoint sensitif tanpa autentikasi (users, settings, plugins, themes), endpoint application passwords, dan namespace plugin yang terekspos.
File Exposure (file_exposure.py) — 11 checks
Memeriksa file sensitif dengan validasi konten (bukan sekadar status code): wp-config.php backup, file .env, repository .git, SQL dump, .htaccess, error log PHP, debug.log, file composer, halaman instalasi, readme.html, dan repository .svn.
Directory Listing (directory_listing.py) — 9 direktori
Memeriksa apakah browser dapat melihat isi direktori: wp-content/, uploads/, plugins/, themes/, wp-includes/, cache/, backup/, logs/.
SSL/TLS (ssl_tls.py) — 4 checks
Memeriksa: redirect HTTP ke HTTPS, versi TLS yang digunakan, keberadaan dan konfigurasi HSTS header, dan keberadaan mixed content.
HTTP Security Headers (headers_security.py) — 8 checks
Memeriksa keberadaan dan konfigurasi header keamanan: X-Frame-Options, X-Content-Type-Options, Content-Security-Policy, Referrer-Policy, Permissions-Policy, X-XSS-Protection, serta kualitas CSP (unsafe-inline, unsafe-eval).
Plugin Scanner (modules/plugins/plugin_scanner.py)
Mendeteksi plugin yang terinstall dari response halaman dan path direktori, kemudian mencocokkan dengan database 50+ plugin rentan beserta informasi CVE, tipe kerentanan, dan versi patch. Plugin tidak aktif pun tetap dilaporkan jika memiliki kerentanan.
Contoh plugin yang dicek: Contact Form 7, WooCommerce, Elementor, Yoast SEO, Jetpack, Wordfence, File Manager, Duplicator, Ultimate Member, BuddyPress, LiteSpeed Cache, LayerSlider, WooCommerce Payments, dan 40+ lainnya.
Theme Scanner (modules/themes/theme_scanner.py)
Mendeteksi tema aktif dari source HTML dan memeriksa terhadap database 10 tema rentan. Juga memeriksa apakah theme editor PHP aktif di wp-admin.
Config Scanner (modules/config/config_scanner.py)
Memeriksa konfigurasi WordPress dari sisi luar: indikasi WP_DEBUG aktif, secret keys yang mungkin lemah, prefix tabel default, file editing aktif, versi PHP dari header, halaman signup multisite, konfigurasi wp-cron, dan status auto-update.
CVE Scanner (modules/cve/cve_scanner.py)
Mencocokkan versi WordPress yang terdeteksi dengan 34 WordPress core CVE dari tahun 2016 hingga 2023, mencakup: SQL injection, XSS, SSRF, remote code execution, privilege escalation, directory traversal, dan authentication bypass.
Backup Files (backup_files.py)
Memeriksa 20+ path umum file backup: arsip ZIP dan tar.gz berdasarkan nama domain, SQL dump, dan direktori backup. Validasi menggunakan Content-Type header dan ukuran file untuk menghindari false positive.
Sensitive Files (sensitive_files.py)
Memeriksa 17 jenis file sensitif dengan validasi konten: phpinfo.php, PHP shell, Adminer, phpMyAdmin, file konfigurasi CI/CD, Dockerfile, Docker Compose, Apache server-status, dan file development lainnya.
Upload Security (upload_check.py)
Memeriksa: apakah PHP bisa dieksekusi di direktori uploads, apakah ada .htaccess yang memblokir PHP, apakah ada file PHP di dalam direktori uploads, dan konfigurasi pembatasan tipe file.
Database Exposure (database_exposure.py)
Memeriksa: phpMyAdmin di berbagai path umum, Adminer, file database yang terekspos, pesan error MySQL yang tampil di halaman, dan prefix tabel default dari respons error.
| Grade | Skor | Interpretasi |
|---|---|---|
| A | 90–100 | Sangat baik. Hanya ditemukan temuan informasional atau risiko sangat rendah. |
| B | 80–89 | Baik. Beberapa hal perlu diperhatikan namun tidak mengancam secara langsung. |
| C | 70–79 | Cukup. Terdapat kerentanan yang perlu diperbaiki dalam waktu dekat. |
| D | 60–69 | Buruk. Ditemukan kerentanan signifikan yang berisiko tinggi. |
| F | 0–59 | Kritis. Terdapat kerentanan parah yang harus ditangani segera. |
| Severity | Pengurangan per Temuan |
|---|---|
| Critical | -25 poin |
| High | -15 poin |
| Medium | -7 poin |
| Low | -3 poin |
| Info | 0 poin |
| Level | Keterangan |
|---|---|
| Critical | Kerentanan yang bisa langsung dieksploitasi atau mengekspos kredensial. Tangani dalam hitungan jam. |
| High | Kerentanan serius yang memerlukan perhatian segera dalam 24–48 jam. |
| Medium | Masalah yang meningkatkan risiko dan perlu diperbaiki dalam waktu dekat. |
| Low | Masalah minor atau best practice yang belum diterapkan. |
| Info | Informasi tentang konfigurasi atau komponen yang terdeteksi. Tidak berbahaya secara langsung. |
Scanner menggunakan tiga lapis validasi untuk menghindari laporan palsu:
Baseline fingerprint — Sebelum scan dimulai, scanner merekam tampilan halaman "tidak ada" pada site tersebut dengan mengakses URL yang dijamin tidak ada. Response ini dijadikan acuan. Jika response file yang dicek identik dengan baseline ini, file dianggap tidak ada meskipun server mengembalikan status 200 OK.
Content signature — Setiap jenis file memiliki sidik jari konten yang harus cocok. File .env harus mengandung keyword seperti APP_KEY= atau DB_HOST=. File SQL dump harus mengandung INSERT INTO atau CREATE TABLE. Tanpa signature yang cocok, file tidak dilaporkan.
WordPress soft-404 detection — WordPress sering mengembalikan status 200 OK untuk URL yang tidak ada karena semua request ditangani oleh index.php. Scanner mendeteksi ini dengan memeriksa konten seperti "Page not found" atau "Nothing Found" di dalam body response.
wp-audit/
│
├── wp_audit.py Entry point utama dan CLI
├── debug_scan.py Tool diagnostik untuk file yang tidak terdeteksi
├── generate_demo.py Generator laporan demonstrasi
├── requirements.txt Dependensi Python
│
└── modules/
│
├── utils/
│ ├── base_scanner.py Base class untuk semua modul scanner
│ ├── http_client.py HTTP client dengan anti false-positive
│ ├── reporter.py Generator laporan HTML dan JSON
│ └── logger.py Konfigurasi logging
│
├── core/ Pemeriksaan inti WordPress (10 modul)
│ ├── info_disclosure.py
│ ├── version_detection.py
│ ├── user_enumeration.py
│ ├── login_security.py
│ ├── xml_rpc.py
│ ├── rest_api.py
│ ├── file_exposure.py
│ ├── directory_listing.py
│ ├── ssl_tls.py
│ └── headers_security.py
│
├── plugins/
│ └── plugin_scanner.py 50+ plugin rentan dengan mapping CVE
│
├── themes/
│ └── theme_scanner.py 10 tema rentan
│
├── config/
│ └── config_scanner.py Konfigurasi WordPress
│
├── cve/
│ └── cve_scanner.py 34 WordPress core CVE
│
└── advanced/
├── backup_files.py Deteksi file backup
├── sensitive_files.py File sensitif
├── upload_check.py Keamanan direktori upload
└── database_exposure.py Ekspos antarmuka database
Semua modul mengikuti pola yang seragam sehingga mudah ditambah atau dihapus.
Langkah 1 — Buat file modul baru
# modules/core/modul_baru.py
from modules.utils.base_scanner import BaseScanner
class ModulBaru(BaseScanner):
MODULE_NAME = "Nama Modul"
def scan(self):
# Periksa file dengan validasi berlapis
result = self.http.check_file(
self.url('/path/yang-dicek'),
content_signatures=['kata_kunci_khas_file_ini'],
min_size=50
)
if result.exists:
self.add_finding(
title="Judul Temuan",
description="Penjelasan detail tentang risiko dan dampaknya.",
severity="high", # critical | high | medium | low | info
category="Nama Kategori",
evidence=f"HTTP {result.status} — {result.reason}",
recommendation="Langkah konkret untuk memperbaiki.",
cve="CVE-XXXX-XXXXX", # opsional
reference="https://...", # opsional
url=self.url('/path')
)
return self.findingsLangkah 2 — Daftarkan di wp_audit.py
from modules.core.modul_baru import ModulBaru
# Tambahkan ke list modules di dalam method run():
modules = [
...
(ModulBaru, "Nama Modul Baru"),
]Scanner otomatis menjalankan modul baru secara paralel tanpa perubahan lain.
Jalankan tool debug untuk melihat penyebab spesifiknya:
python debug_scan.py http://localhost/wordpress /.envPenyebab umum:
- Isi file tidak mengandung keyword yang dikenali scanner (misalnya file
.envberisi data non-standar) - Ukuran response mirip dengan baseline halaman 404 site (size diff <8%)
- WordPress mengembalikan halaman "Page Not Found" dengan status 200 OK
# Gunakan HTTP saja
python wp_audit.py http://127.0.0.1/wordpress
# Atau nonaktifkan verifikasi SSL
python wp_audit.py https://127.0.0.1/wordpress --no-ssl-verify# Tambah jumlah thread
python wp_audit.py https://example.com --threads 25
# Kurangi timeout untuk target yang lambat
python wp_audit.py https://example.com --timeout 5python wp_audit.py https://example.com --force# Pastikan semua dependensi terinstall
pip install -r requirements.txt
# Jika menggunakan Python yang berbeda
python3 -m pip install -r requirements.txtTool ini dikembangkan untuk keperluan audit keamanan yang sah. Pengguna sepenuhnya bertanggung jawab atas penggunaan tool ini. Pastikan selalu memiliki izin tertulis dari pemilik sistem sebelum melakukan scan.