10のWriteupこんにちは。私がkeymoonです。CTFのすべてをお話します。CTFにも参加していたので、全完してm0lec0nに戻るという強い意志でkeynoonさんと参加しました。solves)ソースコードが割と長いので、いつものシリーズ物(似たような構成の問題が3つある)っぽいです。SSPが無効ですが、PIEは有効。enabledまずallocaで変数を確保して、データを読み込みます。printf("-------------------------------------\n\n");readline_nはNULL終端でないので、age以外からも未初期化の変数をリークできます。データを修正できるのですが、Jobの修正箇所で変数サイズが間違っているため、スタックバッファオーバーフローになります。break;老眼なので最初libcのバージョンを2.35と見間違えていてYouTubeで質問する老人になりましたが、2.31でした。enabledまぁallocaしてるのでバッファより高位にアドレスが存在します。readline_nがdefineで定義されているため、readline_nのループ内で毎回allocaが作ったバッファアドレスが使用されます。したがって、スタックバッファオーバーフローで構造体のアドレスの下位1バイトが書き換わると、そこから不正なアドレスを書き換え始めます。canaryをスキップしてリターンアドレスが書き換えられそうです。アドレスリークですが、readline_nが相変わらずNULL終端でないので、限界まで書き込むとその後ろにあるアドレスが取得できます。solve)ぬぅうん。canaryをスキップしてリターンアドレスを書き換えられますが、プログラムのロードアドレスが取れなくなりました。CTFでそんな問題出すかぁ?とか思いつつも実装したら、想定解だったそうです。gadgetでやってしまい、想定解よりかなり確率が下がっております。難読化されているが、eqの近くにechoを置いたらフラグが出てくる。2023が楽しみですね。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。