とある診断員の備忘録スマートフォン用の表示で見るとある診断員の備忘録この広告は、90日以上更新していないブログに表示しています。https://int21h.jp/tools/ViddlerProxy/今回は巷(ごく一部かな?w)で話題のこの脆弱なWAF達で遊んでみたら非常に面白かったので、このブログでちょっとご紹介したいと思います。Firewall)は、Webサイトの脆弱性を悪用した攻撃から、Webサイトを保護するためのセキュリティ対策の一つです。通常は守りたいWebサイトの通信経路上の前面に配置するような構成をとります。Webサイトに脆弱性が存在したとしても、前面のWAFにて攻撃をブロックできれば、Webサイトは攻撃を受けないため、導入することでセキュリティレベルの向上が期待できるわけです。はせがわようすけさんが考案した脆弱なWAFについては上記とは全く真逆のコンセプトのもので、このWAFを経由してアクセスすることで、安全な作りのWebサイトであっても、脆弱なWebサイトに早変わりしてしまうというものになります。この脆弱なWAFを使うと、実際どんなことになるのか見てみましょう。対象のWebサイトとして分かりやすいように適当なWordPressのサイトを用意してみました。適当なWordPressサイトこのWordpressの検索フォームに「"><script>alert("XSS")</script>」のようなスクリプトタグを入力した場合には、遷移後の画面ではXSSの対策のため入力値がHTMLエスケープされた状態にて出力されます。そのため当然スクリプトは動作しません。スクリプトタグを挿入した結果(そのままアクセスした場合)結果のソース(そのままアクセスした場合)では、脆弱なWAFを経由した状態で、このサイトに同様の入力値を送信した場合にはどうなるでしょうか。スクリプトタグを挿入した結果(脆弱なWAFを経由した場合)結果のソース(脆弱なWAFを経由した場合)なんと、先ほどは何も起こらなかったWebサイトにて、XSSの脆弱性が発現し、alertが上がっています。ソースを見ると先ほどはHTMLエスケープされていたはずの値が、入力されたスクリプトタグの値をそのまま出力されている状態になっていることが確認できます。お分かりですよね?途中に挟まっている脆弱なWAFが、HTMLエスケープした値をわざわざHTMLエスケープ前の状態に変換してユーザ側に返しているのです。これによって本来はちゃんとXSS対策されているサイトにもかかわらず、このWAFを経由することで、バンバンXSSが発現してしまう状態になってしまうわけです。このように入力した値に応じて、いかにも脆弱性が存在するような挙動を返すことで、本来は安全なWebサイトなのにもかかわらず、ユーザからは脆弱性が存在するサイトに見えさせてしまうものが脆弱なWAFなわけです。面白いですよね!Vurpをためしてみたということで、はせがわようすけさんが公開されたVurpを早速試してみました。VurpはNode.jsにて作成されているプログラムで、リバースプロキシとして動作をします。実行にはNode.jsの実行環境といくつかモジュールのインストールが必要なようです。7では以下の手順で実行できました。main.jsreadmeに詳しく記載されていますが、基本的には「config.js」というコンフィグファイルを編集して、Vurpを起動しているホストのURL、対象とするWebサイトのURL、脆弱性を発現する箇所の情報(URLやパラメータなど)を指定してあげる必要があります。https://github.com/hasegawayosuke/vurp/blob/master/readme.mdコンフィグ設定後に指定したVurpを起動しているホストのURLにアクセスすれば利用できます。現時点では以下の脆弱性に対応しているようです。任意ページへのクロスサイトスクリプティングの埋め込み推測可能なセッションIDへの振り替えOSコマンドインジェクション先ほどのようにパラメータを指定することで様々な箇所でXSSを実行できるのが面白いです。XSS以外にも、OSコマンドインジェクションに対応されていたのに興味を持って、色々試していたのですが、入力したOSコマンドがVurpが動作しているホスト上で実行されるというものでした。10」とかを入力した場合でも速攻でレスポンスが返ってきたため、一瞬「アレ?」となったのですが、現時点ですと、挿入したOSコマンドの処理結果を含まずに、そのまますぐに対象サイトのレスポンスを返す仕様のようです。WAF側のプロセスを確認したらちゃんと挿入したOSコマンドは実行されていました。連続アクセスしたので沢山sleepコマンドが実行されていますwVurpが動作するホスト側でsleepコマンドが実行されているViddlerProxyをためしてみたつづいてVurpにインスパイアされて、山崎圭吾さんが公開した「ViddlerProxy」も試してみました。4.5が必要とのことです。Vurpと同様にリバースプロキシとして動作をするようです。現時点で、対応している脆弱性項目は以下のようです。ListingこちらはVurpの脆弱性項目に追加して、さらにいくつか脆弱性項目に対応されているようですね。このProxyはHTTPS通信にも対応しています。ダウンロードしてきたzipファイルを解凍後にViddlerProxy.exeを実行すると以下のようなGUIが立ち上がります。Serverに対象とするWebサイトのURLとポート番号を入力してListensボタンを押すだけです。hostsも自動的に書き換えてくれるらしく「http://viddler-vulnerable.example.jp」に自動的に遷移します。非常にお手軽ですね!脆弱性のパラメータなどに関する設定は「settings」タブで指定するようです。このViddlerProxyはSQLインジェクションに対応しており、入力するSQL構文の内容による応答差分なども再現してくれています。以下のようなパラメータ値を送信すると以下のような応答結果になりました。ボディが空の200応答パラメータ値の型(文字列型、数値型)も指定できるようです。ディレクトリトラバーサルではフォルダの中に配置されている、「root」のディレクトリ以下のファイルを表示させる仕組みになっているみたいですね。Windows環境においても適切なファイルパスを渡せば「/etc/passwd」を表示させることも可能となっています。OSコマンドインジェクションはViddlerProxyを実行しているWindowsホスト側でコマンドが実行され、コマンド実行結果もレスポンスに反映されるようですね。busyboxを利用することでWindows環境にて、Linuxコマンドも実行できるようにされているようです。以下のような感じでコマンドを実行できました。-a;’その他にも、強制的にPUT/DELETEメソッドを有効化させて、実際に使えてファイルを置いたり消したりすることなどができましたし、/icons/フォルダを指定するれば中身がちゃんと表示されるようになっていたり、色々な仕掛けが面白かったですwまとめ脆弱なWAF達と戯れて面白かったですw脆弱性が存在するサイトを自分で実装とか構築することも色々勉強になると思いますが、とりあえずまずお手軽にWebアプリの脆弱性を体験するのであれば、非常にもってこいなツールなのではないでしょうか。あとは、脆弱性によってはHTTPヘッダインジェクションみたいにフレームワークやミドルウェア側で対策されているため、脆弱性を作りこむのがちょっと面倒くさいものとかもあったりしますので、そういうのを再現する場合にはこのような形式の方が、お手軽なのかもしれないですね。疑似的に脆弱性を再現しているので、ハニーポットなどにも使えるのではないかなという印象を持ちました。Connect始まりました。久々にブログを投稿しますー。Shopを触ってみた!月別アーカイブはてなブログをはじめよう!tigerszkさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。