当前位置:首页 > 未分类 > 正文内容

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

admin3年前 (2023-07-20)未分类449

0x1 前言

在 Pwn 的题目中,测量变量溢出长度是每个 Pwn 手的必修课,绝大多数题目都存在可溢出的变量,这也是 Pwn 手解题的基础。但你知道有几种测量方法吗?即使目前只会一种也没关系,本文将介绍三种在不同场景下适用的测量方法。通过本文的学习,希望能帮助大家丰富解题思路,在做题过程中更灵活地应对溢出长度测量问题。

0x2 正文

首先介绍第一种方法 ——IDA 静态调试,这是最简单且适合新手的方式,仅通过肉眼观察就能初步判断变量的溢出长度。下面以一道简单题目为例展开说明:

如上图所示,将题目文件拖入 IDA 后,可发现危险函数gets。双击进入gets函数的参数变量s,查看变量详情:

从 IDA 的静态分析结果来看,变量s的大小为 64 字节。但这个结果是否绝对准确呢?此时就需要第二种方法 ——GDB 动态调试来验证,通过动态调试测算实际溢出长度,并与 IDA 的静态结果对比,最终确定真实的溢出长度。

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

动态调试依赖 GDB 工具,通过实时观察程序运行时的栈结构,计算变量到栈底(或返回地址)的距离,从而得到准确的溢出长度。具体步骤如下:

  1. 启动 GDB 调试:打开 Linux 终端,输入gdb ./题目文件启动调试,运行程序后随意输入一串测试数据(如aaaaa),观察数据在栈中的位置。

  1. 查看栈结构:输入stack 40命令查看栈的详细结构,重点关注输入数据的存储地址与寄存器的对应关系。

注意:输入数据所在的地址通常对应eax寄存器,而非esp寄存器,这一点在计算时需特别注意,避免地址混淆。

  1. 定位栈底与计算距离:通过info registers查看ebp寄存器的值(栈底地址),再结合输入数据的存储地址(eax值),计算两者之间的差值 —— 由于栈从高地址向低地址增长,溢出长度需用 “栈底地址(ebp) - 输入数据地址(eax)” 计算。

从动态调试结果来看,实际溢出长度为 108 字节,与 IDA 静态分析的 64 字节存在差异 —— 这也体现了动态调试的准确性,避免了静态分析中可能存在的栈对齐、编译器优化等干扰因素。

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

如果觉得手动计算栈地址差值过于繁琐,可使用 GDB 的cyclic指令快速定位溢出点。cyclic能生成具有唯一标识的字符串,通过溢出后报错信息中的 “崩溃地址”,直接反推出溢出长度,步骤如下:

  1. 生成 Cyclic 字符串:输入cyclic 200生成长度为 200 的唯一标识字符串(长度需大于预估的溢出长度,确保能覆盖到返回地址)。

  1. 触发溢出并获取崩溃地址:将生成的 Cyclic 字符串输入程序,程序会因溢出崩溃,此时报错信息中会显示 “覆盖返回地址的 Cyclic 子串”(如0x6161616c)。

  1. 计算溢出长度:输入cyclic -l 崩溃地址(如cyclic -l 0x6161616c),指令会自动反推该子串在 Cyclic 字符串中的位置,这个位置就是变量到返回地址的溢出长度。

从结果可知,溢出长度为 112 字节 ——cyclic指令的优势在于无需手动计算地址差值,尤其适合栈结构复杂或地址偏移不直观的场景。

关于 “静态与动态结果不一致” 的说明

当 IDA 静态分析与 GDB 动态调试结果不一致时,优先相信动态调试结果。原因如下:

  1. 静态分析无法完全还原编译器优化(如栈对齐、变量内存分配调整);

  1. 动态调试能实时反映程序运行时的真实栈结构,不受静态反编译的 “理论模型” 影响;

  1. 若需进一步验证,可结合cyclic指令的结果,三者交叉对比后确定最终溢出长度。

0x3 总结

本文介绍的三种测量变量溢出长度的方法各有适用场景:

  • IDA 静态调试:适合快速初步判断,新手入门首选,缺点是可能受编译器优化影响;

  • GDB 动态调试:准确性最高,能反映真实栈结构,适合验证静态结果或复杂栈场景;

  • Cyclic 指令:高效便捷,无需手动计算地址,适合快速定位溢出点。

希望大家在后续做题中熟练运用这三种方法,根据题目场景灵活选择,提升解题效率与准确性!

作者:Hanser

排版:十三年网络安全社团

原文链接:https://mp.weixin.qq.com/s/mT4TGLSSuI7bdfR2aou0pQ

若你后续还需要补充其他 PWN 技术文章的格式转换,或者想对现有内容中的代码示例、操作步骤进行细化(比如添加 GDB 命令的详细解释),可以随时告诉我,我会进一步优化内容,让技术细节更清晰易懂。


扫描二维码推送至手机访问。

版权声明:本文由克拉玛依三十年社团发布,如需转载请注明出处。

本文链接:https://www.klmyssn.com/?id=69

分享给朋友:

“PWN 中测量变量溢出长度的三种姿势” 的相关文章

(原创)NOIP [全国青少年信息学奥林匹克联赛] 初赛之后的杂谈

(原创)NOIP [全国青少年信息学奥林匹克联赛] 初赛之后的杂谈

没人能比我更懂你。这次的 noip 初赛考的很砸,比数学还砸。深夜的情感就像熬过冬日的野草。我们都在寻找,寻找着一个能够和自己差不多的人,去对他倾诉自己的情感,去倾听他的情感。在一次一次的失败,一次又一次的成功后,留下的只是回忆;在一次次的交流中,一次次的倾听中,留下的是感情。就像我们总是在学习,却...

(原创)一张图片,你的信息暴露无遗~

(原创)一张图片,你的信息暴露无遗~

大家好,我是 31,今天教给大家一个定位的小技巧,也没什么技术含量,看着玩就好啦~~~~昨天看到社团老大 “十三年” 在群里发照片 “装 13”,结果被我抓到了,哈哈哈哈,每个人都有大意之时。不多说,上图(居然发现手表不错,和我的一样帅~~~~~):**一、科普:什么是 Exif 数据?1. Exi...

(原创)校园卡破解系列之权限克隆 [pm3 破解饭卡][pm3 克隆数据][校园卡克隆][IC 卡克隆]

(原创)校园卡破解系列之权限克隆 [pm3 破解饭卡][pm3 克隆数据][校园卡克隆][IC 卡克隆]

一、免责声明本文主张交流与科研学习,请勿对文中提及的内容进行恶意使用!本社团及作者对读者后续的行为不承担任何法律责任。此文章是综合之前饭卡复制、权限提升漏洞后的合并版本,后半部分聚焦饭卡破解;若看过之前文章,可直接跳转至 “(一)饭卡权限提升” 章节。二、基础准备:工具与测试对象1. 核心工具:PM...

(原创)求人不如求己 -- 剪辑音乐就是这么简单 [如何剪辑音乐]

(原创)求人不如求己 -- 剪辑音乐就是这么简单 [如何剪辑音乐]

每每到了学校有活动,需要播放歌曲时,QQ 就多几个好友,消息又 99+,不消问什么事情,就知道是找我剪辑歌曲的同学了。怎么说,我这人对别人提出的需求,都尽力去帮助的,在剪辑音乐这事情上,从没拒绝过,但年复一年,每次剪辑音乐其实很简单,但是量多,就比较影响自己时间了,我又不会拒绝别人,很是尴尬,所以在...

(原创)web 渗透实例之克市教育局内网渗透 — 市十六小

(原创)web 渗透实例之克市教育局内网渗透 — 市十六小

引言下午元旦搞活动不上课,在机房浪一波。想到上次内网提权了学校饭卡管理服务器,便把 bugscan 的节点加到这个服务器了 —— 因为该服务器处于教育局内网,bugscan 直接扫出来了很多内网 IP 的网站,渗透了一波,如市三中、新一中、十八小、十六小等等。之前暑假对教育局 web 站点渗透都是外...

(原创)市教育局 web 渗透 — 市 OA 系统 [web 渗透实例][教育局网络安全][内网安全][内网渗透][oa 系统漏洞]

(原创)市教育局 web 渗透 — 市 OA 系统 [web 渗透实例][教育局网络安全][内网安全][内网渗透][oa 系统漏洞]

一、渗透前置说明(授权与免责)1. 授权声明本次渗透是在取得教育局网络第三方厂商(即时讯立维公司)授权许可之后进行的渗透测试。漏洞报告已第一时间交给教育局及第三方厂商,并协助厂商完成修补,至文章发布时,文中漏洞已修复。本文仅选取漏洞报告部分内容公开,完整漏洞报告模板存放于社团群内部。2. 免责申明请...