Webセキュリティ実践ガイド:脆弱性対策の核心技術

URLエンコード処理の実装メカニズム URLエンコードは特殊文字を安全に伝送するための標準手法です。特定の文字は%記号に続く16進数値に変換され、パーサーが誤解釈するのを防ぎます。例えば?role=userを直接使用すると脆弱性が発生する可能性があります。 実際のケースでは、aを%61にエンコードしますが、ブラウザが自動でデコードするため、二重エンコードが必要です。%自 ...

6月24日 21:39 投稿

MyBatisにおける#{}と${}の違いとSQLインジェクション対策

MyBatisでSQLマップを使用してクエリを実行する際、動的にパラメータを渡す必要があることがよくあります。例えば、以下のようなSQL文があります: SELECT * FROM users WHERE user_id = #{userId} AND user_name = '${userName}' 動的SQLの解析段階において、#{ }と${ }は異なる挙動を示します: #{ }はJDBCのプリペアドステートメント(prepared statement)のパラメー ...

6月1日 23:31 投稿

UNION SELECTを利用した認証ロジックの迂回:SQLインジェクション問題の解析

内部クエリの特定とエンコーディングの剥ぎ取り 対象システムに対して初期パラメータを送信し、応答パターンを観察するところから解析を開始します。 name=abc&pw=a 上記を送信すると「wrong user」が返却されます。次にシングルクォートを追加した以下のペイロードを試します。 name=1%27&pw=a 応答内にBase32エンコードされた文字列が含まれていることが確認でき ...

5月30日 06:33 投稿

Webセキュリティ:エラーインジェクションの原理と実践手法

?id=1' and extractvalue(1,concat(0x7e,database())) -- a 上記のクエリを実行すると、データベースの名前がエラーメッセージとして表示されます: database() の部分は、実行したい任意のSQL文に置き換えることができます。 次に、エラーインジェクションがどのようにデータを表示するのかを段階的に分析していきます。 二、実行原理 1. コードロジックの分析 テスト ...

5月24日 09:58 投稿

SQLインジェクションの実践ガイド

データベースの操作とSQLインジェクションの応用 ここでは、SQLインジェクションの基本的な手法と応用について解説します。 課題1: SQLインジェクションの基礎 まず最初に、数字型のパラメータを扱う例を見ていきます。 <code> ?param=1 and 1=1 ?param=1 and 1=2 </code> 上記のクエリは、ページがエラーを返さない場合、SQLインジェクションの可能 ...

5月22日 01:36 投稿

攻防世界 Warmup: デシリアライゼーションとSQLインジェクションの脆弱性

本記事では、CTFプラットフォーム「攻防世界」の「Warmup」という問題を解説します。この問題は、PHPのデシリアライゼーションとSQLインジェクションの脆弱性を組み合わせたものです。 問題の概要 問題は、特別な情報がない入力フォームを提示します。付属のソースコードが提供されており、それを分析することでフラグを取得する必要があります。 ソースコードの分析 与 ...

5月16日 22:05 投稿