RCTF 2018 writeup
babyheap
bug: 1. Alloc
にoff-by-one single byte null overflowがある。
下のチャンクのsizeが上書きでき、サイズの縮小とPREV_INUSEビットのクリアができる。
適当にやればチャンクのoverlapができるので、libcのアドレスをリークをしてfastbin attackをした。
__malloc_hookにone gadget rceを書き込んだ。
https://gist.github.com/hama7230/86643fbf8ad4b6f31521e77a3339b4cf
RNote4
editで入力するサイズの整合性を確認していないため、allocで作成した時のサイズよりも大きい値を入れればheap bofとなる。 editで書き込めるポインタがあるので、そこを書き換えることで任意アドレスの書き換えが出来るようになる。 リークができそうな部分がないが、No PIEでNo RELROとなっているので何とでも出来る。 No RELROなのでstrtabを偽装して、名前解決時にfreeをsystemへとすり替えた。
https://gist.github.com/hama7230/2483803ead0853b7b218b5402986b9fe
stringer
競技中には解けなかった。 UAFがありdouble freeができる。しかしcallocによって割り当てられた領域は0初期化されてしまうので、アドレスのリークができない。 callocでは、IS_MMAPPEDビットがたつチャンクの0初期化が行われないようになっているので、editで当該ビットを立てるようにする。
あとはfastbin attackから__malloc_hookへone gadget rceを書き込んだ。
https://gist.github.com/hama7230/9c74cf53fa2d553cb3baea56a881fbbc
cpushop
hash length extention attackをする。
https://gist.github.com/hama7230/c6b89247bb7a941cdc4e976e16232779
git
blobをzlibで解凍してみたら、flagがあった。