【PWN】House of Lore&House of Rabbit

House of lore

House of lore是一种利用small bin的利用方法。

前面我们通过修改unsorted bin与large bin的bk(bk_nextsize)位来造成对”任意“地址的更改。unsorted bin由于修改后,如果无法妥善处理bk指向的chunk的size位、bk位,会造成unsorted bin无法再使用,largebin由于是通过fd_nextsize来便利的,所以下次放入影响会小,而下次取出,假如可取出比修改的chunk小的chunk,还可以继续使用。以上是我对之前unsorted bin与large bin attack思考。

这里为什么会回忆起这两个利用的原因是House of lore 的利用通过的就是修改small bin的bk位,而与上面利用方法不同的是,这次是通过取出,从而修改任意地址的内存。

贴一下利用点的源码,做了删减,只展示相关代码。


victim = last(bin)
 bck = victim->bk;
// 检查 bck->fd 是不是 victim,防止伪造
if (__glibc_unlikely(bck->fd != victim)) {
   errstr = "malloc(): smallbin double linked list corrupted";
   goto errout;
  }
// 设置 victim 对应的 inuse 位
set_inuse_bit_at_offset(victim, nb);
// 修改 small bin 链表,将 small bin 的最后一个 chunk 取出来
bin->bk = bck;
bck->fd = bin;

假设我们修改最后一个small chunk的bk位,使其对向fake chunk,那么我们有可能通过两次malloc获得此fake chunk。

不过利用上也有很大难点。由于需要绕过bck->fd!=victim 的检测,我们还需要妥善处理fake chunk的fd位,甚至还有bk位,bk->fd位,以便第二次malloc同样绕过。

看起来利用条件还是很苛刻的。

House of Rabbit

通过利用malloc_consolidate函数,实现overlapping的效果或对”任意“位置的读写。

第一种情况,修改size位,实现overlapping

示例:

unsigned long* chunk1=malloc(0x40); //0x602000
unsigned long* chunk2=malloc(0x40); //0x602050
malloc(0x10);
free(chunk1);
free(chunk2);
chunk1[-1]=0xa1; //modify chunk1 size to be 0xa1
malloc(0x1000);  //allocate a large chunk, trigger malloc consolidate

这时会使chunk1变成一个大chunk,从而实现overlapping。利用点在于malloc_conslidate缺少对size位的检测。

第二种情况,修改fd位,实现对”任意“位置的读写

示例:

unsigned long* chunk1=malloc(0x40); //0x602000
unsigned long* chunk2=malloc(0x100);//0x602050

chunk2[1]=0x31; //fake chunk size 0x30
chunk2[7]=0x21  //fake chunk's next chunk
chunk2[11]=0x21 //fake chunk's next chunk's next chuck
free(chunk1);
chuck1[0]=0x602060;// modify the fd of chunk1
malloc(5000);// malloc a  big chunk to trigger malloc consolidate

对于此利用,有一点需要注意

虽然malloc consolidate会把fastbin中的项放至unsorted bin,但由于后续遍历unsorted bin,其会被放置在相应大小的bin,例如small bin。

不过个人感觉可利用场景不太广泛,拥有修改size的能力话,正常extend就可以实现overlapping。如果是修改fd,正如示例写的那样,需要设置fake chunk’s next chunk与fake chunk‘s next chunk’s next chunk位,因为malloc consolidate 还会对物理相邻地址前后进行合并,以防出现一些意想不到的错误。特殊情况特殊分析,期待未来能见到相关利用的题。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值