パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

Cookieを使用したSQLインジェクション」記事へのコメント

  • ASPがひどすぎる (スコア:4, 参考になる)

    by kanie (911) on 2008年10月06日 18時29分 (#1432823)

    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インジェクションの試みを検知します。このため、検知するキーワードの中に無効な%が含まれると、検出するのが非常に困難になります。

    どういう理由でこんな仕様になってるんでしょうね。

    • 訂正されてます (スコア:4, 参考になる)

      by t-wata (10969) on 2008年10月07日 3時53分 (#1433122) 日記

      10月2日に公開した本レポート中において、脆弱性が再現できる環境に誤った記述がありましたので訂正をいたします。
      具体的には、特徴2の記載内容において、ASP.Netでは%に続く文字が16進数表記できない文字列が続いた場合、%を除去せずにそのままWebアプリケーションに引き渡します。つまり、ASP.Netでは特徴2には該当しません。
      本訂正にあたり、上原和彦様にご協力をいただきました。ここに、心より感謝の意を表します。
      だそうです。
      なので、さすがに%を除くという通常の発想の範囲外な実装では無いようです。
      親コメント
    • by Anonymous Coward
      うっひょー、これぞ Microsoft の真骨頂ですなあ。

      久しぶりに見た気がする。
      • by kanie (911) on 2008年10月06日 19時41分 (#1432863)

        Microsoftがこういう訳の分からない仕様にするときって、

        • 互換性のため
        • 競合と同じ振る舞いをして、顧客を奪うため

        のどちらかだから、今回もそうだと思うのですが...どうなんでしょうか。

        Windowsなんてそんなののカタマリですしね。クジラの内臓がはみ出たOSです。

        親コメント
    • by Anonymous Coward
      Webアプリケーション側でURLエンコードのデコードを正常に行うためでは?
      それにIDS/IPSはURLエンコードが不正な時点で弾くべきだとも思いますが。

      # そーいや、IISにゃそんなフィルタ [microsoft.com]があったな。
    • by Anonymous Coward
      > # そもそもHttpRequest.Paramsを知らない?

      ASP.NET + VB.NETだと
      HttpRequest("paramname")
      で値が取得できるのですが、この場合の挙動は HttpRequest.Params と同じようです。

      HttpRequest.FormやHttpRequest.QueryStringを明示的に指定していないHttpRequest("paramname")なコードの方が引っかかりそうな気がします。

UNIXはただ死んだだけでなく、本当にひどい臭いを放ち始めている -- あるソフトウェアエンジニア

処理中...