📘
Web CTF 攻撃方法まとめ
言語別
javascript/Typescript(共通)
- parseIntの仕様を利用したWAF回避
- prototype pollution
- yaml-Typescript polyglot
- URLの挙動
- Py2Js Jail
Nodejs/Typescript(サーバー)
- Dynamic Importを利用したWAF回避
- デバッガーの利用
- CVE-2024-21891
- process.binding
python
- Class injection
-
nan > 0 == false
、nan <= 0 == false
PHP
- ディレクトリトラバーサル + Sessionファイルの利用
- assertを利用したLFI
- PHP-FPMが
admin.php/.php
をadmin.php
と解釈する
Rust
- BatBadBut
Prolog
- application/x-prolog
ライブラリ/フレームワーク/アプリケーション
MongoDB
- 文字列の
$gte
を利用したWAF回避 - ObjectIDの推定
SQL全般
- ハッシュされた値によるインジェクション
MySQL
- Type juggling
Electron
-
contextIsolation: false
を利用したRCE
Nextjs
- CVE-2024-34351によるSSRF
-
_buildManifest.js
を利用したルートの列挙
Reactjs
- Hooksの実行順序に関するバグ
-
is
パラメータを利用して、custom elementと誤認させる
Closure
- goog.uri.utils.Uri.parseの仕様
Flask/Jinja
- Jinja InjectionからRCE
-
{{config}}
から情報取得
Bunjs
- BunシェルによるRCE
- Bun.fileがヌル文字でファイル名を途切れさせる
- Bunのクラッシュ
- Bun.serveのHostの挙動
- Jail
Sinatra
- Sinatraの500番台レスポンス
nginx
- Request splitting
Drogon
- CSPファイルのWAF回避
Smarty
Genie
- テストファイルのインクルード
Osquery
-
curl
のCRLFインジェクション
Hono
- Hostの挙動
ブラウザ仕様
Google Chrome
Chromeアプリ
- Chromeアプリで利用されるファイルを取り出す問題
Chrome Extension
-
tab.pendingUrl
を利用したOriginの偽装 - ファイル探索/LFI
Shadow DOM
- リダイレクト+
window.frameElement.src
を用いたURLの取得
Object fallback
CSS Injection
- Input要素の中身を取得する
- View Transitoin API
CSP
- metaリダイレクト
- CDN + AngularJS
- Nonceハッシュの取得・変更
Content Type
-
,
による複数列挙
その他XXS
- ISO-2022-JPを利用したエスケープ回避
- 空白禁止bypass
その他XS-Leak
- 親ウィンドウをリダイレクトさせることによる、ユーザーの偽装
- 長過ぎるURLでエラーを発生させる
- IDアトリビュート
その他
File URI Scheme
-
file://localhost/
の記法
認証
- 時間サーバーの偽装
- Hash Length Extension Attack
- CBC Bit-flipping Attack
JWT
- Algorithm confusion attack
- HS256で同じSSLと同じ公開鍵を使ったパターン
正規表現
-
[A-z]
に[\]^_
が含まれる
SSRF
- Open Redirect + hostnameの偽装
CSRF
- SPAのAPIを利用する
- rcloneのCSRF
LLM
- LLMを利用したWAF + Prompt Injection
Race condition
- Imaginary CTF 2024 - The Amazing Race
- ファイル生成から削除までにアクセスする
Blind search
- Command Injection + Blind search
圧縮ファイル
- Zip slip
クラウド
- aws s3の設定ミス
Discussion