0ctf_2017_babyheap

拿到题目,例行检查

0ctf_2017_babyheap

 

 0ctf_2017_babyheap

 

 64位的程序,保护全开,应该是堆溢出的题目

将程序放入ida中,程序没有后门函数所以需要泄露libc的版本

 

0ctf_2017_babyheap

 

 进入主页面查看,进行代码审计

在输入内容函数中

 

0ctf_2017_babyheap

 

 可以看到result这行,没有对用户输入的v3进行限定,所以存在堆溢出,可以用fastbin atack去做这道题

 

首先我们需要泄露libc的版本

0ctf_2017_babyheap

 

 我这里使用的方法是通过溢出将chunk2释放到unstbin中获得libc的值,也可以使用double free去泄露

 

泄露libc的版本需要知道偏移,可以通过vmmap,用泄露出的值减去0x7f72f8758000,得到偏移是3951480

 

0ctf_2017_babyheap

 

 

获得libc的偏移后可以通过溢出到fd指针将堆转移到malloc_hook的周围,

因为程序调用malloc的时候都会检查malloc_hook的值,free也是同样如此

当我们在malloc_hook覆盖上one_gadget的值后

malloc一个堆就是相当于运行system(‘bin/sh‘)

完整exp如下

 

0ctf_2017_babyheap

 

 

 

0ctf_2017_babyheap

 

 成功获取shell

 

0ctf_2017_babyheap

 

 结束!!!

0ctf_2017_babyheap

上一篇:植物大战僵尸的石头怪


下一篇:mybatis