よくあるヒープのメモサービス系。特徴は最新のglibcが使われていること。 最新のmallocの実装では、PROTECT_PTRというマクロに依って、アドレスを12bitずらした部分(つまりASLRで使われている乱数)を使い、fd,bkなどのメンバーにxorをかけています。 本問題ではUAFも二重解放もヒープオーバーフローもあるのでそれだけ気をつけてexploitします。
まず2つ領域を確保し開放します。領域のサイズは0x100なので、tcacheなどを気にする必要はありません。 次にUAFを使い確保される領域を操作します。スタックのアドレスは最初に入手していて、またヒープのアドレスも入手できるため、任意の領域を取得するための値を生成できます。それをfdメンバーに書き込みもう一度確保をすることで、スタック領域へのポインターをmallocで取ってこれます。 最後に、edit関数内でROPをします。StackCanaryはeditには存在していないため、確保する場所に気をつければ簡単にROPできます。 シェルが取れます。終わり