type
status
date
slug
summary
tags
category
icon
password
实际上直接确定溢出位置在 exp 里写 payload 发送就好了 #### 检查下保护情况

放进 ida 分析,搜索字符串,定位到主要函数的位置

可以看到当 v2 等于 11.28125 时就会输出 flag,而且 v2 为 float 类型。 - 只有一个输入点 gets(v1),没对输入进行限制,存在溢出点 [[python]] 可以判断出本题是通过输入 v1 溢出覆盖 v2 的值为 11.28125 获取 flag。
v1 位置为 rbp-30h,v2 为 rbp-4h,距离为

与 char v1[44]中的 44 相等,所以 v1 填充完 44 后溢出就直接会覆盖到 v2 的位置,只需要在 44 字节后填充浮点数 11.28125 即可 (可以先打断点在 if 处,然后在 ida 中动态调试 Hex-view 中按 F2 对溢出位置进行修改为对应数值看下是否可行)
python 中的 pwntool 打开 gdb 调试(方便发送不可输入的字符和查看 stack 变化)


发送 payload 后

可以看到指定位置已经被覆盖为我们需要的字节,然后在 gdb 中继续执行

执行完后可以看到 pwntool 中的交互模式出现了 cat 指令的执行。
基于以上本地实验,可以写出如下 exp:
- 作者:纸鸢
- 链接:https://www.asahimoon.top/article/c8a411cf-7de4-4cde-bf57-8f31a53e392d
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。