パラメータを好きなものに書き換えて送ってくれるsWebMachineGunを使ってみたのでメモ   no comments

Posted at 7:04 pm in XSS

こんにちは。
毎日暑いですね。故郷を思い出します。

暑いですね

暑いですね

さて、日々Webの診断を行っておりますが、会社の近くに座ってる人がsWebMachineGunという便利なツールを作って公開されていたので使ってみました(導入方法とかは公開サイトの方をご覧ください)。
これは楽ができるかもということで診断の仕事でも使おうと思うのですが、どうにも忘れっぽいので備忘録代わりにメモ書きを残しておこうと思います。

まだざっくりとしか使ってないので間違い等あるかもしれません。そのときはお気軽にご指摘いただけると助かります。

●ざっくり何ができる?

いろいろパラメータを変更したHTTPリクエストを半自動的に発行して、結果を受け取ることが可能です。受け取った結果をいろいろ見て脆弱性発見の助けになるかもしれません。もちろんHTTPSにも対応していますよ。他にもいろいろできるみたいですがまだちょっとわからないのでもうちょっと使いこなしてからですね。

●基本的な使い方

とりあえずダブルクリックして起動するとツールが立ち上がって画面が開きますので、画面の上の方から説明を行います。
プロキシを併用する方が便利だと思うので、localhost:8080で立ち上げてるZAPを経由して使うことにします。

◇テキストボックス
左のテキストボックスにはURL、右にはポートを入れるけど、実は「Request」タブの方が優先されるみたいなので適当でいいみたいです。
(Host:の設定とかになるみたいだけどZAPは強制的に書き換えられるのでまあ)

◇ボタン
ボタンは全部で7つあるけど、とりあえずProxyとExecuteだけわかっていればいいのかも。

・Proxyボタン
ここでプロキシの設定を行います。
ラジオボタンの「Custom」を選んでHostを「127.0.0.1」Portを「8080」にして「OK」をクリックするとZAPを経由してリクエストが飛ぶことになるはずです。

・Authボタン
認証設定を行う(未実装?)

・Executeボタン
HTTPリクエストを実行します。

・Clearボタン
消去される
・Saveボタン
保存される
・Macroボタン
マクロ一覧を表示する
・Exitボタン
終了する

◇タブ
Requestタブ
ここにテキストボックスがあるので、ここにURLをコピペすればいいです。
URLの場合は「Execute」ボタンをクリックした時にGET HTTP/1.0で実行されます。

ZAPのログがあるならZAPからリクエストヘッダごとコピペすることもできます。ヘッダも全部引き継いでくれるのでこっちのやり方を使うことは多いと思います(Cookieとかあるしね)。
POSTリクエストの場合はリクエストヘッダとボディを両方コピペします。当たり前ですがヘッダとボディの間には改行を入れましょう。

ZAPからコピペ

ZAPからコピペ

ペーストする

ペーストする

・Insert/Add/Removeボタン
「Add」ボタンをクリックするとタブが開き、2つ目のリクエストを追加することができます。これはCSRF対策されてるサイトみたいなのを検査するときみたいな連続したリクエストを送る必要があるときに使えると思います。「Insert」ボタンをクリックすると前に追加します。追加したリクエストは「Remove」で削除できます。

◇Settingタブ
ここでRequestタブで設定したリクエストを発行したいURLの、送信パラメータを置き換える設定を行います。ZAPだと自分で検査文字列を設定して送信するのは面倒だからありがたいですね。

どんなことが行われるかというと、
http://bogus.jp/page?user=bogus&pass=passwd
みたいなURLのパラメータを変形させて
http://bogus.jp/page?user=”><script>alert(0)//></script>&pass=passwd
http://bogus.jp/page?user=bogus&pass=”><script>//alert(0)//></script>

みたいなリクエストを送ってくれるようになるわけです。
ZAPの動的スキャンと似たような感じですが、ZAPでは送信できる文字はポリシーごとに固定されているので(Fuzzerを使うやり方もある&ソースコード書き換えてビルドしなおせば変更はできるのですが)カスタムリクエストを送れるのが便利ですね。組織によっては検査文字列が決まっている場合もあるのでそれに対応できるのもありますね。

・UseReplaceチェックボックス
チェックを入れるとリクエストのパラメータを変換するようになります。とりあえずチェックするよね。

・置換文字列テキストボックス
置換文字列テキストボックスに置換用文字を入力して「Add」ボタンをクリックすると置換リストに追加されます。
Addボタンをクリックする前に右側のメニューバーから「完全置換」「前方追加」「後方追加」「文字追加」「名前の後方追加」が選択できるので好きなのを選べばいいです。
「UrlEncoded」にチェックを入れるとURLエンコードされた値を直接設定できます。「%0a」とか「%82」みたいなのを入れたいときに使うといいと思います。

その他に数字とか任意の位置に入れたいなど細かい設定はマクロとして設定することができます。使える項目は「Macro」ボタンをクリックしてみるといいでしょう。

例えば
http://bogus.jp/view.php?id=test
に対して
xss%s%cmd
を完全置換で設定すると
http://bogus.jp/view.php?id=xsstestcmd
というリクエストが送られることになります。

・メニュー項目
完全置換 そのまま置換
前方追加 元データの前に追加
後方追加 元データの後ろに追加
文字追加 元データに連続した文字を追加 a,5でaaaaaみたいな感じになる
名前の後方追加 変数名の方を変更する

・ボタン
メニュー下のボタンは以下のような機能になります。
まず「お勧め」ボタンをクリックして自分好みの設定に変更、追加してみるのが楽な気がします。

Add 追加する
Clear 全消去
ImportFile 設定をファイルに書き出す
お勧め 作者おすすめの設定が設定される

・UseNameチェックボックス
UseNameチェックボックスにチェックを入れると書き換えを行います。書き換えるために使うので普通付けますね。クエリストリングだけ書き換える、POSTメッセージだけ書き換える、Cookieを書き換えるという設定ができます。

下部のチェックボックスは以下のような設定になります。

・数値計算を行う
値に数値と思われるものがあった場合、計算(-1)を行います。SQLインジェクションの検査に使用できるのではないかと思われます。

・変数追加
リクエストの最後に&変数=パラメータという項目を付けたリクエストを送信します。

・何もしない
何もしません。

・UrlEncoded
すべてURLエンコードします。ZAPを通すとあんまり変わらないかもしれません。

・対象外変数名
CSRFのトークンなどのように書き換える必要のない変数をセットしておくと、そのパラメータの書き換えを行いません。

とりあえずお勧めを使う

とりあえずお勧めを使う

 

・実行

さすがに書き疲れてきたのでGeneralSettingタブとScript/Judgeタブについては省略して実行してみましょう。「Execute」ボタンをクリックするとパラメータを設定したリクエストがその変更するパラメータが送信されます。

結果は「Response」タブに表示されます。結果は送信した個々のリクエストとレスポンスとざっくりした結果分析が返ってきています。単純なXSSくらいは結果が表示されるようですが、簡易的なようです。結果は目視で確認するか、ZAPの結果や検索も活用するのがいいのではないでしょうか。

単純なXSSくらいならわかるかも

単純なXSSくらいならわかるかも

 ・最後に

ZAPでカスタムパラメータが送れないので自分で作ろうかと思ったのですが作らなくてよくなったのでぼんやりする時間が増えていいですね。

あと、自分の権限がある、または許可があるWebサイトに対してのみ使ってください。Webサイトのバグバウンティに使うのも大体の会社の規約にある「自動ツール使うな」に該当する気がするので微妙な気がします。今のところバグバウンティには使いませんよ(手動くらいのウェイトが入ればいいのでしょうけど)。

Happy Hacking!(一回書いてみたかった)

Written by bogus on 8月 5th, 2015