Burp で HTTP ヘッダ内の CSRF トークンもマクロ(Session Handling Rules)に任せたいとき

Burp で HTTP ヘッダ内のパラメータを書き換えたい時ってありますよね。XHR で X-CSRF-Token: hogehogehoge.... みたいなのが飛んでると、Burp の Session Handling Rules や Macro ではうまいこと扱えません(と、思っています。ベストプラクティスがあれば知りたい)。

Burp 用の Extender を書いた

Burp-X-CSRF-Token という repository に今回書いたものがあります。 もう Swing 一生使いたくない。

何ができるか

とりあえず IHttpListener でレスポンスを眺めて、Burp 上で定義してあげた正規表現にマッチするのを拾って保存しておきます。あとは同じく事前に定義した Scope の中の URL にリクエストが投げられる時に、その HTTP ヘッダ中にトークンを投げ込んでくれます。

設定例

他の対処例

mitmproxy を間に挟んでやれば、だいたいその他も上手くやれます。たとえば PHP 製のフレームワーク 「Phalcon」 などでは CSRF トークンの name も value もランダマイズされています。これだと Burp では扱いにくい。

そういうときは mitmproxy を間に挟んでやるとうまくいきます。けど Burp 上でやれるなら Burp で済ませたいよねえ、なんていう気持ちが芽生えたので、今回はザッと書きました。

まとめ

Burp 大好き。

Written on February 2, 2018