介绍
在每一个 pwn
手的溢出路上,总是有各种的保护措施来阻拦我们,其中第一难就是一只灵巧的金丝雀,它优雅的站在栈上,就像神话中的永远捉不到幸福鸟,一旦接近,就会被
__stack_chk_fail() 无情的 smash 掉……
扯偏了,我们回到正题……
Canary 是 Linux
系统的一种用于运行时检测栈溢出的保护措施,名字来自历史上矿工们用金丝雀来检测矿井中有毒气体的含量,恰如其名,Canary
会在攻击者劫持返回地址前就终止程序,防止被利用。
由于其实现简单、性能开销小、功能强大,现在已经成为保护措施的标配。
原理
Canary 的工作原理是在函数开始前在栈上插入一个随机数,像这样:
12345678910+------------------+ 高地址| 返回地址 |+------------------+| 保存的 RBP |+------------------+| Canary |+------------------+| 局部变量 |+------------------+ 低地址
由于 ...
介绍
Unsorted Bin Attack 是一种利用 unsorted bin
漏洞实现任意地址写的攻击手段。但是其只能将目标地址写为一个较大且不可控的值,虽然比较鸡肋,但是常常作为一种辅助攻击手段发挥作用。
原理
unsorted bin 采用双向链表管理 chunk,遵循 FIFO 的规则,当我们试图从
unsorted bin 取出一个堆块时,会发生如下操作将 chunk 从链表中脱离:
123456victim = unsorted_chunk(av)->bk;bck = victim->bk; if (__glibc_unlikely (bck->fd != victim)) malloc_printerr ("malloc(): corrupted unsorted chunks 3");unsorted_chunks (av)->bk = bck;bck->fd = unsorted_chunks (av);
正常情况下这段代码运行的很好,可是一旦 bk
被篡改,那我们就可以控制任意地址写入
unso ...
介绍
House of Botcake 算是我第一个真正学会的 House of XXX
系列的攻击手段。它利用 glibc 堆管理器本身的设计缺陷来制造 double-free
,不仅非常精妙,而且方便使用、威力巨大。搭配 tcache poisoning
能够轻松制造任意写。
原理
虽然 glibc 在 2.29 为 tcache 添加了 double-free 检查,但是仅会检查
tcache 链表本身是否存在 double-free,而不会检查其他 bin 中是否存在 free
过的 chunk。
由于 tcache 本身的设计,这使得一个可以进入 tcache 的 chunk 必然可以进入
fast bin 或 unsorted bin。House of Botcake 利用这一点,将同一个 chunk
首先释放到 unsorted bin,之后再次释放到 tcache。成功实现
double-free。
条件
House of botcake 需要程序能同时分配 10 个 chunk,且存在 UAF
漏洞或可以多次释放一个指针的漏洞。
需要glibc >= 2.27 ...
