Tcache attack

本文最后更新于 2026年1月1日 晚上

参考

CTF-WIKI

Tcache poisoning

简单来说

就是通过修改被free后的chunk->fd的值就能实现任意地址申请

假设

tcache bins

0x20:&(chunk0->fd) <- 0

0x30:&(chunk1->fd) -> &(chunk2->fd) ->…

通过的chunk0进行修改,可以直接获取到0x30的链/任意地址的chunk,具体如下

Tcache dup

2.27-3ubuntu1_amd64并没有对dup进行检测,可以直接实现dup

和 fastbin dup类似

简单来说

通过两次连续的free(&(chunk->fd)),使得chunk->fd = &(thunck->fd),这时候如果能够修改thunck->fd的内容,就可以实现任意内存申请

这里注意一个问题:实现下述语句的条件

chunk->fd = &(thunck->fd)

是在tcache bins里只有chunk它本身,即 tcache bins : &(chunk->fd)

如果说tcache bins里有其他的chunk如下:

tcache bins : &(chunk0->fd) ->&( chunk1->fd)

那么两次连续的free(&(chunk->fd))(dup)得到的是chunk->fd = &(thunck0->fd),也就是当前tcache bins的头链

Q-A

Q:为什么要double free?free一次,修改chunk->fd不也能修改链表吗

A:在没有Edit功能的时候,通常只会在Add功能里能够修改chunk->fd,但是如果我把bins里唯一一个申请走了,修改将无效。


Tcache attack
https://tforevery.github.io/PWN/HEAP/Tcache-attack/
作者
TY
发布于
2025年12月24日
许可协议