PWN中测量变量溢出长度的三种姿势

admin 2023年7月9日11:24:28评论101 views字数 1100阅读3分40秒阅读模式

0x1 前言

在Pwn的题目中,测量变量溢出长度当然是每个Pwn手的必修课,绝大多数题目都有着可以溢出的变量,这也是Pwn手做题的基础,但你知道有几种方法可以测量呢,如果大家只会一种方法的话并不要紧,本文将介绍两种在不同环境下的使用方法。通过本文的学习,希望大家可以在做题的过程中丰富自己的知识,多一种解题的思路。

0x2 正文

首先我们来介绍第一种方法,这是最简单也是最适合新手的方式,就是在IDA中的静态调试。只用肉眼的观看,便可以知道变量的溢出长度是多少,下面就来用一道简单的题作为例子吧

PWN中测量变量溢出长度的三种姿势

如上图,将题目文件拖入ida后可发现危险函数gets函数。双击进入变量s


PWN中测量变量溢出长度的三种姿势

可以发现,这个s很明显只有64个字节的大小。但事实真的是如此吗?这个时候就可以使用第二种方法判断真假。即GDB动态调试,使用动态调试测算溢出的长度,与ida测出的长度进行比较,便可以确定最终的溢出长度。

Part 2:动态调试测量溢出长度

首先,打开我们的Linux终端,调出GDB进行动态调试。

PWN中测量变量溢出长度的三种姿势

PWN中测量变量溢出长度的三种姿势

题目让我们输入一串数据,这边先随意输入一串数据。观察它在栈中的位置。

输入stack 40 查看栈的结构,如下图

PWN中测量变量溢出长度的三种姿势

其实,刚刚输入的数据所在的地址并不是esp所在的地址,而是eax所在的地址,做题时一定要牢记哦。

PWN中测量变量溢出长度的三种姿势

如上图,我们找到了栈底的位置,这个时候简单计算即可得到答案

PWN中测量变量溢出长度的三种姿势

居然是108个字节,是不是很神奇。跟ida所调试的完全不一样

(注:因为栈是从高地址向低地址增长的,所以一定是用栈底的ebp减去eax算出这两个寄存器之间的距离)

此时可能有小伙伴觉得上面的操作太麻烦了,怎么办呢,这里就要使用第三种测量溢出长度的姿势了。

Part 3:使用Cyclic指令测量溢出长度

PWN中测量变量溢出长度的三种姿势

cyclic指令可以生成任意长度的字符串,这里我们先生成一个200长度的字符串

PWN中测量变量溢出长度的三种姿势

如上图,我们将生成的字符串输入程序,成功发生了溢出,红色的报错已经告诉了我们溢出的地址,此时使用cyclic的另一条指令(cyclic -l +溢出的地址)

PWN中测量变量溢出长度的三种姿势

成功测量到了溢出长度为112,这条指令的意思就是判断溢出点距离我们变量的底部位置有多少个长度。

那么这个时候又有小伙伴会问了,静态调试和动态调试不一样该怎么办呢?我是该相信动态调试还是ida中的结果呢?

其实,动态调试相对于静态调试来说更加准确,我们在大多数情况下,要首先相信动态调试的结果,可以根据动态调试的结果进行变量的溢出哦~


0x3 总结

以上就是本文介绍的三种测量变量溢出的方法了,希望小伙伴们在日后做题时,熟练的运用它们,使成绩更上一层楼!


文章:Hanser

排版:青少年CTF

审核:青少年CTF



原文始发于微信公众号(中学生CTF):PWN中测量变量溢出长度的三种姿势

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年7月9日11:24:28
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   PWN中测量变量溢出长度的三种姿势https://cn-sec.com/archives/1861945.html

发表评论

匿名网友 填写信息