アカウント名:
パスワード:
ASP.NETで入力されたデータを HttpRequest.Params を使って取得すると、GET, POSTの他にCookieの値も混ざっている、ということですね。この仕様はPHPの $_REQUEST と同じ。こんなWebサイトがIDSなどに頼っていた場合はいつもの被害が発生。SQLインジェクションでやり放題、もしくはXSSでセッションや秘密情報が盗まれると。
しかし、HttpRequest.Paramsで検索 [google.com]しても887件しか引っかからないところをみると、ほとんどの人はRequest.QueryString, Request.Formを使っているようです。 # そもそもHttpRequest.Paramsを知らない?
それよりも驚いたのは以下の部分。
IIS/ASPでは、%に続く文字が16進数表記できない文字列が続いた場合、%を除去して、WebアプリケーションにSQL文を送り込みます。この場合、「DEC%LARE 」や「e%xec」はそれぞれ「DECLARE 」や「exec」としてWebアプリケーションに渡されます。よって、構文エラーなどにならず、(当該WebアプリケーションにSQLインジェクションの脆弱性が存在した場合)攻撃SQL文が実行されてしまいます。IDS/IPSでは、リクエストに含まれる特定のキーワードとのパターンマッチにより、SQLインジェクションの試みを検知します。このため、検知するキーワードの中に無効な%が含まれると、検出するのが非常に困難になります。
どういう理由でこんな仕様になってるんでしょうね。
10月2日に公開した本レポート中において、脆弱性が再現できる環境に誤った記述がありましたので訂正をいたします。 具体的には、特徴2の記載内容において、ASP.Netでは%に続く文字が16進数表記できない文字列が続いた場合、%を除去せずにそのままWebアプリケーションに引き渡します。つまり、ASP.Netでは特徴2には該当しません。 本訂正にあたり、上原和彦様にご協力をいただきました。ここに、心より感謝の意を表します。
Microsoftがこういう訳の分からない仕様にするときって、
のどちらかだから、今回もそうだと思うのですが...どうなんでしょうか。
Windowsなんてそんなののカタマリですしね。クジラの内臓がはみ出たOSです。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
あつくて寝られない時はhackしろ! 386BSD(98)はそうやってつくられましたよ? -- あるハッカー
ASPがひどすぎる (スコア:4, 参考になる)
ASP.NETで入力されたデータを HttpRequest.Params を使って取得すると、GET, POSTの他にCookieの値も混ざっている、ということですね。この仕様はPHPの $_REQUEST と同じ。こんなWebサイトがIDSなどに頼っていた場合はいつもの被害が発生。SQLインジェクションでやり放題、もしくはXSSでセッションや秘密情報が盗まれると。
しかし、HttpRequest.Paramsで検索 [google.com]しても887件しか引っかからないところをみると、ほとんどの人はRequest.QueryString, Request.Formを使っているようです。
# そもそもHttpRequest.Paramsを知らない?
それよりも驚いたのは以下の部分。
どういう理由でこんな仕様になってるんでしょうね。
訂正されてます (スコア:4, 参考になる)
なので、さすがに%を除くという通常の発想の範囲外な実装では無いようです。
Re: (スコア:0)
久しぶりに見た気がする。
Re:ASPがひどすぎる (スコア:1)
Microsoftがこういう訳の分からない仕様にするときって、
のどちらかだから、今回もそうだと思うのですが...どうなんでしょうか。
Windowsなんてそんなののカタマリですしね。クジラの内臓がはみ出たOSです。
Re: (スコア:0)
それにIDS/IPSはURLエンコードが不正な時点で弾くべきだとも思いますが。
# そーいや、IISにゃそんなフィルタ [microsoft.com]があったな。
Re: (スコア:0)
ASP.NET + VB.NETだと
HttpRequest("paramname")
で値が取得できるのですが、この場合の挙動は HttpRequest.Params と同じようです。
HttpRequest.FormやHttpRequest.QueryStringを明示的に指定していないHttpRequest("paramname")なコードの方が引っかかりそうな気がします。