from pwn import * sh:tube = process("./sctf_2019_easy_heap") LOG_ADDR = lambda x, y: log.success('{} ===> {}'.format(x, hex(y))) int16 = functools.partial(int, base=16) def Allocate(size:int) -> int: sh.sendline
然后在程序的开始部分,使用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=...
接下来就有讲究了,我们先释放掉spy chunk让其进入tcache bin中,如下 然后执行add函数申请内存,保证让unsorted bin中的fd指针落在tcache链的fd指针上。如下 最后一步将spy chunk这片申请出来(不能正好是spy chunk原本的size,不然就直接从tcache bin里拿了),比如我写的脚本里,spy chunk的大小是0x90,这里我就申请...
程序首先会分配一块mmap的内存出来,并且有rxz权限 在edit中,有一个这样的函数,很明显可以看出有off-by-null的漏洞 漏洞利用 很经典的一道题ubuntu18上的unlink,通过overlap形成double free在将chunk分配进mmap,接着重复一遍,将malloc hook劫持即可 首先程序有off-by-null,由于chunk的大小不小于0x400就不会被放入tac...
libc: libc-2.27.so python version: python3 '''local =0binary ="sctf_2019_easy_heap"libc_path ='./libc-2.27.so'port ="27263"iflocal ==1: p = process(binary)else: p = remote("node3.buuoj.cn",port)defdbg(): context.log_level ='debug'context.terminal = ['tmux','splitw','-...
sctf 2019 easy heap Write Up 概略# 这道题属于典型的菜单题,但是不提供show的功能,整个逻辑中,只存在一个off-by-null的漏洞。比较值得在意的是,程序的开始,利用mmap分配了一块拥有可读可写可执行权限的内存区域,并将该区域的地址打印出来,同时程序调用alloc功能的同时也会打印出了存放堆指针与size的数组。