タグ

ブックマーク / blog.ts5.me (31)

  • SQL Injectionシグネチャの更新 - 2015-05-07 - T.Teradaの日記

    気がつけば3年ぶりの日記更新となりました。 相変わらずWeb/スマホ等のセキュリティは続けてます。 そろそろバイナリもやろうかとも思い、IDA Proを購入してみました。 購入に際してはKinugawaさんの記事を参考にさせてもらいました。 ところで、最後に自作検査ツールについて書いてから6年ほど経ちました。 その間に細々とですがシグネチャの追加や変更を行ってきました。 またこのGW前後にも変更を加えましたので、それについて書こうと思います。 まずはSQL Injectionのシグネチャを取り上げます。 6年前の関連するエントリはこちらです。 2009-05-31 T.Teradaの日記 | 自作検査ツール - SQLインジェクション編 6年間に行われた変更の目的は、正確性と安全性の向上です。 正確性の向上は、False Positive/False Negativeの両方を減らすことを目

    SQL Injectionシグネチャの更新 - 2015-05-07 - T.Teradaの日記
  • オープンリダイレクト検査:Locationヘッダ編 - T.Teradaの日記

    オープンリダイレクタを脆弱性とみなすべきかは議論が分かれるところです。Google等の一部のサイトは、自サイトのオープンリダイレクタを脆弱性としてはみていません。一方で、脆弱性検査の現場では、見つかれば脆弱性として報告することが多いと思います。 その辺の議論はおいておいて、オープンリダイレクタの検査は、ブラウザの特性もからんで意外とバリエーションが多くて面白いので、日の日記で取り上げてみたいと思います。 大まかにいうと、リダイレクトは、302応答のLocationヘッダ、Refresh(HTTPヘッダ、METAタグ)、JavaScriptによるものがありますが、日は302応答のLocationヘッダのリダイレクタについて取り上げます。 パターン1:サブドメイン部分に値が入る場合 以下のように、サブドメインの箇所が動的なケースです。 Location: http://{$u}.haten

    オープンリダイレクト検査:Locationヘッダ編 - T.Teradaの日記
  • 他人のCookieを操作する - T.Teradaの日記

    脆弱性検査をしていてしばしば出くわすのは、他人のCookieの値を操作できるとXSSやセッション固定等の攻撃が成功するようなWebアプリケーションです。 このようなアプリがあると、業界的には「Cookie Monsterという問題がありまして、、、でも、、、基的に現状のブラウザではリスクは低いです」みたいな話がされることが多いのではないかと思います。 日の日記では、それ(Cookie Monster)以外にも状況によっては考慮すべきことがある、という話をしたいと思います(過去の日記でも少し書いた話ですが、もう少しちゃんと書いておこうと思います)。 通信経路上に攻撃者がいる 被害者のブラウザとサーバの通信経路上に、アクティブな攻撃者がいると想定しましょう。 そのような状況では、攻撃者は正規のサーバになりかわってブラウザと通信をしたり、ブラウザと正規のサーバで交わされる通信に介入することが

    他人のCookieを操作する - T.Teradaの日記
  • GoogleのReward Program - 2011-02-06 - T.Teradaの日記

    少し前の話ですが、Googleが自身のWebサイトの脆弱性発見者に対して、報酬(現金 500 USD以上)を支払うプログラムをはじめています。 Google Online Security Blog: Rewarding web application security research 過去にも、脆弱性の発見者に報酬を支払うプログラムはありましたが、Webブラウザ等のソフトウェアの脆弱性が対象でした(参考)。 今回のプログラムでは、Webアプリの脆弱性が対象だというところが特色です。しかも、実際に運用されている番のGoogleサイトの脆弱性が対象です。その脆弱性の発見者に報奨金を払うということは、(一定の制約は設けていますが)基的に自由に番サイトの検査をしてよいといっているわけです。 実際にやってみる Webアプリの診断をやっているものにとっては、これ以上のお小遣い稼ぎはない!と思

    GoogleのReward Program - 2011-02-06 - T.Teradaの日記
  • ASP.NETのセッション固定対策 - 2010-04-24 - T.Teradaの日記

    日は、ASP.NETでログイン機能をつくる際のセッション固定対策について書きます。 ログイン状態の管理には、ASP.NETが提供するセッション機構(ASP.NET_SessionId Cookie)を使っているとします。 ASP.NETでのセッション再生成 ログイン機能のセッション固定対策は、ログイン時に新たなセッションを開始することです。既存のセッションがなければ新たにセッションを開始し、既存のセッションがあるならばそのセッションは再生成されなければなりません。 しかし、ASP.NETはセッションを再生成する方法を提供していません。 それはJavaも同じなのですが、TomcatだとHttpSession#invalidateでセッションを無効化することで、セッションを再生成することができます*1。 ASP.NETでも普通に考えると、Session.Abandonという同等のメソッドを利

    ASP.NETのセッション固定対策 - 2010-04-24 - T.Teradaの日記
    cubed-l
    cubed-l 2010/04/24
  • マッチするはずの正規表現がマッチしない現象 - T.Teradaの日記

    今日は、PHPでよく使用される正規表現エンジンであるPCRE(Perl Compatible Regular Expression)の、余り知られていない(と思う)制約について書きます。 プログラム 題材は下のPHPプログラムです。 <?php header('Content-Type: text/html; charset=latin1'); $url = $_REQUEST['url']; if (preg_match('/^(.*?):/s', $url, $match)) { $scheme = $match[1]; if ($scheme !== 'http' && $scheme !== 'https') { exit; } } echo '<a href="'. htmlspecialchars($url). '">link</a>'; 外部から受け取った「url」パラメータ

    マッチするはずの正規表現がマッチしない現象 - T.Teradaの日記
  • htmlspecialchars()/htmlentities()について - 2009-10-19 - T.Teradaの日記

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

    htmlspecialchars()/htmlentities()について - 2009-10-19 - T.Teradaの日記
  • MySQLのエラーメッセージ - 2009-07-03 - T.Teradaの日記

    MySQL環境において、BlindではないSQLインジェクションがあるときに(SQLエラーメッセージが応答に含まれるときに)、欲しいデータをエラーメッセージから得る方法。 mysql> select extractvalue('<a/>',concat('/$',version())); ERROR 1105 (HY000): XPATH syntax error: '$5.1.36-log' こんな感じで使います。 ?vuln_var='-extractvalue('<a/>',concat('/$',version()))-'おそらく、MySQL5.1以上で動きます。 金床さんの(ウェブアプリケーションセキュリティ)には、同じことをload_file関数を使ってやる方法が載ってますが、FILE権限が必要ですし、ちょっと前からその方法自体が使えなくなってます。 (参考)MySQL Bu

    MySQLのエラーメッセージ - 2009-07-03 - T.Teradaの日記
  • IE8のXSSフィルタが裏目に出る例 - 2009-06-22 - T.Teradaの日記

    IE8のXSSフィルタは、WebアプリにXSS脆弱性があったとしても、それが発動する可能性を減らしてくれるものです。 しかし、そのXSSフィルタが裏目に出るようなこともあります。 例えば、以下のような静的なHTMLファイル(test.html)を作ってWebサーバにおきます。 <h3>ie8 test</h3> <!-- 1 --> <script> var u=document.URL; </script> <!-- 2 --> <script> u=u.replace(/&/g,'&amp;').replace(/</g,'&lt;'); </script> <!-- 3 --> <script> document.write('URL:'+u); </script> 上のページは静的なページで、DOM Based XSSの脆弱性もありません。ですが、被害者のユーザがIE8を使っている

    IE8のXSSフィルタが裏目に出る例 - 2009-06-22 - T.Teradaの日記
  • XMLをparseするアプリのセキュリティ - 2009-06-21 - T.Teradaの日記

    「XML」「セキュリティ」という単語でWeb検索すると、多くヒットするのはXMLデジタル署名やXML暗号などを説明したWebページです。 日の日記では、それとはちょっと違うテーマ(XXEと呼ばれる攻撃)について書きます。 脆弱なコードと攻撃方法 さっそく脆弱性があるサンプルプログラムです。 import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import org.w3c.dom.*; import org.apache.xerces.parsers.*; import org.xml.sax.*; public class Test1 extends HttpServlet { public void service(HttpServletRequest request, HttpServletRe

    XMLをparseするアプリのセキュリティ - 2009-06-21 - T.Teradaの日記
  • IE8のtoStaticHTML関数 - 2009-06-21 - T.Teradaの日記

    以前の日記で、IE8β2のtoStaticHTML関数にバグがあると書きました。 そのバグについては、発見したときにMSに報告しました。その後、特に「直した」という連絡はありませんが、IE8の正式版では修正されていました。 β2にあったバグのPOCは、以下のようなものです。 <body> <div id="foo"></div> <script> var tmp="<img style=\"color:expression(alert('; width:x'))\">"; document.getElementById('foo').innerHTML = toStaticHTML(tmp); </script> </body> ポイントは、alertのちょっとうしろに入れたセミコロンです。β2では、セミコロンが含まれていると、そこで1つの宣言が終わると解釈していました。かなり荒っぽい解釈

    IE8のtoStaticHTML関数 - 2009-06-21 - T.Teradaの日記
  • DB2の文字列→数値変換 - teracc’s blog

    だいぶ前に徳丸さんが、文字列から数値への暗黙の型変換についてまとめています。 数値リテラルをシングルクォートで囲むことの是非 - ockeghem's blog 徳丸さんの日記には、Oracle, MS SQL Server, MySQL, PostgreSQLの4つのDBMSを対象に、暗黙の型変換が起こるかを実際に調べた結果が書かれています。 私が思うところ、割とメジャーなDBMSで網羅されていないのはDB2です。 というわけで、今日の日記ではDB2の挙動について書きます。 下は、DB2 V9.5での動作です。 [db2inst1@localhost ~]$ db2 "SELECT * FROM staff WHERE id=10" ID NAME DEPT JOB YEARS SALARY COMM ------ --------- ------ ----- ------ ------

    DB2の文字列→数値変換 - teracc’s blog
    cubed-l
    cubed-l 2009/06/06
  • 自作検査ツール - SQLインジェクション編 - 2009-05-31 - T.Teradaの日記

    前回の日記からだいぶ日にちが空いてしまいました。 今日は、自作検査ツールのSQLインジェクション用シグネチャについて書きます。 SQLインジェクションの検査シグネチャとしては、以下の5種類を用意しています。 A. SQLエラー検出+簡易なBlind B. Blind 数値型・カラム名等 C. Blind 文字列型 D. 更新系クエリ E. 文字コード系 SQLインジェクションは、かなりの頻度で脆弱性が発見されること、また一般的に危険度の高い脆弱性であることから、シグネチャの種類を多くしています。 それぞれのシグネチャについて、以下で順番に見ていきます。 A. SQLエラー検出+簡易なBlind 最初に試すのはベーシックなパターンです。 イ:【元の値】'"\'"\ … SQLエラーになる ロ:【元の値】''""\\ … SQLエラーにならない ハ:【元の値】'"\'"\ … SQLエラーにな

    自作検査ツール - SQLインジェクション編 - 2009-05-31 - T.Teradaの日記
  • 自作検査ツール - XSS編 - 2009-01-31 - T.Teradaの日記

    ちょっと時間があいてしまいましたが、自作ツールのXSS検査について書きます。 XSSシグネチャ 検査文字列は基的には2種類のみです。 □タイプA XXXXXX【元の値】'"<9 :&(;\qYYYYYY □タイプB XXXXXX【元の値】'":&(;\qYYYYYY ※ XXXXXX、YYYYYYはランダムな英数文字列ツールは、これらの文字列をパラメータとして与えて、HTMLのどのような文脈に出力されるのか(何らかの属性の値なのか、あるいはSCRIPTタグの内側かなど)、そして出力の際にどのようなエンコードやフィルタが施されるのかを調べて、脆弱性が存在する可能性を調べていきます。 例えば、パラメータ値が「'」や「"」で括られていない属性値に出力されるとします。 <INPUT type="text" name="foo" value=【ここに出る】>この場合、(正確に言うと一部例外はありま

    自作検査ツール - XSS編 - 2009-01-31 - T.Teradaの日記
  • 2008-08-06 - T.Teradaの日記 - HTTP用のページにHTTPSでアクセスする

    同一ホスト上にHTTPとHTTPSのページが同居しているサイトをしばしばみます。 そんなサイトでは、来はHTTPのページに、HTTPSでもアクセスできるようになっていることがあります。そういう場合、HTMLの中身によってはセキュリティ上の問題が出ますよという話です。 問題があるページ http://www.example.jp/index.html というURLのページがあるとします。 問題となるのは、そのページの中身に以下のようなHTMLがベタ書きされている場合です。 <script src="http://www2.example.jp/foo.js"></script> このページ(index.html)はHTTPでのアクセスを想定して作られているため、JSファイルをHTTPで読み込んでいます。 ここで、このページが実はHTTPSでもアクセス可能だとします。もしHTTPSでアクセス

    2008-08-06 - T.Teradaの日記 - HTTP用のページにHTTPSでアクセスする
    cubed-l
    cubed-l 2008/08/07
    そもそも、何故httpを指定してるんだろうね?SSLの負荷を避けるため?
  • 2008-07-10 - T.Teradaの日記 - SQLのLIKE演算子のエスケープ

    例えば、「\%foo」から始まる文字列を検索する場合には、どのようなSQL文を書けばよいのでしょうか。 条件は以下の通りです。 DBMSソフトはMySQL ESCAPE節は使わない MySQLでESCAPE節を使わない場合、ワイルドカード文字(「%」や「_」)は「\」でエスケープすることになります。 間違った答え 直感的に以下のようなSQL文を書いてしまう人もいると思います。 SELECT * FROM table1 WHERE hoge LIKE '\\\%foo%'; 実際に試して見ます。 mysql> SELECT 123 FROM dual WHERE '\\%foo456' LIKE '\\\%foo%'; +-----+ | 123 | +-----+ | 123 | +-----+ 1 row in set (0.00 sec) mysql> SELECT 123 FROM

    2008-07-10 - T.Teradaの日記 - SQLのLIKE演算子のエスケープ
    cubed-l
    cubed-l 2008/07/11
  • ]SQLインジェクションによるサイト改竄 2008-03-20 - T.Teradaの日記

    今月に入り、SQLインジェクションによるサイト改竄被害が、広範囲で発生しているようです(参考:LACの注意喚起)。 この攻撃で使われた手法に関する詳細な情報が、以下のページに載っていました。 http://blogs.technet.com/neilcar/archive/2008/03/15/anatomy-of-a-sql-injection-incident-part-2-meat.aspx 非常におおざっぱに言うと、以下のような感じです。 リクエストを送ってみて、SQLインジェクション脆弱性があるか調べる。 脆弱性がある場合、それを突いて、全テーブルの、全カラムの、全レコードの値を改竄する*1。具体的には、DB格納値の末尾に「<script src=http://www.211796...(省略)」のような攻撃コードを追加する。 DBのデータをエスケープせずにHTMLに出力している

    ]SQLインジェクションによるサイト改竄 2008-03-20 - T.Teradaの日記
  • 2008-02-27 - T.Teradaの日記 [セキュリティ]Burpの更新&文字化けの話

    日やっとBurp Suiteを1.1にバージョンアップしました。 なんだかタブが増えてごちゃごちゃした感じです。 それはともかく、BurpだとShift_JIS以外のコンテンツが文字化けするのですが(Windows環境では)、今日その解消法に気が付きました。 (EUC-JPのサイトを見る場合) java -jar -Dfile.encoding=EUC-JP burpsuite_v1.1.jarまあ考えてみれば当たり前で、今更ながらという話ではありますが…

    2008-02-27 - T.Teradaの日記 [セキュリティ]Burpの更新&文字化けの話
  • セッションを使ったフォーム処理にありがちな問題点 - T.Teradaの日記

    入力画面が複数に渡るフォームで、ユーザが各画面で入力したデータを、hiddenによって引き回すのではなく、セッション変数(セッションIDにヒモ付いてサーバ側に格納される情報)に一時保存するタイプのWebアプリケーションが増えているように思います。 フォーム処理でセッションが使われるのは、「実装をシンプルにしたい」「携帯サイトなどで通信量を減らしたい」といった理由のほかに、「アプリケーションをセキュアにしたい(hiddenだと改竄される)」という理由があるのではないかと思います。 しかし、セキュリティ上の問題は、セッションを使ったフォーム処理においてもしばしば見つかります。 以下では、セッションを使ったフォーム処理で、割と多く見つかる問題について書きます。 画面遷移の不正 ある会員制サイトの、会員登録フォームを会話風に書いてみます。 会員登録の際には、氏名、生年月日、住所の3つを登録します。

    セッションを使ったフォーム処理にありがちな問題点 - T.Teradaの日記
    cubed-l
    cubed-l 2008/02/26
    セキュリティというよりは開発の話か
  • PHPでの入力値チェックのすり抜け - T.Teradaの日記

    Webアプリケーションでは、外部からの変数に対して、形式チェック(Validation)を行ないます。PHPでこれを行なう場合に、ありがちなミスをいくつか挙げてみました。 この日記は、がるさんの日記に触発されて書いたもので、いくつかの例を引用しています。 がるの健忘録(2006/11/08) - 素晴らしき自動的な世界〜或いは「型のない」世界〜 型の問題 数値と文字列の比較 <?php $input = "2'; DELETE FROM hoge; --"; if ($input == 2) { // ↑TRUEと評価される がるさんの日記で紹介されていた例に、手を加えたものです。 if文中の式がTRUEになるのは、PHPの「==」演算子が、数値型と文字列型変数を比較する際に、文字列を(かなり強引なやり方で)数値型に変換するからです。変数の比較は、同じ型同士で行なうのが無難だと思います。

    PHPでの入力値チェックのすり抜け - T.Teradaの日記