完整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...
然后在程序的开始部分,使用mmap函数映射了一段可读可写可执行的内存区出来,并将该地址打印了出来。 利用思路: 这题的libc版本是2.27,因此可以利用off by null打一个tcache dup。但难点在于没有show函数,且开了FULL RELRO保护。通常我们采取的措施是io 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=...
这时我们在申请一个chunk 大小跟先前的第0个一样,构造double free,并且对mmap处的内存进行写入shellcode 这时我们同理,在构造一个double free,通过unsorted bin中main_arena+96与__malloc_hook在libc-2.27的相差为0x30,所以在填入这个就是__malloc_hook了,之后把mmap的地址填入malloc_hook的位置,在调用add即可...
sctf2019_easy_heap 保护策略: 漏洞所在: 在input函数中,存在一个off by null漏洞。 并且程序执行mmap来映射了一段可读可写可执行的地址,并且还把地址打印了出来。 大致思路: 首先是这道题映射了一段可读可写可执行的区域,同时没开沙箱,如果我们可以在这个地方写入shellcode的话,其实我们再劫持free_hook的时候,...
这样就形成了这样的结构 然后我通过释放掉chunk 3 chunk 1 chunk 2 从而获得了tcachebins的那种结构,然后我们在申请 chunk1回来,就可以修改mmap的内容了 完整exp如下 frompwn import *context(arch='amd64',os='linux') p= process('./sctf_2019_easy_heap') ...
sctf 2019 easy heap Write Up 概略# 这道题属于典型的菜单题,但是不提供show的功能,整个逻辑中,只存在一个off-by-null的漏洞。比较值得在意的是,程序的开始,利用mmap分配了一块拥有可读可写可执行权限的内存区域,并将该区域的地址打印出来,同时程序调用alloc功能的同时也会打印出了存放堆指针与size的数组。
博客园 首页 新随笔 联系 订阅 管理 Copyright © 2025 lemon想学二进制 Powered by .NET 9.0 on Kubernetes