0ctf freenote
整理结构体
- 程序首先初始化了了chunklist,此题的chunklist是在堆里面分配的
- 一个指针指向了malloc(0x1810)的头,此段空间的前16字节分别是最大堆块的值和当前堆块数量
- 大概结构体如下图
|
|
- note结构体如下
|
|
- 经过整理以后,可以看出来程序一开始初始化了256个note结构体,指针置空
函数分析
new函数
|
|
- 整理过结构体以后,程序逻辑就很清晰了,new函数是从前到后遍历chunklist,当inuse为0的时候,在那个堆块malloc了note的空间,注意的是,size是不可任意malloc的,因为设置了自动对齐的运算,size大小只能是128*n (n > 0)
- 这就导致了我们无法直接申请fastbin
- 还有程序自己实现了read函数,输入size后必须输入满足你的size才能结束输入循环
list函数
|
|
- 打印当前所有inuse为1的堆块
edit函数
|
|
- 这个edit函数并没有限制编辑的次数,而且要注意的是,当size不一样的时候,程序会调用realloc函数
del函数
|
|
- 最短的函数之一,也是漏洞点的所在
- 程序并没有check堆块是否inuse,而且free后指针没有置空,所以就导致了我们可以通过double free来进行攻击
攻击过程
- 要进行攻击,必须获得程序中的一些基址,也就是在程序真正运行时的一些偏移,这里可以采用unsorted bin leak来leaklibc的基址,同样我们利用free后再次malloc,也可以获得上次相同的堆块,随后我们可以利用形成的双链表的fd bk来获取libc和heap的基址
- 由于程序中并没有溢出的存在,又不能生成fastbin,这里考虑从堆块错位下手,然后利用未置空的指针来进行double free
- 具体过程是先leak堆和libc的基址,然后全部free后,malloc4块空间依次free,随后申请一个大的堆块,正好包含起来所有的小堆块,构造unlink后随后free之前修改过的指针的已free堆块,控制指针,随后getshell
exp
- 首先add四个堆块,然后依次free index为0和2的堆块,0处就会出现main_arena的真实地址,我们获得了libc基址,2处因为无法合并就会出现双向链表,同样泄露了heap的地址
- 全部free后,利用堆块错位和double free构造unlink
- 三次malloc(128)以后内存依次free后内存中应该是下面的样子
|
|
- 之后编辑堆块构造unlink
- 放出完整exp
|
|
Your choice: \$ ls
\$ ls
flag
freenote_x64
$ cat flag
CTF{de7effd8864**c}
0ctf freenote相关推荐
- 0CTF 2015 FreeNote
0CTF 2015 Freenote 序言 又一个Double Free类型的题, 虽说是Double Free, 但利用方式不一样, 有需要的看一下. 程序运行(简单运行) 1. MENU == 0 ...
- 复现0ctf blog
参考文献:https://lorexxar.cn/2018/04/05/0ctf2018-blog/ https://45.76.198.31/post/0CTF%202018%20Quals%20B ...
- [pwn]格式化字符串:0ctf 2015 login writeup
文章目录 格式化字符串:0ctf 2015 login writeup 格式化字符串漏洞 题目分析 利用思路 开始利用 格式化字符串:0ctf 2015 login writeup 格式化字符串漏洞 ...
- 软件安全与脆弱性分析-对于freenote小程序的Poc分析
最近上软件安全与脆弱性分析课程,对freenote小程序(貌似是某一年的CTF题)进行了依次Poc分析.感觉很有意思,在这里对分析过程进行一个总结. 1.程序功能介绍 给定的程序运行界面如上图所示,大 ...
- [pwn]堆:unlink绕过,0CTF2015 freenote详解
[pwn]堆:2free=unlink绕过,0CTF2015 freenote 题目地址,提取码:f0xd 拿到题目,国际惯例,首先查看安全策略; 没有开启PIE和full partial.然后查看程 ...
- 2017 0ctf——babyheap
64位程序,保护全开 #fastbin attack 程序逻辑 1 __int64 __fastcall main(__int64 a1, char **a2, char **a3) 2 { 3 __ ...
- localhost/ ~wallhe/index.php,实战:2019 0ctf final Web Writeup(一)
前言 鸽了好久的题解,因为自己事务缠身,一直没时间写一下最近比赛的题解,趁近日有空,来填坑~ 第一次参加0ctf新星赛就拿了冠军,还是非常开心的.比赛过程中,web共4道题,我有幸做出3道,java实 ...
- [0CTF 2016]piapiapia WP(详细)
[0CTF 2016]piapiapia WP(详细) 1.打开网站,是个登录框,尝试注入无果.....按道理来说就是注入了啊喂 2.玄学时间到::: 目录扫完啥结果没有.在buuctf做题总是这样, ...
- BUCTF[0CTF 2016]piapiapia
[0CTF 2016]piapiapia 打开环境是个登录框,尝试了一下sql注入,发现并无任何用处. 于是扫描目录,发现了个/www.zip. 开始代码审计: 在config.php中看到了flag ...
最新文章
- vsco使用教程_VSCO如何使用 vsco新手教程
- HTML 中的特殊字符
- 中国剩余定理(模板+代码)
- HW 静态路由实现PC间互通
- Jsoup爬虫小案例
- 矢量 路网 免费下载_50个免费矢量图片下载网站
- 前端H5如何实现分享截图
- [OpenCV+VS2015]火焰检测算法(RGB判据)
- 百度网盘客户端(java)版本
- 【开发】MFC到Delphi的皮肤移植
- 【倒计时5天】PyCon China 2020 主题大揭秘!
- 学习C++的五十个观点
- python做出来的东西怎么让别人看_有趣的Python图片制作之如何用QQ好友头像拼接出里昂...
- 升级至android 5.0,OPPO X9007 升级到Android5.0 Color2.1(root版) 详细纪实
- C++primer十万字笔记 第九章 顺序容器
- 推荐一个赚钱平台,100%能赚钱(合法 长久 稳定)
- 咸鱼Maya笔记—Maya 循环边
- 概率统计Python计算:离散型随机变量分布(bernoulli geom)
- 【自学编程】自己写小例子的经验
- 动画中OAD OVA SP都是是什么?和TV动漫都有什么区别?