セキュリティ

SQL識別子の扱い

SQLの検査方法について書いた勢いで、SQLの識別子の扱いについて書いてみます。議論としては、1年以上前に結論が出ている話ですw間違いだらけのSQL識別子エスケープ | 徳丸浩の日記徳丸さんの記事では、テーブル名が外部から指定可能な設定で説明がされてい…

SQL Injectionシグネチャの更新

気がつけば3年ぶりの日記更新となりました。相変わらずWeb/スマホ等のセキュリティは続けてます。そろそろバイナリもやろうかとも思い、IDA Proを購入してみました。購入に際してはKinugawaさんの記事を参考にさせてもらいました。ところで、最後に自作検査…

loopback

http://127.0.0.1/ と同じ意味となりうるURL。ブラウザでアクセスするというよりは、HTTPクライアントとして機能するWebアプリに食わせます。(一部のサーバ環境でしか動かないものもあります。) http://127.0.0.1/ 普通の表記 http://127.0.1/ 2,3番目のバイ…

最近買った本

Web Application Obfuscation: '-/WAFs..Evasion..Filters//alert(/Obfuscation/)-'作者: Mario Heiderich,Eduardo Alberto Vela Nava,Gareth Heyes,David Lindsay出版社/メーカー: Syngress発売日: 2010/12/10メディア: ペーパーバック クリック: 105回この…

オープンリダイレクト検査:Locationヘッダ編

オープンリダイレクタを脆弱性とみなすべきかは議論が分かれるところです。Google等の一部のサイトは、自サイトのオープンリダイレクタを脆弱性としてはみていません。一方で、脆弱性検査の現場では、見つかれば脆弱性として報告することが多いと思います。…

他人のCookieを操作する

脆弱性検査をしていてしばしば出くわすのは、他人のCookieの値を操作できるとXSSやセッション固定等の攻撃が成功するようなWebアプリケーションです。このようなアプリがあると、業界的には「Cookie Monsterという問題がありまして、、、でも、、、基本的に…

GoogleのReward Program

少し前の話ですが、Googleが自身のWebサイトの脆弱性発見者に対して、報酬(現金 500 USD以上)を支払うプログラムをはじめています。Google Online Security Blog: Rewarding web application security research過去にも、脆弱性の発見者に報酬を支払うプロ…

属性値のXXE攻撃

以前、属性値でのXXE(Xml eXternal Entity)攻撃を試したのですが、やり方がよく判りませんでした。最近また試してみて、属性値での攻撃方法が判ったので日記に書いてみます。 Servletプログラム 以下のようなJava Servletプログラムをサーバに置きます。 i…

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…

SQL Injection Toolの作成

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

括弧なしのXSS

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

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

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

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と呼ばれる攻撃)について書きます。 脆弱なコードと攻撃方法 さっそく脆弱…

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 数値…

自作検査ツール - XSS編

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