
이 저장소는 Django 4.0.1에서 XSS 공격을 재현합니다 (CVE-2022-22818 참조)
Linux에서만 작동합니다. Windows에서는 종속성 중 하나가 오류를 일으킬 수 있습니다.
실행 전에 다음 패키지를 설치해야 합니다:
pip install -r requirements.txt
python -m django --version # pip install django==4.0.1
grammarinator-generate --version # pip install git+https://github.com/renatahodovan/grammarinator.git#egg=grammarinator
touch grammars/fuzzer/HTMLGenerator.py # Создаём пустой файл, который будет наполнен генератом
grammarinator-process grammars/HTMLLexer.g4 grammars/HTMLParser.g4 -o grammars/fuzzer # Заполнение файла
python runfuzz.py
Django의 한 파일을 패치해야 합니다. 템플릿 엔진 오류를 일으켜 퍼징 프로세스를 중단시킬 수 있기 때문입니다.
--- /home/alex/.local/lib/python3.9/site-packages/django/template/defaultfilters.py 2023-04-26 12:47:44.387239988 +0300
+++ /home/alex/.local/lib/python3.9/site-packages/django/template/defaultfilters-fixed.py 2023-04-26 12:47:33.931039539 +0300
@@ -613,7 +613,10 @@
@register.filter(is_safe=True)
def random(value):
"""Return a random item from the list."""
- return random_module.choice(value)
+ try:
+ return random_module.choice(value)
+ except IndexError:
+ return ''
@register.filter("slice", is_safe=True)
venv를 사용하는 경우 경로는 다음과 같습니다: venv/lib/python3.9/site-packages/django/template/defaultfilters.py
패키지를 시스템에 설치한 경우 경로: $HOME/.local/lib/python3.9/site-packages/django/template/defaultfilters.py
파일 안으로 들어가서 random 태그 정의를 찾아 try-catch 블록으로 감싸야 합니다.
이렇게 하지 않으면 퍼저가 이 버그를 발견했을 때 작업을 종료합니다.
| 버그 | 일반 퍼저 | 고정 가중치 모드 | 쿨다운 0.5 |
|---|---|---|---|
| debug | 20 | 20 | |
| join-escape-filter | 1000+ | 560/3520(88s)/40/740(28s)/1800(51s) | 20/900/220/760(530s) |