
Rust 기반 XSS 스캐너로, 컨텍스트 인식 페이로드 선택, WAF 탐지 및 우회, 크롤링, 블라인드 XSS 콜백, 정적 DOM 싱크 분석 기능을 제공합니다.
Rust로 작성된 고급 XSS 탐지 도구로, 컨텍스트 인식 페이로드 인텔리전스와 주입 범위를 결합합니다.
이 도구는 XSStrike와 XSSER에서 영감을 받았습니다. 페이로드는 다양한 출처에서 수집했습니다:
감사합니다 여러분, 멋지십니다 ❤️
경고: 본인이 소유하거나 명시적인 서면 테스트 승인을 받은 시스템에만 사용하십시오.
<title>, <textarea> 등) 탐지하고, 무작정 모든 페이로드를 발사하는 대신 해당 컨텍스트에 가장 적합한 페이로드를 선택합니다Referer, User-Agent, X-Forwarded-For, X-Real-IP 및 기타 헤더와 쿠키 값을 테스트합니다innerHTML, eval, document.write, location.href, jQuery .html() 및 기타 위험한 싱크를 소스 탐지와 함께 정적으로 검사합니다git clone https://github.com/fabian-affolter/xssearch
cd xssearch
nix-shell --run "cargo build --release"
# binary: target/release/xssearch
LTO와 심볼 제거를 적용한 릴리스 빌드:
nix-shell --argstr release true --run "$BUILD"
Rust 1.75 이상이 필요합니다.
cargo build --release
Nix 또는 NixOS 사용자를 위한 패키지가 제공됩니다. 최신 릴리스는 unstable 채널에만
있을 수 있다는 점을 유의하십시오.
nix-env -iA nixos.xssearch
xssearch [OPTIONS] <--url <URL> | --file <URLS_FILE>>
| 플래그 | 설명 |
|---|---|
-u, --url <URL> | 대상 URL. FUZZ를 사용하여 사용자 지정 주입 지점을 표시합니다 |
-f, --file <FILE> | 한 줄에 하나의 URL이 있는 파일 |
-d, --data <DATA> | POST 본문. FUZZ를 사용하여 주입 지점을 표시합니다 |
-H, --header <H> | 추가 요청 헤더, 반복 가능 |
--cookie <COOKIE> | 쿠키 문자열 |
--proxy <URL> | HTTP/HTTPS 프록시 |
--timeout <N> | 요청 타임아웃(초) (기본값: 10) |
--user-agent <UA> | 사용자 지정 User-Agent |
--follow-redirects | HTTP 리다이렉트를 따릅니다 |
--threads <N> | 동시 요청 수 (기본값: 2) |
--delay <MS> | 요청 간 지연(밀리초) |
--crawl | 대상에서 링크와 폼을 스파이더링합니다 |
--crawl-depth <N> | 크롤 깊이 (기본값: 3) |
--headers-inject | 일반적인 HTTP 헤더를 주입 지점으로 테스트합니다 |
--cookie-inject | 쿠키 값을 주입 지점으로 테스트합니다 |
--blind <URL> | 블라인드 XSS 콜백 URL |
--dom | 정적 DOM XSS 싱크 분석 |
--fuzz | 반사 컨텍스트와 관계없이 모든 페이로드를 발사합니다 |
--payload-set <SET> | all | html | js | attr | poly | dom | mxss | waf (기본값: all) |
--payloads-file <FILE> | 사용자 지정 페이로드 파일, 한 줄에 하나씩 |
--encode <LIST> | 쉼표로 구분된 인코딩: url,html,unicode,double,base64 |
--prefix <STR> | 모든 페이로드 앞에 문자열을 추가합니다 |
--suffix <STR> | 모든 페이로드 뒤에 문자열을 추가합니다 |
--waf-detect | 스캔 전에 WAF를 핑거프린팅합니다 |
--waf-bypass | 페이로드에 WAF 우회 변환을 적용합니다 |
--output-json <FILE> | 발견 사항을 JSON 파일에 기록합니다 |
--output-md <FILE> | 발견 사항을 Markdown 파일에 기록합니다 |
-v, --verbose | 상세 출력 (컨텍스트, 모든 프로브 표시) |
-V, --version | 버전을 출력하고 종료합니다 |
xssearch -u "https://example.com/search?q=test"
xssearch -u "https://example.com/login" -d "user=admin&pass=FUZZ"
xssearch -u "https://example.com/" --crawl --waf-detect --headers-inject -v
xssearch -u "https://example.com/?q=FUZZ" --waf-detect --waf-bypass --encode url,html
xssearch -u "https://example.com/contact" -d "msg=FUZZ" \
--blind "https://abc123.oast.fun/xssearch"
xssearch -u "https://example.com/app" --dom --no-banner
xssearch -u "https://example.com/?q=test" --output-json results.json
xssearch -u "https://example.com/?q=test" --output-md report.md
xssearch -f targets.txt --crawl --waf-detect --output-json results.json --output-md report.md
xssearch -u "https://example.com/?q=test" --proxy http://127.0.0.1:8080 -v
도구를 검증하는 가장 빠른 방법은 의도적으로 취약한 Python 서버를 로컬에서 실행하는 것입니다:
python3 - <<'EOF'
import http.server, urllib.parse
class H(http.server.BaseHTTPRequestHandler):
def log_message(self, *a): pass
def do_GET(self):
p = urllib.parse.urlparse(self.path)
q = urllib.parse.parse_qs(p.query)
val = q.get('q', [''])[0]
body = f'<html><body><p>Search: {val}</p></body></html>'.encode()
self.send_response(200)
self.send_header('Content-Type', 'text/html')
self.end_headers()
self.wfile.write(body)
http.server.HTTPServer(('127.0.0.1', 9999), H).serve_forever()
EOF
그런 다음 스캔합니다:
xssearch -u "http://127.0.0.1:9999/?q=test" -v
예상 출력: HTML 컨텍스트 페이로드와 함께 [Vuln] XSS in 'q'.
이 이미지들은 보안 도구 테스트를 목적으로 제작되었으며 실제 사용자 데이터를 포함하지 않습니다.
docker run -d -p 8080:80 vulnerables/web-dvwa
# Set security level to Low in the UI first
xssearch -u "http://localhost:8080/vulnerabilities/xss_r/?name=test" \
--cookie "PHPSESSID=<your-session>; security=low"
docker run -d -p 8081:8080 webgoat/goat-and-wolf
xssearch -u "http://localhost:8081/WebGoat/" --crawl --crawl-depth 2 -v
docker run -d -p 3000:3000 bkimminich/juice-shop
xssearch -u "http://localhost:3000/" --crawl --dom -v
docker run -d -p 8082:80 raesene/bwapp
# Activate bWAPP at http://localhost:8082/install.php first
xssearch -u "http://localhost:8082/xss_get.php?firstname=test&lastname=test" \
--cookie "PHPSESSID=<your-session>; security_level=0"
이 사이트들은 보안 도구 테스트를 위해 특별히 제공됩니다. 인증이나 설정이 필요하지 않습니다.
| 대상 | URL | XSS 진입점 |
|---|---|---|
| Acunetix 테스트 사이트 | http://testphp.vulnweb.com/ | search.php?test=, 아티스트 댓글, 검색 폼 |
| IBM Altoro Mutual | http://demo.testfire.net/ | 검색 파라미터, 피드백 폼 |
| HP WebInspect 데모 | http://zero.webappsecurity.com/ | 로그인 폼, 검색, 계정 필드 |
| Google Gruyere | https://google-gruyere.appspot.com/ | 스니펫, 프로필 필드 (인스턴스 URL 필요) |
검색 파라미터 (반사형 XSS):
xssearch -u "http://testphp.vulnweb.com/search.php?test=query" \
--waf-detect -v
헤더 주입을 포함한 전체 크롤:
xssearch -u "http://testphp.vulnweb.com/" \
--crawl --crawl-depth 3 \
--headers-inject \
--dom \
--output-json testphp-findings.json
검색 폼:
xssearch -u "http://demo.testfire.net/search.aspx?txtSearch=test" \
--waf-detect --fuzz -v
루트에서 크롤:
xssearch -u "http://zero.webappsecurity.com/" \
--crawl --crawl-depth 2 \
--waf-detect \
--output-json zero-findings.json
먼저 개인 인스턴스를 시작한 다음 스캔합니다:
# The instance URL is displayed after clicking "Start" on the Gruyere homepage
xssearch -u "https://google-gruyere.appspot.com/<instance-id>/feed.gtl" \
--dom --crawl -v
공개 대상은 간헐적으로 느리거나 오프라인일 수 있습니다. 요청이 타임아웃되면 --timeout 30을 사용하십시오.
터미널 출력은 색상으로 구분된 레이블을 사용합니다:
| 레이블 | 의미 |
|---|---|
[Target] | 스캔 중인 URL |
[WAF] | WAF 탐지 결과 |
[Crawl] | 크롤러 상태 |
[Param] | 테스트 중인 파라미터 |
[CTX] | 탐지된 반사 컨텍스트 |
[Vuln] | 확인된 발견 사항 |
[DOM] | 탐지된 DOM 싱크 |
[Blind] | 주입된 블라인드 페이로드 |
--output-json으로 기록되며, 발견 사항당 하나의 객체입니다: