Flag Printer 2026 - timeout + arbitrary 1-byte write
NOTE: Flag Printer 2026 を先に解く必要はありません。
初心者向けヒント1
- この問題では、フラグを
Alpaca{の長さ分、一文字ずつ出力しています。つまり、Alpaca{しか出力されません。 - しかし、出力する前に
/proc/self/memを操作できます。 /proc/self/memは プロセスファイルシステム の一つで、現在のプロセス自身の仮想メモリを指します。- 通常は
/proc/self/mapsで有効なメモリ範囲を確認してから、そのアドレスに seek して読むといった使い方をします。 - この問題では、この
/proc/self/memの仕組みを使って、任意のアドレスに任意の1バイトを書き込むことができます。 - また、
id(0)がヒントとして出力されており、0のアドレスを確認できます。 - では、どうしたらフラグを出力できるでしょうか?
初心者向けヒント2
- このループでは、
iを始め、内部で様々な整数オブジェクトが使われています。 - まずは、整数オブジェクトがどのようなレイアウトでメモリに保存されているかを確認してみましょう。
- そして、整数オブジェクトにどのように数値が保存されているか調査してみましょう。
- また、適当な整数オブジェクトを書き換えて、どうスクリプトの挙動が変わるかを試してみましょう。