
흔히 볼 수 있는 SVG 첨부 파일 피싱을 위한 SVG 분석 및 생성 도구
이 툴킷은 잠재적으로 악성인 SVG 파일을 분석하고 보안 메커니즘을 탐지하기 위한 특수 Python 도구들을 포함합니다.
이 툴킷은 네 가지 주요 도구로 구성됩니다:
패턴 기반 정적 분석 도구로, 악성 SVG 파일에서 난독화된 URL을 코드를 실행하지 않고 디코딩합니다. 초기 분석에 더 안전한 옵션입니다.
String.fromCharCode 패턴 디코딩# Analyze a single SVG file
python3 extract.py -i malicious.svg
# Verbose output showing decoded JavaScript
python3 extract.py -i malicious.svg -v
# Debug mode with detailed analysis steps
python3 extract.py -i malicious.svg -d
# Read from stdin
python3 extract.py < malicious.svg
String.fromCharCode(115,101,99,...) ("secretkey") 탐지parseInt 및 XOR 연산이 포함된 for 루프 식별data: URI에서 Base64 콘텐츠 추출 및 디코딩atob("base64") + variableName 패턴 처리DYNAMIC SVG URL EXTRACTOR
=========================================================
SVG #1 Results:
----------------------------------------
Obfuscation: XOR decoding (key length: 9)
Extracted URLs:
→ https://malicious.example.com/[email protected]
box-js를 사용하여 SVG 파일에 포함된 JavaScript를 추출하고 분석하는 정교한 동적 분석 도구입니다. 이 도구는 샌드박스 환경에서 JavaScript를 실행하며, 복잡한 난독화를 통해 구성된 경우에도 최종 완전한 URL을 추출하도록 설계되었습니다.
location, window.open, fetch, XHR, Image.src 등 모니터링# Required: box-js must be installed globally
npm install -g box-js
# Python requirements (optional)
pip install -r requirements.txt
# Basic analysis of a single SVG
python3 extract_dynamic.py -i malicious.svg
# Analyze with custom output directory
python3 extract_dynamic.py -i malicious.svg -o analysis_results
# Analyze directory of SVGs with extended timeout
python3 extract_dynamic.py -i svg_samples/ -t 60
# Keep temporary files for debugging
python3 extract_dynamic.py -i malicious.svg --keep-temp
# Save URL blocklist to file
python3 extract_dynamic.py -i malicious.svg --blocklist-out urls.txt
# Mask email addresses for privacy
python3 extract_dynamic.py -i malicious.svg --mask-emails
이 도구는 다음을 후킹하는 포괄적인 JavaScript 페이로드를 주입합니다:
location.href, location.assign(), location.replace()window.open(), 탐색 메서드fetch(), XMLHttpRequest.open()String.prototype.concat, 문자열 조작atob(), decodeURI(), unescape()eval(), Function(), setTimeout()다음을 자동으로 탐지하고 처리합니다:
=== Processing: malicious.svg ===
Wrote temp JS -> /tmp/boxjs_svg_ABC/test.boxed.js
Running box-js (timeout 30s) with sink hooks...
[+] box-js finished. Results in: boxjs_out/malicious.svg.boxjs_results
*** FINAL COMPLETE URLS FOUND ***:
→ https://evil.example.com/[email protected]
Emails found:
→ [email protected]
=== FINAL ANALYSIS SUMMARY ===
🎯 COMPLETE URLS EXTRACTED (1 total):
======================================================
→ https://evil.example.com/[email protected]
======================================================
리다이렉트 체인 전반에 걸쳐 Turnstile, CAPTCHA 시스템, 브라우저 확인 및 기타 보호 조치를 포함한 Cloudflare 보안 메커니즘을 탐지하기 위한 웹 정찰 도구입니다.
pip install requests
pip install brotli # Optional for brotli support
# Check single URL for Cloudflare protections
python3 cf_probe.py https://example.com
# Scan with JavaScript file analysis
python3 cf_probe.py https://example.com --scan-js
# Process multiple URLs from file
python3 cf_probe.py -i urls.txt
# Custom User-Agent and timeout
python3 cf_probe.py https://example.com -A "Custom-Agent" -t 30
# Disable TLS verification (for testing)
python3 cf_probe.py https://example.com --insecure
# Dump HTML/JS for analysis
python3 cf_probe.py https://example.com --dump analysis_dump/
data-sitekey 속성turnstile.render() JavaScript 호출turnstile.create() JavaScript 호출cf-turnstile CSS 클래스=== Redirect/Navigation Chain (3 steps) ===
[0] URL: https://example.com
Status: 301
Cloudflare Protection: YES (CF Headers)
CF Header: cf-ray: 123abc456def789
[1] URL: https://protected.example.com
Status: 200
Cloudflare Protection: YES (Turnstile, Custom CAPTCHA)
Turnstile Site key(s): 0x1AAA000000000000000
CAPTCHA Evidence: Click the computer to verify
=== Summary ===
Cloudflare Protection Detected: Turnstile with key(s): 0x1AAA000000000000000 | Custom CAPTCHA
분석 도구를 테스트하기 위해 다양한 인코딩 패턴으로 난독화된 SVG 파일을 생성합니다.
# Generate single pattern
python3 encoder.py -u "https://evil.com/c2" -p 1 -o test.svg
# Generate all patterns in directory
python3 encoder.py --random-all -o test_patterns/
# Custom email address
python3 encoder.py -u "https://evil.com" -e "[email protected]" -p 3 -o custom.svg
Function 생성자를 통한 16진수 인코딩 동적 실행Array.find() 실행을 사용한 문자 매핑$ python3 encoder.py --random-all -o test_suite/
Generated xor_proxy_enhanced: test_suite/pattern_01_xor_proxy_enhanced.svg
URL: https://r4nd0m.example.com/[email protected]
Generated hex_function: test_suite/pattern_02_hex_function.svg
URL: https://evil-site.org/[email protected]
[... 4 more patterns ...]
# Step 1: Generate test cases
python3 encoder.py --random-all -o test_cases/
# Step 2: Static analysis first (safer)
python3 extract.py -i test_cases/pattern_01_*.svg -v > static_results.txt
# Step 3: Dynamic analysis (in isolated environment)
python3 extract_dynamic.py -i test_cases/ -o dynamic_results/ --blocklist-out malicious_urls.txt
# Step 4: Verify Cloudflare protection on extracted URLs (if safe to do so)
python3 cf_probe.py -i malicious_urls.txt
# Clone or download the toolkit
cd svg_tools/
# Install Python dependencies
pip install -r requirements.txt
# Install box-js globally (for dynamic analysis)
npm install -g box-js
# Verify installation
python3 extract.py --help
python3 extract_dynamic.py --help
python3 cf_probe.py --help
python3 encoder.py --help