Unsorted bin Attack
本文最后更新于 2025年12月30日 凌晨
参考
Unsortedchunk模板
1 | |
实现要求
- 堆溢出
- 待unsorted chunk不与TOP chunk相邻
原理
这个攻击有点像Unlink,但是可能更高效一点(在进行攻击的时候)但是也有缺点,就是单纯的Unsorted bin Attack下,任意内存写入的数据内容不可控,简单理解下
当我们申请的
chunk->size >= 0x90的时候,再free(chunk),该chunk会进入unsortedbinunsortedbin是个双向链表管理器,通俗来讲,它有个最高等级的(虚假的这里我用虚线来表示)
tmp_chunk来管理双向链表

当我要将chunk1从这个双链中脱出
- 更新tmp_chunk->bk
- 更新chunk0->fd
1 | |
- victim实际上就是unsortedbin中链表的最后一个chunk(这里就是chunk1)
- 那么bck就是chunk0
- unsorted_chunks (av)就是tmp_chunk
翻译一下就是
tmp_chunk->bk = bck == victim->bk
bck->fd = tmp_chunk
tmp_chunk->bk = victim->bk
victim->bk->fd(实际就是bck->fd:chunk0->fd) = tmp_chunk
victim->bk+2 = tmp_chunk
看得难受?没事,上图

那也就说,当我们控制了victim->bk值,那么我们就能将
tmp_chunk写入任何地址上,但是tmp_chunk的值我们无法控制看表达式
- victim->bk = target-2
- tmp_chunk->bk = target-2
- victim->bk+2 [target] = tmp_chunk
例题
ctfshowpwn144
edit:存在堆溢出漏洞

EXP
1 | |
代码解释

Unsorted bin Attack
https://tforevery.github.io/PWN/HEAP/Unsorted-bin-Attack/