
블랙박스 정규표현식 퍼징 도구로, 입력 검증을 우회하고 정규화를 발견하며 웹 애플리케이션의 WAF를 회피하는 페이로드를 생성합니다.
REcollapse는 블랙박스 정규 표현식 퍼징을 도와주는 도구로, 웹 애플리케이션의 유효성 검사를 우회하고 정규화를 발견하는 데 사용됩니다.
또한 WAF 및 취약한 취약점 완화 조치를 우회하는 데 도움이 될 수 있습니다. 자세한 내용은 REcollapse 블로그 게시물을 확인하세요.
이 도구의 목표는 테스트를 위한 페이로드를 생성하는 것입니다. 실제 퍼징은 Burp (intruder), Caido (automate), ffuf 등과 같은 다른 도구를 사용하여 수행해야 합니다.
요구 사항: Python 3
pip3 install recollapse 또는 python3 setup.py install 또는 pip3 install .
Docker
docker build -t recollapse . 또는 docker pull 0xacb/recollapse
$ recollapse -h
usage: recollapse [-h] [-m MODES] [-e {1,2,3,4}] [-r RANGE] [-s SIZE] [-f FILE] [-an] [-mn MAXNORM] [-mt MAXTRUNC] [-nt] [-tt] [-ct]
[--html] [--version]
[input]
REcollapse는 블랙박스 정규 표현식 퍼징을 도와주는 도구로, 웹 애플리케이션의 유효성 검사를 우회하고 정규화를 발견하는 데 사용됩니다
positional arguments:
input 원래 입력
options:
-h, --help 이 도움말 메시지를 표시하고 종료합니다
-m, --modes, -p, --positions MODES
변형 모드. 예: 1,2,3,4,5,6,7 (기본값). 1: 시작, 2: 구분자, 3: 정규화, 4:
종료, 5: 정규식 메타문자, 6: 대소문자 변환, 7: 바이트 잘라내기
-e, --encoding {1,2,3,4}
1: URL 인코딩 형식 (기본값), 2: 유니코드 형식, 3: 원시 형식, 4: 이중 URL 인코딩 형식
-r, --range RANGE 퍼징을 위한 바이트 범위. 예: 0,0xff (기본값)
-s, --size SIZE 퍼징 바이트 수 (기본값: 1)
-f, --file FILE 파일에서 입력 읽기
-an, --alphanum 퍼징 범위에 영숫자 바이트 포함
-mn, --maxnorm MAXNORM
최대 정규화 수 (기본값: 3)
-mt, --maxtrunc MAXTRUNC
최대 잘라내기 수 (기본값: 3)
-nt, --normtable 정규화 테이블 출력
-tt, --trunctable 잘라내기 테이블 출력
-ct, --casetable 대소문자 테이블 출력
--html HTML 형식으로 테이블 출력
--version recollapse 버전 표시
입력 예시로 this_is.an_example을 고려해 보겠습니다.
모드
$this_is.an_examplethis$_$is$.$an$_$examplethis_is.an_example$.^$*+-?()[]{}\|를 대체합니다.인코딩
application/x-www-form-urlencoded 또는 쿼리/본문 매개변수에 사용할 URL 인코딩 형식: %22this_is.an_exampleapplication/json에 사용할 유니코드 형식: \u0022this_is.an_examplemultipart/form-data에 사용할 원시 형식: "this_is.an_example범위
퍼징을 위한 바이트 범위 지정: -r 1-127. -an 옵션을 제공하지 않으면 영숫자 문자가 제외됩니다.
크기
모드 1, 2, 4에 대한 퍼징 크기를 지정합니다. 기본 접근 방식은 한 바이트에 대해 가능한 모든 값을 퍼징하는 것입니다. 크기를 늘리면 더 많은 리소스를 소비하고 훨씬 더 많은 입력을 생성하지만, 새로운 우회를 찾을 수 있습니다.
파일
입력은 위치 인수, stdin 또는 -f 옵션을 통한 파일로 제공할 수 있습니다.
영숫자
기본적으로 영숫자 문자는 출력 생성에서 제외되며, 이는 일반적으로 응답 측면에서 흥미롭지 않습니다. -an 옵션을 사용하여 허용할 수 있습니다.
최대 정규화 수
모든 정규화 라이브러리가 동일한 동작을 하는 것은 아닙니다. 기본적으로 각 입력 인덱스에 대해 세 가지 정규화 가능성이 생성되며, 이는 일반적으로 충분합니다. 더 깊이 들어가려면 -mn 옵션을 사용하세요.
테이블
-nt 옵션을 사용하여 정규화 테이블을 표시하고, -ct 옵션을 사용하여 대소문자 테이블을 표시하며, -tt 옵션을 사용하여 잘라내기 테이블을 표시합니다. 또한 --html 옵션을 사용하여 테이블을 HTML 형식으로 출력할 수 있습니다.
$ recollapse -nt --html > normalization_table.html
$ recollapse -tt --html > truncation_table.html
$ recollapse -ct --html > case_table.html
명령줄 도구로 REcollapse 사용:
$ recollapse -e 1 -m 1,2,4 -r 10-11 https://legit.example.com
%0ahttps://legit.example.com
%0bhttps://legit.example.com
https%0a://legit.example.com
https%0b://legit.example.com
...
$ echo "[email protected]" | recollapse
%[email protected]
%[email protected]
...
$ echo "<svg/onload=alert(1)>" | recollapse | ffuf -w - -u "https://example.com/?param=FUZZ" -mc 200,403,500
라이브러리로 REcollapse 사용:
from recollapse import Recollapse
recollapse = Recollapse(modes=Recollapse.DEFAULT_MODES,
encoding=Recollapse.ENCODING_RAW)
variants = recollapse.generate("<script")
for variant in variants:
print(variant)
이 기술은 원래 BSidesLisbon 2022에서 발표되었습니다.
블로그 게시물: https://0xacb.com/2022/11/21/recollapse/
슬라이드:
동영상:
테이블:
감사
그리고
이 프로젝트는 교육적이고 윤리적인 테스트 목적으로만 제작되었습니다. 사전 상호 동의 없이 이 도구를 사용하여 대상을 공격하는 것은 불법입니다. 개발자는 어떠한 책임도 지지 않으며, 이 도구로 인한 오용이나 피해에 대해 책임을 지지 않습니다.