Anonymous Coward曰く、
以前/.で話題になったクッキーを使ったSQLインジェクションについて、詳細が日経IT-PLUSで解説されている。
記事によると、今回判明したSQLインジェクション攻撃はASPやASP.NET、PHPなどでCGIがデータを受け取る際に使用する関数の仕様を突いたものだそうだ。たとえばASPでは「Request("引数名")」という関数でGET/POSTに関係なくCGIに渡されたデータを取得できるが、この際にcookieとして渡された情報も取得対象となってしまう(たとえば、Request("data1")という関数を呼び出した際、GETもしくはPOSTでdata1というデータが送信されず、さらにdata1という名前のcookieが存在した場合、そのcookieの値が取得される)。
これを利用すると、cookieとして送信したデータを、CGI側ではGET/POSTで送信されたもののように扱わせることができる。侵入検知システムなどが導入されている場合、不正なGET/POSTについてはブロックできるようになっていることが多いが、cookieについては見落とされていることが多いため、これにより不正なリクエストを侵入検知システムにブロックされずに送信できるようになる。
また、SQLインジェクションに利用される文字列に「%」を埋め込むことにより、侵入検知システムをくぐり抜けるテクニックも使われていたそうだ。「%」は通常、URLエンコードで用いられるキーであるが、IIS/ASPでは無効な%(%のあとの2文字に0~9およびA~F以外の文字が含まれる)際には%を無視する仕様がある(たとえば「DEC%LARE」という文字はIIS/ASPでは「DECLARE」と認識される)。これを利用して、侵入検知システムをだますことも可能になる。
また、記事内ではPOSTやcookieを使った攻撃は内容がWebサーバーのログに残りにくいため、痕跡が残りにくいという(攻撃者にとっての)メリットもあるとのことだ。
要するに (スコア:4, すばらしい洞察)
IDSをすり抜けられてインジェクションを喰らったということか。
先に脆弱性を直せよ。
コメントを書く
モノの品質に問題あるんじゃないのそれ (スコア:1)
PHPerにとっては常識だと思うんだけど・・・。
仕事でこれ使ったコード見つけたら 書いた奴呼び出してシバき倒すけどね。
中途採用でVBを10年やってました!って奴がこういうことを知らずに書くから怖い。
というか畑違いはこっちくんなと・・・。
// そして泣く泣く修正し深夜に全工程をテストして再リリースの王道パターン(:>^
// 新人だけのプロジェクトとか技術者一年生向けの問題周知なんだろうけど。
コメントを書く
Re:モノの品質に問題あるんじゃないのそれ (スコア:2, 参考になる)
theInsiderman(-1:フレームの元)
コメントを書く
親コメント
Re:モノの品質に問題あるんじゃないのそれ (スコア:3, 参考になる)
とかいうリンクを他人に踏ませると、このセッションIDでログインさせる事ができる。
(PHPSESSIDという名前のクッキーも、get変数PHPSESSIDも、$_REQUEST['PHPSESSID']では区別しないから)
要するに、セッションキーを盗むのと同じ効果が得られる。セッション・フィクセーション攻撃という、古い古い攻撃手法。
phpのバージョンが古く、session_start()でセッション管理をしてる場合、phpが$_REQUEST相当の変数からセッションキーを読み出す仕様になっている。
それ以外でも、POSTとGETを区別しない$_REQUESTは色々マズい。
例えば<img src="http://www.example.com?title=spam&text=hoge">なんてタグを適当な場所に貼る事で
掲示板に連POST、みたいな事もできたりする。
コメントを書く
親コメント
あえて言ってしまうと (スコア:1)
POSTもGETもリクエスト側からのデータである -> オブジェクトとして抽象化できる -> しました
cookie もリクエストのデータと見なせる -> さらに抽象化できる -> しました
そして cookie 自身には他にメタデータはあるけど、POSTやGETに無いからとにかくキーと値としてみなした結果がこれだよ
フレームワークによっては GET,POST,cookie は明確に分離されているから、この程度でオブジェクト指向の暗黒面というと言い過ぎかもしれない。そしてフレームワーク云々ではなく自ら今回の挙動を引き起こすようなモジュールを作成して悦に浸る輩は絶えなさそう・・・。
コメントを書く
ごめん (スコア:1)
もっと解りやすく説明できる猛者はいますか?
クッキーを保存させるサイトを訪問した時に保存されたクッキーの内容を改竄して
サーバにSQLを送りつけることができるってことですか?
その時に%を紛れ込ませることで
$res = str_replace("select","ERR",$res); みたいな小細工をすりぬけされて
se%le%ct ac,pw fro%m tblpwd; とかをサーバに実行させるって話なの?
アホすぎてごめん
コメントを書く
Re:「IIS/ASPとの付き合い方を考える時期」とのことで (スコア:1)
コメントを書く
親コメント
Re:「IIS/ASPとの付き合い方を考える時期」とのことで (スコア:1)
#もっとマイナーでごじゃるが。
コメントを書く
親コメント
Re:どうでもいいけど (スコア:1)
外部プログラムであるかは関係ありません。
RFC 3875 CGI Version 1.1 より
http://www.ietf.org/rfc/rfc3875.txt [ietf.org]
> 'script'
> The software that is invoked by the server according to this
> interface. It need not be a standalone program, but could be a
> dynamically-loaded or shared library, or even a subroutine in the
> server.
> スクリプト
> このインタフェースに従ってサーバにより起動されるソフトウェア。
> 独立したプログラムである必要はなく、動的にロードされるライブラリ、
> 共有ライブラリ、さらにはサーバ内のサブルーチンの場合もあり得る。
コメントを書く
親コメント