Hello there, ('ω')ノ
👀 どうやって見つけるの?
🧪 1. 通信の中にシリアライズされたデータがないか探す
Burp Suiteやプロキシツールで、Webアプリケーションとサーバーのやり取り(リクエストとレスポンス)を観察します。
🔍 よく見かけるシリアライズ形式
🐘 PHPのシリアライズ形式
人間でも読める形式で、文字と数字の組み合わせになっています。
例:
O:4:"User":2:{s:4:"name":s:6:"carlos";s:10:"isLoggedIn":b:1;}
意味:
O:4:"User"
→ 「User」という名前のクラスのオブジェクト2
→ 属性が2つあるs:4:"name"
→ 「name」というキーs:6:"carlos"
→ 値は「carlos」b:1
→ 値は真(true)
💡 PHPでは、serialize()
とunserialize()
を使う箇所をソースコードで検索すれば、脆弱な処理を特定しやすいです。
☕ Javaのシリアライズ形式
バイナリ形式なので読みにくいですが、特定のパターンがあります。
- 先頭のバイト列が必ず
ac ed
(16進数)やrO0
(Base64)から始まる。 java.io.Serializable
インターフェースを実装しているクラスはシリアライズ可能。readObject()
メソッドでオブジェクトを読み込んでいる箇所を探す。
🧠 Burp Suite Proの便利機能
Burp Suite Professionalでは、シリアライズされたオブジェクトらしきデータを自動で検出してフラグ付けしてくれます。
✅ まとめ
言語 | 見分け方 | 注意点 |
---|---|---|
PHP | O: や s: などのシリアライズ文字列 |
unserialize() を使う箇所を重点的に調査 |
Java | バイナリデータ(ac ed や rO0 ) |
readObject() を使う箇所に注意 |
Best regards, (^^ゞ