Webアプリケーションの主要なセキュリティ脅威と防御戦略

クロスサイトスクリプティング(XSS) XSSは、悪意のあるスクリプトをWebページに埋め込み、閲覧者のブラウザ上で実行させる攻撃手法である。ユーザーのセッション情報の窃取や、不正な操作の実行などを引き起こす。 反射型XSS(非持続型) 攻撃者が仕掛けた悪意のあるURLをユーザーが開くことで発動する。URLのパラメータから直接スクリプトが読み込まれ、レンダリングさ ...

8月2日 08:02 投稿

VNCTF 2025 ウェブ問題解説

Web3ではパスワードのパススルーとJWTの偽造によりサンドボックスを突破しシェルを取得したが、権限昇格が残っていた。数日間の疲労から時間切れとなり、朝に環境変数の昇格策を思いついたが間に合わず。最終的にウェブ部門で第10位となり、同順位中唯一3問のみ正解という結果となった。 「Nailong Home」 初血を獲得した問題。最も簡単だったはずだが、JavaGuideが燃え尽 ...

7月31日 04:22 投稿

SQLインジェクションのメカニズムとコード解析(後編)

概要 前回の記事では、UNIONインジェクションやエラーベースインジェクション、ブールブラインドインジェクションについて解説しました。今回はそれに続き、スタック型インジェクション、ワイドキャラクタインジェクション、Cookie経由のインジェクション、およびX-Forwarded-For(XFF)ヘッダーを利用した攻撃手法について詳細に分析します。 SQLインジェクションの発生 ...

7月26日 21:12 投稿

SQLインジェクションの実践的手法

基本的なSQLインジェクション手法 URL: http://localhost/sqli-labs/Less-1/ テスト手順 正常なレスポンス(数値型インジェクションではない) http://localhost/sqli-labs/Less-1/?id=1 エラーレスポンス(文字列型インジェクション) http://localhost/sqli-labs/Less-1/?id=1' シングルクォートによる閉鎖 http://localhost/sqli-labs/Less-1/?id=1' or '1'='1 カ ...

7月21日 21:37 投稿

SQLインジェクションのリスクと対策

SQLインジェクションのリスク SQLインジェクションの定義 SQLインジェクションのリスク確認 ユーザーログインシミュレーション 通常のログイン: SELECT * FROM userinfo WHERE name = 'カイガ318' AND pwd = 666; 注入攻撃: SELECT * FROM userinfo WHERE name = 'カイガ318';-- AND pwd = 'パスワードです'; アカウントを知らなくても攻撃可能: SELECT * FROM userinfo W ...

7月16日 21:07 投稿

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 投稿