Skip to main content

Script Untuk Test Fungsi WAF

Sip bro! Berikut versi lengkap dan diperbarui dari waf-test.sh yang:

  • Memisahkan query string dan path agar URL encoding benar.

  • Bisa memilih endpoint (default /).

  • Mengirim beberapa payload: XSS, SQLi, LFI, Command Injection, Remote File.

  • Menyimpan hasil ringkas ke CSV (waf-test-results.csv).


#!/bin/bash
# waf-test.sh
# Test WAF protections (XSS, SQLi, LFI, Command Injection, Remote File) terhadap target URL
# Hasil disimpan di waf-test-results.csv

if [ -z "$1" ]; then
    echo "Usage: $0 <target_url> [endpoint]"
    echo "Example: $0 https://waf.widianto.org /cerebro/"
    exit 1
fi

TARGET="$1"
ENDPOINT="${2:-/}"   # default endpoint /

OUTPUT_FILE="waf-test-results.csv"
echo "Target,Endpoint,Payload,EncodedURL,HTTP_Code" > "$OUTPUT_FILE"

# Array payloads
declare -A PAYLOADS
PAYLOADS["XSS"]="?q=<script>alert(1)</script>"
PAYLOADS["SQLi"]="?id=1' OR '1'='1"
PAYLOADS["LFI"]="?file=../../etc/passwd"
PAYLOADS["Command Injection"]="?cmd=ls"
PAYLOADS["Remote File"]="?url=http://evil.com/malicious.txt"

echo "Testing WAF on target: $TARGET$ENDPOINT"
echo "-------------------------------------"

for NAME in "${!PAYLOADS[@]}"; do
    RAW_PAYLOAD="${PAYLOADS[$NAME]}"

    # Pisahkan query string
    if [[ "$RAW_PAYLOAD" == \?* ]]; then
        QUERY="${RAW_PAYLOAD:1}"  # hapus '?'
        # Encode query string tapi jangan encode '=' dan '&'
        ENCODED_QUERY=$(python3 -c "import urllib.parse; print(urllib.parse.quote('''$QUERY''', safe='=&'))")
        FULL_URL="${TARGET}${ENDPOINT}?${ENCODED_QUERY}"
    else
        FULL_URL="${TARGET}${ENDPOINT}${RAW_PAYLOAD}"
    fi

    echo "[$NAME] Testing: $FULL_URL"
    HTTP_CODE=$(curl -o /dev/null -s -w "%{http_code}" "$FULL_URL")
    echo "HTTP Response Code: $HTTP_CODE"
    echo "-------------------------------------"

    # Simpan ke CSV
    echo "$TARGET,$ENDPOINT,$NAME,$FULL_URL,$HTTP_CODE" >> "$OUTPUT_FILE"
done

echo "Testing selesai. Hasil disimpan di $OUTPUT_FILE"

🔹 Cara pakai

  1. Simpan script sebagai waf-test.sh

  2. Bikin executable:

chmod +x waf-test.sh
  1. Jalankan test dengan endpoint yang valid di server:

./waf-test.sh https://waf.widianto.org /cerebro/
  • Jika endpoint tidak dikirim, default / digunakan.

  1. Lihat hasil ringkas di CSV:

cat waf-test-results.csv

🔹 Catatan penting

  • Pastikan endpoint yang dipilih ada (misal /cerebro/, /index.php).

  • WAF akan memblok request 403 jika rules trigger.

  • Jika HTTP 200, berarti request lolos WAF (atau endpoint tidak memicu rule).

  • HTTP 404 → endpoint tidak ada, payload tidak sempat diperiksa WAF.


Kalau mau, saya bisa buat versi batch yang otomatis baca daftar domain dari file dan nge-test semua target, hasil CSV-nya digabung, sehingga tinggal satu kali jalankan untuk semua vhost.

Apakah mau langsung saya buatkan versi batch itu juga?