完整exp# frompwnimport*sh:tube = process("./sctf_2019_easy_heap")LOG_ADDR =lambdax, y: log.success('{} ===> {}'.format(x,hex(y)))int16 = functools.partial(int, base=16)defAllocate(size:int) ->int:sh.sendlineafter(">> ","1")sh.sendlineafter("Size: ",str(size))sh.recvu...
先利用off by null漏洞做一个堆块重叠,然后打tcache dup,此时就可以再打tcache poisoning了,由于我们知道那片可读可写可执行的内存地址,所以我们直接将其申请出来,写入shellcode。(我这里是提前准备了两组tcache dup) 这部分的exp为: p.recvuntil('Mmap: ') leak_addr=int(p.recv(12),16) log_addr('leak_...
2.doublefree->实现任意地址写 这道题的关键点在于offbynull,从overlap入手,写hook 题目开了个很大的空间,那我们就写shellcode 再利用overlap实现unsortbinattack,修改到mallochook 不用泄露libc EXP frompwnimport*p=process("./sctf_2019_easy_heap")#p = remote('node4.buuoj.cn',25072)context.log_level=...
利用思路是再进行一次堆块重叠的布局,然后这次不打tcache dup,直接先将spy chunk(堆块重叠的那个chunk)释放掉,然后让unsorted bin的fd指针落在spy chunk上,这样tcache bin链上就出现了libc地址。然后将spy chunk的内存申请出来(因为我们造成了堆块重叠,所以即可以让spy chunk处于tcache链上,同时还能把它申请出来进行...
程序首先会分配一块mmap的内存出来,并且有rxz权限 在edit中,有一个这样的函数,很明显可以看出有off-by-null的漏洞 漏洞利用 很经典的一道题ubuntu18上的unlink,通过overlap形成double free在将chunk分配进mmap,接着重复一遍,将malloc hook劫持即可 首先程序有off-by-null,由于chunk的大小不小于0x400就不会被放入tac...
这样就形成了这样的结构 然后我通过释放掉chunk 3 chunk 1 chunk 2 从而获得了tcachebins的那种结构,然后我们在申请 chunk1回来,就可以修改mmap的内容了 完整exp如下 frompwn import *context(arch='amd64',os='linux') p= process('./sctf_2019_easy_heap') ...
博客园 首页 新随笔 联系 订阅 管理 Copyright © 2025 lemon想学二进制 Powered by .NET 9.0 on Kubernetes
sctf 2019 easy heap Write Up 概略# 这道题属于典型的菜单题,但是不提供show的功能,整个逻辑中,只存在一个off-by-null的漏洞。比较值得在意的是,程序的开始,利用mmap分配了一块拥有可读可写可执行权限的内存区域,并将该区域的地址打印出来,同时程序调用alloc功能的同时也会打印出了存放堆指针与size的数组。