【问题标题】:Buffer Overflow - Format String Vulnerability and Exploit缓冲区溢出 - 格式字符串漏洞和利用
【发布时间】:2020-11-23 15:25:29
【问题描述】:

我在 YouTube 上关注 tutorial 以了解缓冲区溢出漏洞。我可以看到他的机器和我的机器之间的主要区别是他的地址由 8 个字节组成,而我的由 12 个字节组成。但是,我们的两个内存块似乎都是 8 个字节。

当他在 gdb 中运行他的漏洞利用命令时,他使用
r $(python -c 'print "\xff\xff\xff\xff" + "%08x-" * 6 + "%s"')
其中"\xff\xff\xff\xff"是他的内存地址。

我使用
r $(python -c 'print "\xFF\xFF\xFF\xFF\xFF\xFF" + "%08x-" * 3 + "%s"')运行我的命令
其中\xFF\xFF\xFF\xFF\xFF\xFF 是我的内存地址。 (我将他的 *6 更改为 *3,因为他的堆栈指针离他的内存地址 6 远,而我的则是 3 远)。

我已尝试更改我存在的"%08x" 值的数量,并将值更改为%x012%x12

是否有处理 12 字节地址的特定方法,或者这个漏洞是否存在于 12 字节地址? ASLS 已禁用。

【问题讨论】:

  • 你的意思是 12 位十六进制数字吗?那是 6 个字节,48 位。可能实际上是 64 位,但带有高位零,就像 x86-64 规范地址一样。

标签: gdb cpu-architecture buffer-overflow security


【解决方案1】:

很可能您将程序编译为 64 位,而老师是用 32 位编译的。

缓冲区溢出在 64 位模式下的工作方式不同。有不同的事情需要考虑。如果您想先了解基础知识,建议您编译为 32 位并尝试这种方式。

【讨论】:

  • 我会这样做,并且将来我可能会在 64 位中回到它。转换为 64 位时的主要考虑因素是什么?
猜你喜欢
  • 2016-06-04
  • 1970-01-01
  • 1970-01-01
  • 2021-11-30
  • 2020-07-13
  • 1970-01-01
  • 2018-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多