Web Security Academy
Hello there, ('ω')ノ バイブル本の第三弾が出版されました。 https://www.amazon.co.jp/dp/B0GKCT6NPC/ref=sr_1_7?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=2VSB9M7CNTS5V&dib=eyJ2IjoiMSJ9.NCDkpByyBJllrmWoy_dgXqWyBT2yIi-CBivdvd0WyreR3_n…
Hello there, ('ω')ノ 最近、なかなかブログの記事が更新できていませんが、バイブル本の第二弾を出版しました。 https://www.amazon.co.jp/dp/B0GHZFT54J/ref=sr_1_2?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=1PP8EIRU5SK5Q&dib=eyJ2IjoiMSJ9…
Hello there, ('ω')ノ ようやく、PortSwigger社のWeb Security Academyをわかりやすく解説したバイブル本を出版しました。 随時、他の脆弱性についても出版予定です。 また、LABについての解説と動画も準備中です。 ちなみにPortSwigger社からは、許可を得て…
Hello there, ('ω')ノ PortSwigger社の承諾を得て、近日中にアマゾンにて販売予定。 20以上の脆弱性ごとにシリーズ化。 初学者にもわかりやすく、世界レベルで高度な内容まで細かく網羅しています。 Best regards, (^^ゞ
Hello there, ('ω')ノ 概要(ラボの目的と達成条件) このラボでは、OAuth(ソーシャルログイン)の実装不備を悪用して、他人のアカウントへログインする手法を学びます。 アプリは外部の OAuth サービス(ソーシャルメディア)を使ってログインさせています…
Hello there, ('ω')ノ 概要(ラボの目的と達成条件) このラボは、CSRF(クロスサイト・リクエスト・フォージェリ) の基本を学ぶための入門演習です。 対象アプリの「メールアドレス変更」機能には 一切の CSRF 防御がなく、被害者がログインした状態で攻撃…
Hello there, ('ω')ノ 概要(ラボの目的と達成条件) このラボは、公開された API ドキュメントが攻撃者にどれほど危険かを学ぶ入門レベルの演習です。 目的は API ドキュメントの露出を悪用して、ユーザー carlos を削除すること です。 攻撃者としてログイ…
Hello there, ('ω')ノ 1. 概要(このラボで何を学ぶか) このラボでは、 パスワードリセット機能のロジックが壊れている(不完全)ことで、 リセットトークンを持っていない他人のアカウントのパスワードを変更できてしまう という脆弱性を学びます。 具体的…
Hello there, ('ω')ノ ■ 概要(この文書で何を学べるか) このラボでは、 2FA(多要素認証)の “実装ミス” により、本来必要な 2FA コードを持っていなくてもユーザのアカウントへアクセスできてしまう脆弱性 を学びます。 ポイントは次の通り: 2FA 本体で…
Hello there, ('ω')ノ 概要(この文書で何を学べるか) このラボでは、ログイン機能の エラーメッセージの違い から、 存在するユーザ名だけ異なる応答を返してしまう脆弱性(username enumeration) を悪用して、 有効なユーザ名の特定(列挙) そのユーザ…
Hello there, ('ω')ノ ✅ APIとは? API(Application Programming Interface)とは、アプリケーション同士が通信・データ連携を行うための仕組みです。 Webアプリケーションでは、ユーザインターフェース(フロントエンド)の裏側でAPIが重要な役割を果たし…
Hello there, ('ω')ノ 動画 youtu.be 要点 Intercept(Proxy):ブラウザから送られる「そのままの生のリクエスト」をリアルタイムで止めてその場で書き換えられる。ワークフローを崩さずに素早く試せるのでログイン系のワンショット操作に便利。 Repeater:…
Hello there, ('ω')ノ 動画 youtu.be 1. タイトル Lab: Exploiting origin server normalization for web cache deception — オリジンサーバの正規化(Normalization)を突いて API キーを取得 2. 注意書き 重要:本記事は学習目的のみ。ラボ以外での実施は…
Lab: Exploiting path delimiters for web cache deception — 解説と手順(PRACTITIONER・アウトライン統一版) 動画 youtu.be 1. タイトル Lab: Exploiting path delimiters for web cache deception — パス区切り文字の解釈差異を突いて API キーを奪取 2.…
Hello there, ('ω')ノ 動画 youtu.be 1. タイトル Lab: Exploiting path mapping for web cache deception — パス正規化の差異を突いた Web Cache Deception で API キーを奪取 2. 注意書き 重要:この手順は学習目的であり、ラボ以外の環境で絶対に実行しな…
Hello there, ('ω')ノ 動画 youtu.be なぜ forms[1] が削除フォームなのか? ラボの /my-account ページの HTML ソースを確認すると、次のようにフォームが並んでいます: <form class="login-form" name="change-email-form" action="/my-account/change-email" method="POST"> ... </form> <form id="delete-account-form" action="/my-account/delete" method="POST"> </form>
Hello there, ('ω')ノ 1. 概要:ガジェットとは何か(復習) プロトタイプ汚染そのものは「Object.prototype にプロパティを追加できる状態」。 でも実害にするには ガジェット(gadget) が必要:アプリがそのプロパティを検証無しで読み取り、危険な使い方…
Hello there, ('ω')ノ 概要(短く) 攻撃のアイデア:Object.prototype に任意プロパティを追加できれば、ページ内の多くのオブジェクトがその値を継承する。 クライアント側での典型的な入力経路:クエリ文字列、ハッシュ(フラグメント)、JSON入力(postM…
Hello there, ('ω')ノ ガジェットとは何か? 簡単に言うと、アプリやライブラリが信頼して使っているプロパティで、以下の2つを満たすものが「ガジェット」と呼ばれます: 条件 説明 ✅ アプリがそのプロパティを使っている しかもフィルターや検証なしに使…
Hello there, ('ω')ノ 攻撃に使われる悪意あるJSON 攻撃者が以下のようなJSONを送信したとします: { "__proto__": { "evilProperty": "payload" } } 例えば、WebSocketのメッセージやAJAXリクエストなどでサーバやフロントエンドに送信されることがありま…
Hello there, ('ω')ノ 攻撃の出発点:悪意あるURL https://vulnerable-website.com/?__proto__[evilProperty]=payload このURLのクエリパラメータ部分に注目してください: ?__proto__[evilProperty]=payload これは、JavaScriptでオブジェクトを作成する時…
Hello there, ('ω')ノ 問題のコード:1行ずつ分解 まず、改めて「マージ関数」と「渡すデータ」を確認します: マージ関数 function merge(target, source) { for (let key in source) { if (typeof source[key] === 'object') { if (!target[key]) target…
Hello there, ('ω')ノ 危険な関数 まず、以下の関数は「2つのオブジェクトをマージ(結合)する処理」です: function merge(target, source) { for (let key in source) { if (typeof source[key] === 'object') { if (!target[key]) target[key] = {}; me…
Hello there, ('ω')ノ プロトタイプ汚染とは? Prototype Pollution(プロトタイプ汚染) は、JavaScriptの「プロトタイプ継承」の仕組みを悪用して、攻撃者がグローバルオブジェクトに不正なプロパティを追加し、それを他のオブジェクトに「引き継がせる」…
Hello there, ('ω')ノ 要約(結論) このラボは フロントエンドが Transfer-Encoding(chunked)を使い、バックエンドが Content-Length を使う(TE.CL)不一致 を突く典型例です。Burp Repeater で HTTP/1.1 にし、「Update Content-Length」をオフにした状…
Hello there, ('ω')ノ 概要 HTTP/1.1 の chunked 転送 を使った挙動で、末尾の 0(ゼロチャンク)の後に正しい改行(CRLF)があるかどうかで挙動が大きく変わります。実際に「最後の 0 のあとに改行がないと smuggling が成立しない」理由は、チャンク終端の…
Hello there, ('ω')ノ 背景の直感(なぜ動くのか、噛み砕いた説明) HTTP/1.1 では「リクエストの終わり」を決める方法が主に Content-Length(ボディのバイト長を明示)と Transfer-Encoding: chunked(チャンクで区切る)の 2 種類あります。 フロント(ロ…
Hello there, ('ω')ノ 概要:発生の根本原因(短く一言で) HTTP/1.xがリクエストの終端(どこで1つのリクエストが終わるか)を指定する方法を複数持っていて、それらが矛盾したり、フロントエンドとバックエンドで扱いが異なるために生じる曖昧さがリクエス…
Hello there, ('ω')ノ 前提:扱うサンプル(行末は \r\n と数えます) クライアントがフロントに送った文字列(省略せず可視化): POST / HTTP/1.1\r\n Host: vulnerable\r\n Content-Length: 20\r\n Transfer-Encoding: chunked\r\n \r\n 0\r\n \r\n GET /…
Hello there, ('ω')ノ 全体像(何が起きるのか) 汚染源:アドレス変更フォームの JSON をそのままサーバオブジェクトへマージしている 検知の合図:"__proto__": {"json spaces": 10} を入れると、レスポンス JSON のインデントが増える ガジェット:メンテ…