堆off by one

mac2026-06-16  18

ctfwiki pwn笔记:https://ctf-wiki.github.io/ctf-wiki/pwn/linux/glibc-heap/off_by_one-zh/

off-by-one 利用思路 ¶

溢出字节为可控制任意字节:通过修改大小造成块结构之间出现重叠,从而泄露其他块数据,或是覆盖其他块数据。溢出字节为 NULL 字节:在 size 为 0x100 的时候,溢出 NULL 字节可以使得 prev_in_use 位被清,这样前块会被认为是 free 块。

    (1) 这时可以选择使用 unlink 方法(见 unlink 部分)进行处理。

    (2) 另外,这时 prev_size 域就会启用,就可以伪造 prev_size ,从而造成块之间发生重叠。此方法的关键在于 unlink 的时候没有检查按照 prev_size 找到的块的后一块(理论上是当前正在 unlink 的块)与当前正在 unlink 的块大小是否相等。

    (3) 此外,先写后面的指针再溢出可以导致指针最低为被置0;

    (4) 先溢出再修改后面的指针,导致打印原字符串时因为结尾没有0而泄露后面的内容。

最新回复(0)