
PythonベースのHTTPリクエストスマグリングおよびデシンクテストツール。設定可能なミューテーションペイロードと自動スキャンを使用して、CL.TEおよびTE.CLの脆弱性を検出します。
______ _
/ _____) | |
( (____ ____ _ _ ____ ____| | _____ ____
\____ \| \| | | |/ _ |/ _ | || ___ |/ ___)
_____) ) | | | |_| ( (_| ( (_| | || ____| |
(______/|_|_|_|____/ \___ |\___ |\_)_____)_|
(_____(_____|
@defparam
HTTPリクエストスマグリング / デシンクテストツール(Python 3製)
James Kettle氏のHTTPデシンクに関する研究と手法に特に感謝します。
また、Smugglerのベータテストと、Nahamcon 2020での作業発表を許可してくれたBen Sadeghipour氏にも特に感謝します。
このツールは、誤検出や見逃しがないことを保証しません。変異がOKと報告されたとしても、デシンク問題が存在しないとは限らず、より重要なことに、ツールが潜在的なデシンク問題を示したとしても、それが確実に存在するとは限りません。スクリプトは、大規模エンティティ(例:Google/AWS/Yahoo/Akamaiなど)のリクエストプロセッサに遭遇し、誤検出を示す可能性があります。
単一ホスト:
python3 smuggler.py -u <URL>
ホスト一覧:
cat list_of_hosts.txt | python3 smuggler.py
usage: smuggler.py [-h] [-u URL] [-v VHOST] [-x] [-m METHOD] [-l LOG] [-q]
[-t TIMEOUT] [--no-color] [-c CONFIGFILE]
optional arguments:
-h, --help このヘルプメッセージを表示して終了
-u URL, --url URL エンドポイント付きターゲットURL
-v VHOST, --vhost VHOST
仮想ホストを指定
-x, --exit_early 最初の発見でスキャンを終了
-m METHOD, --method METHOD
使用するHTTPメソッド(例 GET, POST)デフォルト: POST
-l LOG, --log LOG ログファイルを指定
-q, --quiet サイレントモード。発見された問題のみをログ出力
-t TIMEOUT, --timeout TIMEOUT
ソケットタイムアウト値 デフォルト: 5
--no-color カラーコードを抑制
-c CONFIGFILE, --configfile CONFIGFILE
ペイロード設定ファイルのパス
Smugglerは最低限、-u/--url引数によるURL、またはstdin経由でパイプされたURLリストのいずれかを必要とします。URLがhttps://を指定している場合、SmugglerはSSL/TLSを使用してホスト:ポートに接続します。URLがhttp://を指定している場合、SSL/TLSは使用されません。ホストのみが指定された場合、スクリプトはデフォルトでhttps://を使用します。
-v/--vhost <host>を使用して、サーバーアドレスとは異なるHostヘッダーを指定します。
-x/--exit_earlyを使用して、潜在的な問題が見つかった時点で特定のサーバーのスキャンを終了します。パイプモードでは、Smugglerはリストの次のホストに進むだけです。
-m/--method <method>を使用して、POST以外のHTTP動詞(例 GET/PUT/PATCH/OPTIONS/CONNECT/TRACE/DELETE/HEADなど)を指定します。
-l/--log <file>を使用して、stdoutとファイルの両方に出力を書き込みます。
-q/--quietで冗長性を減らし、発見された問題のみをログ出力します。
-t/--timeout <value>を使用してソケットタイムアウトを指定します。値はソケットがハングしていると結論付けるのに十分高いが、テストを高速化するために十分低い値にする必要があります(デフォルト: 5)。
--no-colorを使用して、stdoutに出力されるカラーコードを抑制します(ログはデフォルトでカラーコードを含みません)。
-c/--configfile <configfile>を使用して、独自のSmuggler変異設定ファイルを指定します(デフォルト: default.py)。
設定ファイルは、smugglerの./configディレクトリに存在するPythonファイルです。これらのファイルは、HTTPリクエストの内容とテストする転送エンコーディングの変異を記述します。
以下はdefault.pyの内容例です:
def render_template(gadget):
RN = "\r\n"
p = Payload()
p.header = "__METHOD__ __ENDPOINT__?cb=__RANDOM__ HTTP/1.1" + RN
# p.header += "Transfer-Encoding: chunked" +RN
p.header += gadget + RN
p.header += "Host: __HOST__" + RN
p.header += "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36" + RN
p.header += "Content-type: application/x-www-form-urlencoded; charset=UTF-8" + RN
p.header += "Content-Length: __REPLACE_CL__" + RN
return p
mutations["nameprefix1"] = render_template(" Transfer-Encoding: chunked")
mutations["tabprefix1"] = render_template("Transfer-Encoding:\tchunked")
mutations["tabprefix2"] = render_template("Transfer-Encoding\t:\tchunked")
mutations["space1"] = render_template("Transfer-Encoding : chunked")
for i in [0x1,0x4,0x8,0x9,0xa,0xb,0xc,0xd,0x1F,0x20,0x7f,0xA0,0xFF]:
mutations["midspace-%02x"%i] = render_template("Transfer-Encoding:%cchunked"%(i))
mutations["postspace-%02x"%i] = render_template("Transfer-Encoding%c: chunked"%(i))
mutations["prespace-%02x"%i] = render_template("%cTransfer-Encoding: chunked"%(i))
mutations["endspace-%02x"%i] = render_template("Transfer-Encoding: chunked%c"%(i))
mutations["xprespace-%02x"%i] = render_template("X: X%cTransfer-Encoding: chunked"%(i))
mutations["endspacex-%02x"%i] = render_template("Transfer-Encoding: chunked%cX: X"%(i))
mutations["rxprespace-%02x"%i] = render_template("X: X\r%cTransfer-Encoding: chunked"%(i))
mutations["xnprespace-%02x"%i] = render_template("X: X%c\nTransfer-Encoding: chunked"%(i))
mutations["endspacerx-%02x"%i] = render_template("Transfer-Encoding: chunked\r%cX: X"%(i))
mutations["endspacexn-%02x"%i] = render_template("Transfer-Encoding: chunked%c\nX: X"%(i))
独自のカスタムヘッダーやユーザーエージェントを指定するための入力引数はまだありません。default.pyをベースに独自の設定ファイルを作成し、適宜変更することをお勧めします。
Smugglerには3つの設定ファイルが付属しています: default.py(高速)、doubles.py(ニッチ、低速)、exhaustive.py(非常に低速) default.pyは変異が少ないため最速です。
設定ファイルは、-c/--configfile <configfile> コマンドラインオプションで指定します。
Smugglerディレクトリ内にpayloadsディレクトリがあります。Smugglerが潜在的なCLTEまたはTECLデシンク問題を発見すると、問題のあるペイロードのバイナリテキストファイルを自動的にpayloadsディレクトリにダンプします。すべてのペイロードファイル名には、ホスト名、デシンクタイプ、変異タイプが注釈として付けられます。これらのペイロードを使用して、サーバーに直接netcatするか、他の分析ツールにインポートします。
デシンク問題を見つけた後は、ここにあるTurbo Intruderデシンクスクリプトを自由に使用してください: https://github.com/defparam/tiscripts
DesyncAttack_CLTE.py と DesyncAttack_TECL.py は、デシンク攻撃の準備に適したスクリプトです。
これらのスクリプトはMITライセンスの下で公開されています。 LICENSEを参照してください。