#!/usr/bin/env python3
"""
XSS Fuzzer - XSS Payload 模糊测试工具
支持:
- 反射型 XSS 检测
- 存储型 XSS 检测
- DOM 型 XSS 检测
- CSP 绕过测试
- 自定义 Payload
Usage:
python3 xss-fuzzer.py -u "http://target.com/search?q=test"
python3 xss-fuzzer.py -u "http://target.com/comment" -d "comment=test" -m POST
python3 xss-fuzzer.py -u "http://target.com" --dom-scan
授权边界:
- 仅用于自有资产、测试环境或已明确授权的目标
- 对公网资产执行验证时,应使用最小化回显验证和可审计测试记录
- 不面向无授权第三方网站或公共站点
"""
import argparse
import requests
import re
import urllib.parse
from typing import List, Dict, Tuple, Optional
import time
import sys
from pathlib import Path
SCRIPTS_DIR = Path(__file__).resolve().parents[2] / "scripts"
if str(SCRIPTS_DIR) not in sys.path:
sys.path.insert(0, str(SCRIPTS_DIR))
from tool_contract import ( # noqa: E402
add_common_args,
emit_report,
ensure_authorized,
make_report,
parse_cookie_string,
parse_headers,
write_evidence,
)
class Colors:
RED = "\033[91m"
GREEN = "\033[92m"
YELLOW = "\033[93m"
BLUE = "\033[94m"
CYAN = "\033[96m"
END = "\033[0m"
BOLD = "\033[1m"
class XSSFuzzer:
def __init__(self, timeout: int = 10):
self.timeout = timeout
self.session = requests.Session()
self.session.headers.update(
{
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
}
)
self.payloads = {
"basic": [
"",
"",
"",
"
",
"
",
"