document.cookie
secret_recipe=cGljb0NURntjMDBrMWVfbTBuc3Rlcl9sMHZlc19jMDBraWVzX0M0MzBBRTIwfQ%3D%3D
のように今のサイトに保存されているクッキーが取得できる
.split("=")
document.cookie.split("=")
= で文字列を区切る。
結果はこうなる:
[
"secret_recipe",
"cGljb0NURntjMDBrMWVfbTBuc3Rlcl9sMHZlc19jMDBraWVzX0M0MzBBRTIwfQ%3D%3D"
]
atob()
atob(文字列)
👉 Base64をデコードする関数。
つまり:
Base64 → 元の文字列
に戻す。
head-dump
サーバーのメモリ(heap)をそのままファイルに吐き出す機能。
JavaやNode.jsなどのアプリケーションで、バグ調査やパフォーマンス確認のために使われる。
このダンプには、実行中の変数や認証情報など、機密データが含まれていることが多い。
ダンプする機能とは?
開発や運用のために、サーバーの現在の状態を一括で保存する機能。
正常なら認証付き・ローカル限定・開発環境のみで使う。
ROT13とは
アルファベットを13文字ずらす単純な換字暗号。
例:
- A ↔ N
- B ↔ O
- C ↔ P
実際に変換すると:
ABGR → NOTE
medium crack the Gate2にて
① サーバーはレート制限をしている
本物IP(TCP層)で管理するべき
仕様:
同じIPから何回もログイン失敗 → 20分ロック
つまり内部では多分こうなっている:
failed_attempts[ip] += 1
if (failed_attempts[ip] > 1) {
lockout()
}
→サーバーがHTTPヘッダーのXFFを信頼
② サーバーは「IP」をどう取得している?
普通は:
req.ipやreq.connection.remoteAddress使う。
③ でもこのサーバーは…ヒントにあった:X-Forwarded-Forを使っている可能性がある。
つまり内部でconst ip = req.headers["x-forwarded-for"];みたいなこをしている。
🚨 ここが致命的ミスX-Forwarded-For はユーザーが自由に書けるヘッダーつまり:
X-Forwarded-For: 1.1.1.1も
X-Forwarded-For: 999.999.999.999も自由。
pngについての問題 難易度medium Trickstar
サイトには:📂 「PNG画像だけアップロードできます」
と書いてある。
ここで考えるべきこと
「どうやってPNGかどうか判定してるん?」
普通は2パターン:
① ファイル名を見るだけ
② ファイルの中身(先頭バイト)を見る
PNGの正体
PNGファイルは必ず先頭がこれ:
89 50 4E 47 0D 0A 1A 0A
つまりサーバーは:「最初がこれならPNGでしょ」って思ってるだけ。
ここが穴サーバーは:✔ 先頭だけチェック
✔ それ以外は見てない
ならどうする?
発想
「じゃあ先頭だけPNGにして、後ろに悪いコード書けばいいやん
robots.txtとは?
通常、webサイトのルートに配置されているファイルで、クローラー(ウェブページからデータを収集するために自動的にウェブを閲覧するbot)からウェブサイトへのアクセスを許可するか、禁止するかを決定するファイル。
JAuth について (JAuth PicoCTF/medium/)
ログインに成功し、そこからのJWTでのクッキーの問題。
JWTとは => ユーザーの認証情報に関してデータを安全に扱う、やり取りするためのトークン形式のこと。署名付きのJSONデータをBASE64でエンコードしたもの!
JWTはサーバーが発行し、Cookie等を利用してクライアント側に保存されます。
Base64をエンコードするだけではJWTデバッカー(https://token.dev/)
より、機密情報をやめてということ!今回の問題はuserをadminに変更し解けました!
alog=None攻撃というやつらしい
wasm2wat で何をしたか
bashwasm2wat flag2.wasm -o flag2.wat
WASMは機械語なので直接読めない
wasm2watはWASMをWAT(人間が読めるテキスト形式)に変換するツール