Skip to main content

Cara Menguji Proteksi WAF

Berikut cara praktisnya:


1. Cek log ModSecurity

Biasanya log ada di:

  • /var/log/nginx/error.log (jika di-merge dengan error log)

  • /var/log/modsec_audit.log (jika pakai SecAuditLog)

Kalau rule aktif, setiap request yang diblok/diinspeksi akan muncul di log tersebut.


2. Uji dengan payload umum WAF

βœ… Cara benar menjalankanΒ curl test SQLi:

  1. Gunakan tanda kutip ganda, dan escape ' dengan %27 (URL encoding):

curl "https://waf.widianto.org/?id=1%27%20OR%20%271%27=%271"

πŸ‘‰ %27 = '
πŸ‘‰ %20 = spasi

  1. Atau pakai single quote di luar, ganti internal ' jadi '"'"':

curl 'https://waf.widianto.org/?id=1'"'"' OR '"'"'1'"'"'='"'"'1'

(Jelek tapi works di bash πŸ˜…)

  1. Lebih simpel, gunakan --data-urlencode kalau test via POST:

curl -G --data-urlencode "id=1' OR '1'='1" "https://waf.widianto.org/"

πŸ”Ž Ekspektasi hasil

  • Kalau WAF aktif (CRS 942xxx rules), kamu akan dapat 403 Forbidden.

  • Di log (audit.log), rule yang kemungkinan terpicu:

    • 942100 β†’ SQL Injection Attack Detected via libinjection

    • 942110 β†’ Detects SQL meta-characters like '

    • 949110 β†’ Inbound anomaly score exceeded


πŸ‘‰ Jika WAF aktif, harusnya request ini di-block (403 Forbidden).

XSS test

curl "http://yourdomain.com/?q=<script>alert(1)</script>"

πŸ‘‰ WAF akan mendeteksi pola <script> dan blok request.

LFI test (Local File Inclusion)

curl "http://yourdomain.com/?file=../../etc/passwd"

3. Gunakan SecRuleEngine DetectionOnly (opsional)

Kalau kamu masih mau mode monitoring, aktifkan DetectionOnly:

SecRuleEngine DetectionOnly

Nanti request tidak diblok, tapi akan tetap tercatat di log. Cocok untuk uji awal.


4. Cek response HTTP

Kalau proteksi aktif, biasanya:

  • Akan dapat 403 Forbidden dari NGINX.

  • Bisa juga keluar halaman error custom tergantung konfigurasi.


5. Tes bypass rule

Untuk memastikan WAF tidak terlalu ketat:

  • Akses normal (misalnya curl http://yourdomain.com/) harus sukses (200 OK).

  • Payload berbahaya harus ditolak (403/blocked).


πŸ‘‰ Jadi langkah termudah:

  1. Coba akses normal β†’ pastikan tetap bisa.

  2. Coba akses ?id=1' OR '1'='1 β†’ pastikan kena blok.

  3. Cek modsec_audit.log untuk bukti rule bekerja.