
취약한 Flask/lxml 파서를 사용한 SVG 업로드를 통해 XXE를 시연하고, 임의 파일 읽기, SSRF, 서비스 거부(DoS) 테스트를 위한 익스플로잇 스크립트를 포함합니다.
# xxe_upload_server.py - Uploads SVG, renders with lxml resolving entities
from flask import Flask, request
from lxml import etree
app = Flask(__name__)
@app.route('/upload', methods=['POST'])
def upload_svg():
svg_data = request.data
# Vulnerable: parses with entity resolution enabled
parser = etree.XMLParser(resolve_entities=True, no_network=False)
doc = etree.fromstring(svg_data, parser)
# Extract something from SVG
return etree.tostring(doc)
if __name__ == '__main__':
app.run(port=5000)
웹 애플리케이션이 SVG 이미지 업로드를 허용하고, 외부 엔티티 해석이 활성화된 취약한 XML 파서로 이를 파싱합니다. 공격자는 XXE 페이로드를 삽입하여 로컬 파일을 읽거나, SSRF를 수행하거나, 서비스 거부(DoS)를 유발할 수 있습니다.
resolve_entities=True 및 네트워크 접근으로 구성되어 외부 엔티티의 확장을 허용합니다.pip install flask lxml
python xxe_upload_server.py
python exploit_xxe_svg.py