Tcache attack
本文最后更新于 2026年1月1日 晚上
参考
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里唯一一个申请走了,修改将无效。
