Shikata Ga Nai

Private? There is no such things.

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, (^^ゞ

Lab: Authentication bypass via OAuth implicit flow

Hello there, ('ω')ノ 概要(ラボの目的と達成条件) このラボでは、OAuth(ソーシャルログイン)の実装不備を悪用して、他人のアカウントへログインする手法を学びます。 アプリは外部の OAuth サービス(ソーシャルメディア)を使ってログインさせています…

Lab: CSRF vulnerability with no defenses

Hello there, ('ω')ノ 概要(ラボの目的と達成条件) このラボは、CSRF(クロスサイト・リクエスト・フォージェリ) の基本を学ぶための入門演習です。 対象アプリの「メールアドレス変更」機能には 一切の CSRF 防御がなく、被害者がログインした状態で攻撃…

Lab: Exploiting an API endpoint using documentation

Hello there, ('ω')ノ 概要(ラボの目的と達成条件) このラボは、公開された API ドキュメントが攻撃者にどれほど危険かを学ぶ入門レベルの演習です。 目的は API ドキュメントの露出を悪用して、ユーザー carlos を削除すること です。 攻撃者としてログイ…

Lab: Password reset broken logic — 解説と手順(APPRENTICE)

Hello there, ('ω')ノ 1. 概要(このラボで何を学ぶか) このラボでは、 パスワードリセット機能のロジックが壊れている(不完全)ことで、 リセットトークンを持っていない他人のアカウントのパスワードを変更できてしまう という脆弱性を学びます。 具体的…

Lab: 2FA simple bypass — 解説と手順(APPRENTICE)

Hello there, ('ω')ノ ■ 概要(この文書で何を学べるか) このラボでは、 2FA(多要素認証)の “実装ミス” により、本来必要な 2FA コードを持っていなくてもユーザのアカウントへアクセスできてしまう脆弱性 を学びます。 ポイントは次の通り: 2FA 本体で…

Lab: Username enumeration via different responses — 解説と手順(APPRENTICE)

Hello there, ('ω')ノ 概要(この文書で何を学べるか) このラボでは、ログイン機能の エラーメッセージの違い から、 存在するユーザ名だけ異なる応答を返してしまう脆弱性(username enumeration) を悪用して、 有効なユーザ名の特定(列挙) そのユーザ…

APIセキュリティテスト入門

Hello there, ('ω')ノ ✅ APIとは? API(Application Programming Interface)とは、アプリケーション同士が通信・データ連携を行うための仕組みです。 Webアプリケーションでは、ユーザインターフェース(フロントエンド)の裏側でAPIが重要な役割を果たし…

Lab: SQL injection vulnerability allowing login bypassの解説

Hello there, ('ω')ノ 動画 youtu.be 要点 Intercept(Proxy):ブラウザから送られる「そのままの生のリクエスト」をリアルタイムで止めてその場で書き換えられる。ワークフローを崩さずに素早く試せるのでログイン系のワンショット操作に便利。 Repeater:…

Lab: Exploiting origin server normalization for web cache deception — 解説と手順

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 — 解説と手順

Lab: Exploiting path delimiters for web cache deception — 解説と手順(PRACTITIONER・アウトライン統一版) 動画 youtu.be 1. タイトル Lab: Exploiting path delimiters for web cache deception — パス区切り文字の解釈差異を突いて API キーを奪取 2.…

Lab: Exploiting path mapping for web cache deception — 解説と手順

Hello there, ('ω')ノ 動画 youtu.be 1. タイトル Lab: Exploiting path mapping for web cache deception — パス正規化の差異を突いた Web Cache Deception で API キーを奪取 2. 注意書き 重要:この手順は学習目的であり、ラボ以外の環境で絶対に実行しな…

Lab: Exploiting insecure output handling in LLMs — 解説と手順

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>

クライアント側 Prototype Pollution の見つけ方とガジェット発見(DOM Invader と手動)

Hello there, ('ω')ノ 1. 概要:ガジェットとは何か(復習) プロトタイプ汚染そのものは「Object.prototype にプロパティを追加できる状態」。 でも実害にするには ガジェット(gadget) が必要:アプリがそのプロパティを検証無しで読み取り、危険な使い方…

クライアント側のPrototype Pollutionを見つける方法(初心者向け)

Hello there, ('ω')ノ 概要(短く) 攻撃のアイデア:Object.prototype に任意プロパティを追加できれば、ページ内の多くのオブジェクトがその値を継承する。 クライアント側での典型的な入力経路:クエリ文字列、ハッシュ(フラグメント)、JSON入力(postM…

Prototype Pollution Gadgets:脆弱性から実際の攻撃へ繋がる「起爆装置」の仕組みとは?

Hello there, ('ω')ノ ガジェットとは何か? 簡単に言うと、アプリやライブラリが信頼して使っているプロパティで、以下の2つを満たすものが「ガジェット」と呼ばれます: 条件 説明 ✅ アプリがそのプロパティを使っている しかもフィルターや検証なしに使…

JSONによるPrototype Pollution(プロトタイプ汚染)

Hello there, ('ω')ノ 攻撃に使われる悪意あるJSON 攻撃者が以下のようなJSONを送信したとします: { "__proto__": { "evilProperty": "payload" } } 例えば、WebSocketのメッセージやAJAXリクエストなどでサーバやフロントエンドに送信されることがありま…

URLによるPrototype Pollution(プロトタイプ汚染)の仕組みとリスク解説

Hello there, ('ω')ノ 攻撃の出発点:悪意あるURL https://vulnerable-website.com/?__proto__[evilProperty]=payload このURLのクエリパラメータ部分に注目してください: ?__proto__[evilProperty]=payload これは、JavaScriptでオブジェクトを作成する時…

なぜObject.prototypeが書き換わってしまうのか

Hello there, ('ω')ノ 問題のコード:1行ずつ分解 まず、改めて「マージ関数」と「渡すデータ」を確認します: マージ関数 function merge(target, source) { for (let key in source) { if (typeof source[key] === 'object') { if (!target[key]) target…

JavaScriptのプロトタイプ継承の仕組み

Hello there, ('ω')ノ 危険な関数 まず、以下の関数は「2つのオブジェクトをマージ(結合)する処理」です: function merge(target, source) { for (let key in source) { if (typeof source[key] === 'object') { if (!target[key]) target[key] = {}; me…

JavaScriptの脆弱性「Prototype Pollution(プロトタイプ汚染)」とは?

Hello there, ('ω')ノ プロトタイプ汚染とは? Prototype Pollution(プロトタイプ汚染) は、JavaScriptの「プロトタイプ継承」の仕組みを悪用して、攻撃者がグローバルオブジェクトに不正なプロパティを追加し、それを他のオブジェクトに「引き継がせる」…

HTTP request smuggling, confirming a TE.CL vulnerability via differential responses

Hello there, ('ω')ノ 要約(結論) このラボは フロントエンドが Transfer-Encoding(chunked)を使い、バックエンドが Content-Length を使う(TE.CL)不一致 を突く典型例です。Burp Repeater で HTTP/1.1 にし、「Update Content-Length」をオフにした状…

チャンク終端が成功の分かれ目になる理由 — `0` のあとに改行がないと TE/CL の検証が失敗する話

Hello there, ('ω')ノ 概要 HTTP/1.1 の chunked 転送 を使った挙動で、末尾の 0(ゼロチャンク)の後に正しい改行(CRLF)があるかどうかで挙動が大きく変わります。実際に「最後の 0 のあとに改行がないと smuggling が成立しない」理由は、チャンク終端の…

Lab: HTTP request smuggling, confirming a CL.TE vulnerability via differential responses

Hello there, ('ω')ノ 背景の直感(なぜ動くのか、噛み砕いた説明) HTTP/1.1 では「リクエストの終わり」を決める方法が主に Content-Length(ボディのバイト長を明示)と Transfer-Encoding: chunked(チャンクで区切る)の 2 種類あります。 フロント(ロ…

HTTPリクエスト・スマグリングはどのように発生するか

Hello there, ('ω')ノ 概要:発生の根本原因(短く一言で) HTTP/1.xがリクエストの終端(どこで1つのリクエストが終わるか)を指定する方法を複数持っていて、それらが矛盾したり、フロントエンドとバックエンドで扱いが異なるために生じる曖昧さがリクエス…

初心者向けHTTPリクエストスマグリング入門:CLとTEの食い違いをやさしく解説

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 /…

Lab: Exfiltrating sensitive data via server-side prototype pollution

Hello there, ('ω')ノ 全体像(何が起きるのか) 汚染源:アドレス変更フォームの JSON をそのままサーバオブジェクトへマージしている 検知の合図:"__proto__": {"json spaces": 10} を入れると、レスポンス JSON のインデントが増える ガジェット:メンテ…