Skip to content

tanzz1337/WPSec-Audit

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 

Repository files navigation

image # 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.


Screenshot (236) Screenshot (237)

Daftar Isi

  1. Tentang Tool Ini
  2. Perbedaan Black Box dan Grey Box
  3. Persyaratan Sistem
  4. Instalasi
  5. Cara Penggunaan
  6. Opsi dan Parameter
  7. Modul Pemeriksaan
  8. Memahami Hasil Scan
  9. Struktur Direktori
  10. Menambah Modul Baru
  11. Troubleshooting

Tentang Tool Ini

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

Perbedaan Black Box dan Grey Box

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

Persyaratan Sistem

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

Instalasi

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.txt

Langkah 3 — Verifikasi instalasi

python wp_audit.py --help

Cara Penggunaan

Scan dasar

python wp_audit.py https://example.com

Localhost dan development

# 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.local

Scanner otomatis melakukan fallback dari HTTPS ke HTTP jika koneksi SSL gagal, sehingga https://localhost pun akan tetap berjalan.

Menyimpan laporan

# 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 dengan konfigurasi lanjutan

# 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 --force

Debug file yang tidak terdeteksi

Jika 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.bak

Tool ini menjelaskan langkah per langkah mengapa scanner menerima atau menolak sebuah URL.

Generate laporan contoh

python generate_demo.py

Membuat file wp_audit_demo_report.html berisi 47 temuan fiktif untuk melihat tampilan dashboard.


Opsi dan Parameter

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

Modul Pemeriksaan

Scanner terdiri dari 18 modul yang berjalan secara paralel menggunakan thread pool.

Modul Inti — modules/core/

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).


Modul Plugin dan Tema

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.


Modul Konfigurasi dan CVE

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.


Modul Lanjutan — modules/advanced/

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.


Memahami Hasil Scan

Sistem Penilaian

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.

Pengurangan Skor

Severity Pengurangan per Temuan
Critical -25 poin
High -15 poin
Medium -7 poin
Low -3 poin
Info 0 poin

Level Severity

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.

Tentang Anti False Positive

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.


Struktur Direktori

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

Menambah Modul Baru

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.findings

Langkah 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.


Troubleshooting

File yang seharusnya ada tidak terdeteksi

Jalankan tool debug untuk melihat penyebab spesifiknya:

python debug_scan.py http://localhost/wordpress /.env

Penyebab umum:

  • Isi file tidak mengandung keyword yang dikenali scanner (misalnya file .env berisi data non-standar)
  • Ukuran response mirip dengan baseline halaman 404 site (size diff <8%)
  • WordPress mengembalikan halaman "Page Not Found" dengan status 200 OK

Koneksi SSL gagal di localhost

# 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

Scan terlalu lambat

# 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 5

WordPress tidak terdeteksi otomatis

python wp_audit.py https://example.com --force

Error saat import modul

# Pastikan semua dependensi terinstall
pip install -r requirements.txt

# Jika menggunakan Python yang berbeda
python3 -m pip install -r requirements.txt

Lisensi

Tool 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.

About

WP Sec Audit merupakan tools yang dibuat untuk memudahkan audit keamanan pada website berbasis CMS wordpress,efisien dan mudah digunakan untuk kalanagan sysAdmin,Administrator bahkan seorang Pentester

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages