C缓冲区溢出 - 返回地址不能用ASCII表示

时间:2013-10-22 21:17:27

标签: c stack-overflow exploit stack-smash

我正在尝试溢出64字节的缓冲区 通过调用gets

填充缓冲区

我的理解是我需要写入总共65个字节来填充缓冲区,然后写入另外4个字节来填充堆栈帧指针。
接下来的4个字节应该覆盖返回地址。

但是,我想写的地址是804846A

  • 0x0804846A相同吗?如果是这样,我发现很难进入04(^ D)
  • 是否应按相反顺序输入? (6A 84 04 08)?
    • 我运行的一些初步实验输入为ZZZZZ ..(64次).. AAAABBBB 最终使ebp注册为0x42414141

有问题的架构是x86。

更新:我设法让ASCII代码0x040x08正常工作。问题似乎与0x84有关。我尝试从http://www.ascii-code.com复制与0x84对应的符号,这显然是。但是,C似乎将此符号解析为大于1个字节的表示。

我还尝试使用http://www.theasciicode.com.ar中提到的ä 这也导致表示大于1个字节。

1 个答案:

答案 0 :(得分:1)

您似乎依赖于特定编译器和CPU架构的实现细节。例如:

  • 并非所有CPU架构都使用帧指针。
  • 不同CPU的字节顺序不同,这会影响您是否需要“反转”字节。
  • 堆栈元信息(帧指针等)相对于给定局部变量的位置在编译器之间是不同的,甚至在使用不同优化选项的同一编译器之间也是如此。
相关问题