XMLHttpRequestの利用方法w
XMLHttpRequestを使えば、自由に改行が操作できるみたい。
例えば、こんなScriptがあったとすると。
<script> function createHttpRequest(){ if(window.ActiveXObject){ try { return new ActiveXObject("Msxml2.XMLHTTP") } catch (e) { try { return new ActiveXObject("Microsoft.XMLHTTP") } catch (e2) { return null } } } else if(window.XMLHttpRequest){ return new XMLHttpRequest() } else { return null } } function requestFile( data , method , fileName , async ) { var httpoj = createHttpRequest() httpoj.open( method , fileName , async ) httpoj.send( data ) } <form> <input type="button" onclick="requestFile( 'user test\npass testtest\n' , 'POST', 'http://hogehoge:8010/test.txt' , true )">
</form> </body> </html>
XMLHttpRequestはリクエストとして、こういったものを投げる。(IE7で検証)
POST /test.txt HTTP/1.1 Accept: */* Accept-Language: ja Referer: http://hogehoge/test.htm UA-CPU: x86 Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 1.0.3705; .NET CLR 2.0.50727) Host: hogehoge:8010 Content-Length: 24 Connection: Keep-Alive Cache-Control: no-cache user test pass testtest
改行コードがそのまま投げられているのが分かるかと・・・
当たり前といえば、当たり前の気もするけど、これを使えばFTPとか、TelnetとかのブルートフォースツールをJavascriptで作ることもできますな。
コードさえうまく作ればBoFツールもできそうな予感orz
まあ、こんな手間かけるのであれば、直接攻撃した方が楽だけど、自分の手を汚したくないときなんかに使えそうですな・・・
まあ、XSSを使った悪用方法としてはこんなものもあるということで・・・
追記:
どうやら、URLエンコードされていないデータが送られているようなので、decodeURIComponent使えば、結構楽にShellコードも作成できそうorz
この攻撃の怖いところは、XSSの脆弱性のあるサイトで動いているTCPのポートに対して、普通の人が知らないうちに攻撃を仕掛けてしまう点だったり。被害者であるはずが、加害者になってしまうので怖いなぁと思う。
JSONとセキュリティ
JSONって、受け取ったデータをeval関数の引数として使うのね。これって、データとコードの区別がつけられないから、非常に危険だと思うんですが・・・
受け取ったデータにコードらしきものが含まれていたら、意図しないコードが実行されて非常に危険なんだけどなぁ。
まあ、その為にjson.jsのJSON parserがあるようだけど、これを使ってる人ってどの程度いるんかなぁ?
http://allabout.co.jp/internet/javascript/closeup/CU20050515A/
http://jsgt.org/ajax/ref/test/json/test1.htm
とかそういったことについて、全く記述してないのが怖いんですが・・・
JSON使うときは、ここを参照すべきですな。
http://www.json.org/