【发布时间】:2018-06-02 11:05:28
【问题描述】:
所以我一直在研究一个简单的格式字符串漏洞,在过去 3 个小时左右的时间里,我一直在敲桌子,想知道为什么我的十六进制值没有出现在堆栈上。
如果有人能启发我,我将不胜感激。
1.
最初我在进行这些挑战时使用 python 编写脚本,特别是对于这个示例:
python -c 'print "AAAAA\xcc\xd5\xff\x4f"' > a
随后在 GDB 中查看堆栈:
format string>
0xffffd550: 0xffffd584 0xf7ffdab8 0x41f95300 0x41414141
0xffffd560: 0x95c38cc3 0x0a4fbfc3 0xf7e2ec00 0xf7f8f820
现在看起来它没有出现在“AAAAA”之后(因为未对齐,所以使用了 5)。
2.
但是,当我使用以前使用过的另一个地址时:
python -c 'print "AAAAA\x5c\x57\x55\x56"' > a
我明白了:
format string>
0xffffd550: 0xffffd584 0xf7ffdab8 0x41f95300 0x41414141
0xffffd560: 0x5655575c 0x0000000a 0xf7e2ec69 0xf7f8f820
而且看起来完全没问题?
3.
另外,当我使用类似的东西时:
echo -en "AAAAA\xcc\xd5\xff\x4f" > b
我能够正确地将值设置到堆栈中:
format string>
0xffffd550: 0xffffd584 0xf7ffdab8 0x41f95300 0x41414141
0xffffd560: 0x4fffd5cc 0x00000000 0xf7e2ec69 0xf7f8f820
下面分别是a和b文件的输出:
AAAAA���O
AAAAAÌÕÿO
【问题讨论】:
-
bash 使用 8 位字符串,python 使用 16、32 或 8 位字符串,具体取决于上下文和 python 版本,
-
我看不到
a将如何包含任何内容,因为您没有有效的 Python 脚本。 -
哦,糟糕,已编辑。我没有正确复制粘贴它
标签: python bash hex shellcode format-string