JavaScriptの文字列リテラルでXSS

たまに以下のようにJavaScriptの文字列リテラルに値が入るアプリを見ることがあります。 <script> var foo="●"; ... </script> 値は「●」の箇所にHTMLエスケープされて出力されます(下の方の例も同じ)。こんなケースでどうXSSするか?という話です。 簡単にXSSできるケース …

HTML PurifierのSecurity Fix

HTML Purifierの4.1.1がリリースされました。今回のリリースには1件のSecurity Fixが含まれています。今日はその内容について少し書きます。 IEのCSSのurl()の扱い 以下のようなstyle属性があったとき、ブラウザはどのように解釈するでしょうか? <span style="background: url('http://host/aaa\'\);color:red;')">111</span> Firefo…

CookieのPath

遅ればせながら、高木さんの日記を見ました。高木浩光@自宅の日記 - 共用SSLサーバの危険性が理解されていないCookieのPath指定がセキュリティ上意味を持たない件について書かれています。日記に書かれたIFRAMEを使う方法で既に「詰み」なのですが、もうち…

セッションIDと認証チケット

以前の日記で、ASP.NETのセッション固定対策について書きました。その結論をまとめると、 ASP.NETにはセッションIDを変更するまともな方法が存在しない。 そのため、ASP.NETではフォーム認証機構(FormsAuthentication)を使ってログイン状態管理を行うべき…

ASP.NETのセッション固定対策

本日は、ASP.NETでログイン機能をつくる際のセッション固定対策について書きます。ログイン状態の管理には、ASP.NETが提供するセッション機構(ASP.NET_SessionId Cookie)を使っているとします。 ASP.NETでのセッション再生成 ログイン機能のセッション固定…

skipfishをためす

Googleから新しい検査ツールが出たとのことで、中身を見てみました。Google Code Archive - Long-term storage for Google Code Project Hosting.ツールの作者はRatproxyと同じくMichał Zalewski氏ですが、今回のツールはRatproxyとは違って"Active"な検査ツ…

マッチするはずの正規表現がマッチしない現象

今日は、PHPでよく使用される正規表現エンジンであるPCRE(Perl Compatible Regular Expression)の、余り知られていない(と思う)制約について書きます。 プログラム 題材は下のPHPプログラムです。

pg_sleepを使った検査

徳丸さんの日記(pg_sleepをSQLインジェクション検査に応用する - ockeghem's blog)を読みました。こういう検査のマニアックな話は大好きです。このあたりのシグネチャは、私も自作ツール(参考)の検討をしていた際に相当いろいろ悩んで調べましたので、今…

htmlspecialchars()/htmlentities()について

id:t_komuraさんの、最新の PHP スナップショットでの htmlspecialchars()/htmlentities() の修正内容についてを読みました。見ていて気になったことが1つあります。 2. EUC-JP …(省略)… (2) \x80 - \x8d, \x90 - \xa0, \xff については、そのまま出力さ…

Anti-XSS Library v3.1を試す

Anti-XSSライブラリのV3.1から、GetSafeHtml()やGetSafeHtmlFragment()といったスタティックメソッドが用意されました。これらのメソッドは、入力として与えられたHTMLやHTML断片から、JavaScriptを除去するためのものです。(参考)HTML Sanitization in An…

勉強会参加

わんくまっちゃ445同盟 featuring Silverlight Square本日は、Silverlight関連の話が2/3、セキュリティ関連が1/3くらいでした。Silverlight関連で特に印象に残っているのは「AMF Messaging with Silverlight」「クライアントでもサーバーでもC#!」「Silv…

SQL Injection Toolの作成

検査ツール作成の一環として、SQL Injection脆弱性を利用してデータを抜き出すツールを作成しました。 使い方 この手のツールを使ったことがある人は、見れば何となく分かると思いますが、簡単に説明します。まずは、検査対象のリクエストとパラメータを指定…

パソコンが届いた

おととい(22日)、DELLのノートPCが届きました。注文したのが12日なので、10日くらいで届いたことになります。ただいまセットアップ中です。これまでに以下のソフトを入れました。 Becky! メールクライアント IE8/Firefox ブラウザ xyzzy テキストエディタ …

括弧なしのXSS

hoshikuzuさんの日記から。詰めXSS回答第弐回(分割方式)これ、SCRIPTタグの内側に挿入できるけれども、括弧など殆どの記号がはじかれてしまうアプリがあって、仕事で1回だけ使ったことがあります。とはいっても、hoshikuzuさんの記事の後半に書いてあるよ…

XMLをParseするアプリのセキュリティ(補足編)

以前の日記では、外部からのXMLをサーバサイドでParseするアプリへの攻撃の概要について書きました。今日の日記では、何点か補足する事項について書きます。 ファイルの内容を盗み出す他の方法 前の日記の中で、サーバ上のファイルの内容を外部から盗み出す…

パソコン壊れた

自宅でメインで使っているノートパソコンが壊れました。ハードディスクからゴリゴリ異音がして、データを読み込めません。もうだめでしょう。過去のメールやら写真やら、いろいろなVMイメージ(検証環境)やらを含めて、多くのデータがおじゃんになりました…

SQLのlike演算子でエスケープが必要な文字

まとめると以下のようになると思います。 Oracle % _ %(全角)_(全角) DB2 % _ %(全角)_(全角) MS SQL Server % _ [ MySQL % _ PostgreSQL % _ 注意点は以下のとおり。 DB2、Oracleは、「%」「_」(全角)もワイルドカードとして解釈する SQL Server…

MySQLのエラーメッセージ

MySQL環境において、BlindではないSQLインジェクションがあるときに(SQLエラーメッセージが応答に含まれるときに)、欲しいデータをエラーメッセージから得る方法。 mysql> select extractvalue('<a/>',concat('/$',version())); ERROR 1105 (HY000): XPATH syn</a/>…

IE8のXSSフィルタが裏目に出る例

IE8のXSSフィルタは、WebアプリにXSS脆弱性があったとしても、それが発動する可能性を減らしてくれるものです。しかし、そのXSSフィルタが裏目に出るようなこともあります。例えば、以下のような静的なHTMLファイル(test.html)を作ってWebサーバにおきます…

IE8のtoStaticHTML関数

以前の日記で、IE8β2のtoStaticHTML関数にバグがあると書きました。そのバグについては、発見したときにMSに報告しました。その後、特に「直した」という連絡はありませんが、IE8の正式版では修正されていました。β2にあったバグのPOCは、以下のようなもので…

XMLをparseするアプリのセキュリティ

「XML」「セキュリティ」という単語でWeb検索すると、多くヒットするのはXMLデジタル署名やXML暗号などを説明したWebページです。本日の日記では、それとはちょっと違うテーマ(XXEと呼ばれる攻撃)について書きます。 脆弱なコードと攻撃方法 さっそく脆弱…

DB2の文字列→数値変換

だいぶ前に徳丸さんが、文字列から数値への暗黙の型変換についてまとめています。数値リテラルをシングルクォートで囲むことの是非 - ockeghem's blog徳丸さんの日記には、Oracle, MS SQL Server, MySQL, PostgreSQLの4つのDBMSを対象に、暗黙の型変換が起こ…

CSSのexpression

はせがわさんの記事です。[柔軟すぎる]IEのCSS解釈で起こるXSS (1/3):教科書に載らないWebアプリケーションセキュリティ(3) - @IT記事中では、(5) 全角文字、(6) 特定のUnicode文字、の2つは、Windows XP SP3のIE6では動作しなくなっていると書かれて…

VBScriptエスケープ法

VBScriptエスケープ法についてP.4のVBEscape関数には微妙なバグがありますね。 入力: aaa & " & bbb 期待する出力: aaa & "" & bbb 実際の出力: aaa & bbb

自作検査ツール - SQLインジェクション編

前回の日記からだいぶ日にちが空いてしまいました。今日は、自作検査ツールのSQLインジェクション用シグネチャについて書きます。SQLインジェクションの検査シグネチャとしては、以下の5種類を用意しています。 A. SQLエラー検出+簡易なBlind B. Blind 数値…

システム監査技術者試験

去年はCISSPを受けました。今年はシステム監査技術者試験を受けようかと思ってます。既にオンラインで試験の申込もして、参考書・問題集を読んでますが、システム監査なんて経験が無いもので非常に苦痛です。特に午後IIの論文とか。今のところ、合格しそうな…

like演算子のエスケープ

SQLのlike演算子では、ワイルドカードとして解釈させたくない「%」や「_」をエスケープする必要があります。じゃあエスケープ文字として何を使えばいいんだろうか?という話になりますが、それに関して昔自分がやった失敗を思い出しました。自分がやった失敗…

自作検査ツール - XSS編

ちょっと時間があいてしまいましたが、自作ツールのXSS検査について書きます。 XSSシグネチャ 検査文字列は基本的には2種類のみです。 □タイプA XXXXXX【元の値】'"<9 :&(;\qYYYYYY □タイプB XXXXXX【元の値】'":&(;\qYYYYYY ※ XXXXXX、YYYYYYはランダムな英…

自作検査ツール - ディレクトリトラバーサル編

ディレクトリトラバーサルは、比較的発見が容易な脆弱性です。検査文字列を検討する際にポイントとなるのは、どのファイルを見に行くか、NULL文字を入れるか、くらいではないかと思います。 UNIX系OS用のシグネチャ UNIX用のシグネチャは1パターンしか用意し…

自作検査ツール - OSコマンドインジェクション編

OSコマンドインジェクションを許す欠陥を持つアプリケーションは非常に少ないです。最近のアプリケーションは特に、メールを送信するために直接sendmailコマンドを叩くようなことをしなくなってきており、欠陥を持つアプリは殆ど見られなくなっています。ま…