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
先利用off by null漏洞做一个堆块重叠,然后打tcache dup,此时就可以再打tcache poisoning了,由于我们知道那片可读可写可执行的内存地址,所以我们直接将其申请出来,写入shellcode。(我这里是提前准备了两组tcache dup) 这部分的exp为: p.recvuntil('Mmap: ') leak_addr=int(p.recv(12),16) log_addr('leak_...
easy_heap漏洞点在off by null,可以利用unlink控制全局变量改mmap内存为shellcode,接着利用控制的区域构造一个fake chunk然后free使得它进入unsortedbin,利用控制覆盖低位,指向malloc_hook,然后再edit改为mmap的地址就可以getshell了。from pwn import* context.arch = "amd64" context.log_level = "debug" #p = ...
SCTF2019pwn题解 题目都是堆的题,第一题玄学爆破1/4096,做完校队师傅和我说他1/200的几率都没出来,果然比赛看人脸黑不黑。下面是详细的题解。 one_heap 题目看起来并不难,逻辑很简单,并且给了libc的是2.27的所以自然的联想到又tcache,接下来进行详细的分析。 静态分析 主要 逻辑很简单这里我进行了一个函数名...
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...
核心,利用off-by-null构造两个指向同一块chunk的指针 exp: frompwnimport*''' author: lemon time: 2020-10-19 libc: libc-2.27.so python version: python3 '''local =0binary ="sctf_2019_easy_heap"libc_path ='./libc-2.27.so'port ="27263"iflocal ==1: ...
sctf2019_easy_heap 保护策略: 漏洞所在: 在input函数中,存在一个off by null漏洞。 并且程序执行mmap来映射了一段可读可写可执行的地址,并且还把地址打印了出来。 大致思路: 首先是这道题映射了一段可读可写可执行的区域,同时没开沙箱,如果我们可以在这个地方写入shellcode的话,其实我们再劫持free_hook的时候,...
sctf 2019 easy heap Write Up 概略# 这道题属于典型的菜单题,但是不提供show的功能,整个逻辑中,只存在一个off-by-null的漏洞。比较值得在意的是,程序的开始,利用mmap分配了一块拥有可读可写可执行权限的内存区域,并将该区域的地址打印出来,同时程序调用alloc功能的同时也会打印出了存放堆指针与size的数组。
程序首先会分配一块mmap的内存出来,并且有rxz权限 在edit中,有一个这样的函数,很明显可以看出有off-by-null的漏洞 漏洞利用 很经典的一道题ubuntu18上的unlink,通过overlap形成double free在将chunk分配进mmap,接着重复一遍,将malloc hook劫持即可 首先程序有off-by-null,由于chunk的大小不小于0x400就不会被放入tac...