【发布时间】:2017-06-08 10:44:24
【问题描述】:
我正在为学生开发缓冲区溢出练习。在这种情况下,您通常必须提供任意字节作为程序的输入(返回地址)。
假设这个例子:
#import <stdio.h>
#import <string.h>
void func() {
char buf[4];
gets(buf);
}
int main (int argc, char** argv) {
func();
return 0;
}
通常我会使用 gdb 进行试验,直到找到解决方案,然后可以将其表述为
python -c 'print "A"*8+"\x08\x04\88\72"' | ./program
在开发越来越复杂的练习时,找到解决方案的难度会增加。有时通过
覆盖gdb中的返回地址 set {int}address_of_address = new_address
有效,但 python-approach 无效。最好能在程序运行时在 gdb 中进行调试,并能够在 gdb 中输入像“\x04”这样的字节,分析效果。
有什么办法吗?
这个问题似乎相关,但用 python 方法回答:Sending arbitrary bytes to fgets from stdin
我的不止于此:-/
【问题讨论】:
-
仅供参考,你不需要 Python,你可以使用
bash:echo $'AAAAAAAA\x08\x04\88\72' | ./program -
是的。这很有帮助!但是有没有办法在程序已经运行时输入任意字节?
-
是的,你可以在运行程序的同时运行它,它会停止等待输入。然后你从另一个控制台附加到它。那就是你从 2 个不同的控制台调试和输入字节。
标签: c encoding gdb reverse-engineering buffer-overflow