Pwn-栈溢出

news/2024/12/5 2:29:12/文章来源:https://www.cnblogs.com/ljnljn/p/18585191

原理

基本的栈帧结构(以 x64 的栈为例)
image
(图片摘自Hello-CTF)
RBP 为栈底寄存器,RSP 为栈顶寄存器,分别记录了栈帧中记录数据部分的起始和终止地址。函数的临时变量的在内存中的位置都是通过这两个寄存器加减偏移确定的。
栈底分别还记录了上一个栈帧的 RBP 的值,以及函数的返回地址。

方法:

1、找常发生栈溢出的危险函数

输入:
gets():直接读取一行,到换行符’\n’为止,同时’\n’被转换为’\x00’;scanf(),格式化字符串中的%s不会检查长度;
vscanf():同上。
输出:
sprintf():将格式化后的内容写入缓冲区中,但是不检查缓冲区长度
字符串:
strcpy():遇到’\x00’停止,不会检查长度,经常容易出现单字节写0(off by one)溢出;
strcat():同上。

2、确定填充长度

这一部分主要是计算我们所要操作的地址与我们所要覆盖的地址的距离。常见的操作方法就是打开 IDA,根据其给定的地址计算偏移。一般变量会有以下几种索引模式:

  • 相对于栈基地址的的索引,可以直接通过查看 EBP 相对偏移获得
  • 相对应栈顶指针的索引,一般需要进行调试,之后还是会转换到第一种类型。
  • 直接地址索引,就相当于直接给定了地址。

一般来说,我们会有如下的覆盖需求:

  • 覆盖函数返回地址,这时候就是直接看 EBP 即可。
  • 覆盖栈上某个变量的内容,这时候就需要更加精细的计算了。
  • 覆盖 bss 段某个变量的内容。
  • 根据现实执行情况,覆盖特定的变量或地址的内容。

之所以我们想要覆盖某个地址,是因为我们想通过覆盖地址的方法来直接或者间接地控制程序执行流程。

这里给出两种方法:

1、肉眼看

image
看到函数距离rbp为0x30距离,加上默认RBP与下面栈祯默认距离0x8,因此总距离为0x38

2、看v4的IDA定义

点v4,上面注释里全写好了
image
(“Saved Regs” 是 “Saved Registers” 的缩写,意思是 “已保存的寄存器”。)

3、找函数泄露地址

shift+F12发现/bin/sh很可疑,因此找到该函数,按空格找到地址
注意这里最好用offset command这一行,原因是函数首地址在编译可能发生改变,而下面这一行是不变的(已经存在了寄存器里)
image

4、写exp

from pwn import *
p=remote("1.95.36.136",2051)
payload=b'a'*(0x38)+p64(0x000000000040059A)
p.sendline(payload)
p.interactive()

最后cat flag获得flag的值

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

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

相关文章

DSB的数字正交解调

1.DSB调制过程 ​ DSB信号是一种双边带调幅调制信号,又叫双边带调幅,通过改变载波的振幅来实现基带数据的传输。 其函数表达式如下: \[s(t) = m(t)*cos(2\pi ft + \varphi) \]其中:m(t):表示基带信号。 \(cos(2\pi ft + \varphi )\):表示载波信号。2.DSB的数字正交解调 ​ …

JDY-68A模块语音播报

该模块引脚如下图所示:连接其中的VCC与GND即可让蓝牙模块运行起来 如果要实现播放手机中的声音,需要参考下面图中第10个引脚其中Audio是声音输出,连接功放模块的输入+,而功放模块中的输入-直接接地线即可。 该模块有个问题就是其为贴片设计,需要自行设计底板,但是如果只是要测试…

《代数学基础Ⅰ》期中考试分析

总体分析:本次考试得分85(17%),尚可,但未达到自己的预期(90+)。 错题分析:目前未下发答题纸,我觉得主要有两方面问题。 1. 分类讨论不全,特别关注分式的分母能否取零导致的分类 2. 当且仅当的证明,这是一个充要条件,充分性多数情况下比较难证,要多加练习。(坏了,…

第56篇 docker简单介绍

1.docker介绍 Docker是一个用于构建,运行,传送 应用程序的平台。以下所有环境打包成一个集装环境1.1 为什么要用docker? 第一点:安装依赖过多 如果不用docker,需要部署一个带有数据库的,前后端服务的应用时,就要执行step的步骤安装环境,网站才能运行该应用第二点:不同…

设计位置编码

Gall 定律 一个有效的复杂系统通常是从一个有效的简单系统演化而来的 —— John Gall本文将带你一步步探究 Transformer 模型中先进的位置编码技术。我们将通过迭代改进编码位置的方法,最终得出 旋转位置编码 (Rotary Postional Encoding, RoPE),这也是最新发布的 LLama 3.…

中国AI大模型市场:创业公司在巨头竞争中的生存之道|报告汇总PDF洞察(附原数据表)

原文链接:https://tecdat.cn/?p=38460 在2023年10月上旬的一次聚会中,众多投资了AI大模型的投资者在轻松的氛围中探讨了当前市场的严峻挑战。市场数据显示,仅仅半年前,投资者们还在为争夺投资份额而焦虑。然而,当前市场情绪已经发生了转变,投资者普遍认为,大模型领域的…

Python基于滑动窗口CNN损伤梁桥数据、故宫城墙图像数据分类可视化|附数据代码

全文链接:https://tecdat.cn/?p=38442 原文出处:拓端数据部落公众号 分析师:Yufei Guo 在现代土木结构工程领域,结构损伤的准确识别与定位对于保障基础设施的安全性和耐久性具有极为关键的意义。传统的人工检查方法,如目视检查以及借助专业设备进行检测,在很长一段时间内…

【专题】日本车企利润骤降94%,裁员9000人,中国新能源汽车行业迎头赶上|报告汇总PDF洞察(附原数据表)

原文链接:https://tecdat.cn/?p=38407 在全球化的汽车产业竞争中,中国新能源汽车的迅猛发展正重塑市场格局。近期,日本车企遭遇前所未有的挑战,利润大幅下滑,日产净利润暴跌94%,全球裁员9000人,而丰田等巨头也感受到了市场的压力。与此同时,中国品牌如比亚迪以破纪录的…

【恐怖の算法】 扫描线

【恐怖の算法】 扫描线【恐怖の算法】 扫描线 引入 扫描线一般运用在图形上面,它和它的字面意思十分相似,就是一条线在整个图上扫来扫去,它一般被用来解决图形面积,周长,以及二维数点等问题。 二维矩形面积并问题 在二维坐标系上,给出多个矩形的左下以及右上坐标,求出所…

堆栈2

1、 2、push 3push 2push 1 只有ESP发生变化(ESP=ESP-c),1、2、3也被压入栈 3、CALL 00401005(按F7不按F8) 把这个值(它的下一行)压入堆栈,EIP修改00401005(与9相同)按F7之后会生成一个JMP指令4、PUSH EBPMOV EBP,ESPSUB ESP,48 5、PUSH EBXPUSH ESIPUSH EDI 6、…

vxe-table 在 vxe-tabs 页签组件中使用表格

在 vxe-tabs 页签组件中使用 vxe-table 表格组件,自适应页签高度。 官网:https://vxetable.cn/<template><div><vxe-tabs padding><vxe-tab-pane title="页签1" name="1"><vxe-grid v-bind="gridOptions1"><…

jar包目录介绍

jar包目录介绍BOOT-INF:包含class文件和依赖jar META-INF:包含Class-Path:指定执行运行jar时的classpath; Main-Class:指定运行时的main方法所在类 org:包含springboot一些文件重要信息官网:https://ais.cn/u/vEbMBz