
자동화된 WAF 보안 테스트 도구로, SQLi, XSS, RCE, GraphQL 인젝션 등 15개 이상의 페이로드 카테고리를 사용하여 거짓 양성 및 거짓 음성을 탐지합니다. Docker, JSON 출력 및 사용자 정의 페이로드를 지원합니다.
WAF Bypass Tool은 사전 정의된 사용자 정의 가능한 페이로드를 사용하여 모든 WAF의 False Positive 및 False Negative에 대한 보안을 분석하는 오픈 소스 도구입니다. 공격자가 하기 전에 WAF를 확인하세요. WAF Bypass Tool은 커뮤니티의 참여로 Nemesida WAF 팀이 개발했습니다.

불법적인 목적으로 사용하는 것을 금지합니다. 법을 위반하지 마십시오. 이 소프트웨어 사용과 관련된 가능한 위험에 대해 당사는 책임을 지지 않습니다.
최신 waf-bypass는 항상 Docker Hub에서 사용할 수 있습니다. 다음 명령어로 쉽게 가져올 수 있습니다:
# docker pull nemesida/waf-bypass # docker run nemesida/waf-bypass --host='example.com'
# pipx install git+https://github.com/nemesida-waf/waf-bypass.git # <pipx bin dir>/waf-bypass
# git clone https://github.com/nemesida-waf/waf_bypass.git /opt/waf-bypass/ # python3 -m pip install -r /opt/waf-bypass/requirements.txt # python3 /opt/waf-bypass/main.py --host='example.com'
'--proxy' (--proxy='http://proxy.example.com:3128') - 호스트 대신 연결할 위치를 지정할 수 있는 옵션입니다.
'--header' (--header 'Authorization: Basic YWRtaW46YWRtaW4=' --header 'X-TOKEN: ABCDEF') - 모든 요청과 함께 보낼 HTTP 헤더를 지정할 수 있는 옵션입니다 (예: 인증용). 여러 번 사용할 수 있습니다.
'--user-agent' (--user-agent 'MyUserAgent 1/1') - 페이로드에 의해 User-Agent가 설정된 경우를 제외하고, 모든 요청과 함께 보낼 HTTP User-Agent를 지정할 수 있는 옵션입니다 ("USER-AGENT").
'--block-code' (--block-code='403' --block-code='222') - WAF가 차단될 때 예상되는 HTTP 상태 코드를 지정할 수 있는 옵션입니다. (기본값은 403). 여러 번 사용할 수 있습니다.
() - 병렬 스캔 스레드 수를 지정할 수 있는 옵션입니다 (기본값은 ).
JSON 출력 명세 예시:
{
"TARGET": "https://example.com", // defined by --host option
"PROXY": {}, // defined by --proxy option
"HEADERS": { // defined by --header option
"User-Agent": ""
},
"BLOCK-CODE": [ // defined by --block-code option
...
],
"THREADS": 50, // defined by --threads option
"TIMEOUT": 30, // defined by --timeout option
"EXCLUDE-DIR": [ // defined by --exclude-dir option
...
],
"FAILED": { // requests with failed processing status
"MFD/7.json": {
"BODY": "WBHTTPSConnectionPool(host='example.com', port=443): Read timed out. (read timeout=1)"
},
...
},
"PASSED": { // passed requests
"UWA/3.json": {
"URL": "403 RESPONSE CODE"
},
...
},
"FALSED": { // requests with false positive processing status
...
},
"BYPASSED": { // requests with false negative processing status
"UWA/26.json": {
"URL": "200 RESPONSE CODE"
},
...
},
"TestRequest": { // test requests with processing status, exclude passed
"FAILED": {},
"FALSED": {
"UWA/3.json": {
"URL": "403 RESPONSE CODE"
},
...
}
},
"CURL": { // cURL command to reproduce false positive and false negative requests
"FALSED": {},
"BYPASSED": {
"UWA/26.json": {
"URL": "curl -X GET -H 'Accept: */*' -H 'Accept-Encoding: gzip, deflate' -H 'Connection: keep-alive' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36' 'https://example.com/do.php#.png'"
},
...
}
}
}
목적에 따라 페이로드는 해당 폴더에 위치합니다:
페이로드를 작성할 때 다음 영역, 메서드 및 옵션이 사용됩니다:
Base64, HTML-ENTITY, UTF-16). 여러 값은 공백으로 구분하여 표시합니다 (예: Base64 UTF-16). ARGS, BODY, COOKIE 및 HEADER 영역에만 적용 가능합니다. API 및 MFD 디렉터리의 페이로드에는 적용되지 않습니다. JSON 옵션과 호환되지 않습니다.아래 설명된 몇 가지 경우를 제외하고, 영역은 서로 독립적이며 개별적으로 테스트됩니다. (즉, 2개의 영역이 지정되면 스크립트는 2개의 요청을 보내며, 하나와 두 번째 영역을 번갈아 확인합니다.)
영역에는 %RND% 접미사를 사용할 수 있으며, 이를 통해 6자리 임의의 문자열(영문자와 숫자)을 생성할 수 있습니다. (예: param%RND=my_payload 또는 param=%RND% OR A%RND%B)
자신만의 페이로드를 만들 수 있습니다. 이를 위해 '/payload/' 폴더에 자신의 폴더를 생성하거나 기존 폴더에 페이로드를 배치하세요 (예: '/payload/XSS'). 허용되는 데이터 형식은 JSON입니다.
이 디렉터리에 있는 API 테스트 페이로드에는 자동으로 'Content-Type: application/json' 헤더가 추가됩니다.
이 디렉터리에 있는 MFD(multipart/form-data) 페이로드의 경우 BODY(필수)와 BOUNDARY(선택 사항)를 지정해야 합니다. BOUNDARY가 설정되지 않은 경우 자동으로 생성됩니다 (이 경우 추가 데이터 없이 ('... Content-Disposition: form-data; ...') BODY에 페이로드만 지정하면 됩니다).
BOUNDARY가 지정된 경우 BODY의 내용은 RFC에 따라 형식화되어야 하지만, 이를 통해 BOUNDARY로 구분된 BODY 내 여러 페이로드를 사용할 수 있습니다.
이 디렉터리에서는 다른 영역도 허용됩니다 (예: URL, ARGS 등). 영역과 관계없이 'Content-Type: multipart/form-data; boundary=...' 헤더가 모든 요청에 추가됩니다.
'--threads'--threads=1510'--timeout' (--timeout=10) - 요청 처리 제한 시간(초)을 지정할 수 있는 옵션입니다. (기본값은 30).
'--exclude-dir' - 페이로드 디렉터리를 제외합니다 (--exclude-dir='SQLi,XSS').
'--json-format' - 작업 결과를 JSON 형식으로 표시할 수 있는 옵션입니다 (보안 플랫폼과 도구를 통합하는 데 유용). 이 옵션을 지정하지 않으면 출력은 표 형식(기본 형식)으로 표시됩니다.
'--details' - False Positive 및 False Negative 페이로드를 표시합니다. --json-format 옵션과 호환되지 않습니다.
'--no-progress' - 진행률 표시줄을 표시하지 않습니다.
'--curl-replay' - False Positive, False Negative 또는 실패한 요청을 재현하는 cURL 명령어를 표시합니다. --json-format 옵션과 호환되지 않습니다.