
自動化されたWAFセキュリティテストツールで、SQLi、XSS、RCE、GraphQL injectionを含む15以上のペイロードカテゴリを使用して誤検知と未検知を検出します。Docker、JSON出力、カスタムペイロードをサポートしています。
WAF Bypass Toolは、定義済みおよびカスタマイズ可能なペイロードを使用して、WAFのFalse Positives(誤検知)およびFalse Negatives(見逃し)を分析するためのオープンソースツールです。攻撃者が行う前に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') - このオプションは、すべてのリクエストとともに送信するHTTP User-Agentを指定できます。ただし、ペイロードによって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つのリクエストを送信し、一方のゾーンと2番目のゾーンを交互にチェックします)。
ゾーンでは%RND%サフィックスを使用でき、6文字のランダムな英数字文字列を生成できます(例:param%RND=my_payloadまたはparam=%RND%またはA%RND%B)。
独自のペイロードを作成することができます。そのためには、'/payload/'フォルダ内に独自のフォルダを作成するか、既存のフォルダにペイロードを配置します(例:'/payload/XSS')。許可されるデータ形式はJSONです。
このディレクトリに配置されたAPIテストペイロードには、自動的にヘッダー'Content-Type: application/json'が追加されます。
このディレクトリにあるMFD(multipart/form-data)ペイロードの場合、BODY(必須)とBOUNDARY(オプション)を指定する必要があります。BOUNDARYが設定されていない場合は自動的に生成されます(この場合、BODYには追加データなしでペイロードのみを指定する必要があります('... Content-Disposition: form-data; ...'))。
BOUNDARYが指定されている場合、BODYの内容はRFCに従ってフォーマットする必要がありますが、これによりBODY内でBOUNDARYで区切られた複数のペイロードが可能になります。
このディレクトリでは他のゾーンも許可されています(例: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、またはFailedリクエストを再現するためのcURLコマンドを表示します。--json-formatオプションとは互換性がありません。