【发布时间】:2014-11-22 15:33:24
【问题描述】:
我正在学习各种漏洞利用,但我无法完全理解 Format String 漏洞利用。我在允许漏洞利用的环境中设置了一个相当简单的程序。
int woah(char *arg){
char buf[200];
snprintf(buf, sizeof buf, arg);
return 0;
}
我能够控制传递给函数的 arg,这将是攻击将如何发生,程序运行我的 shellcode 并给我 root 的最终结果。让程序崩溃很容易,只需输入“%s%s”,它就会出现段错误。我们想做的还不止这些,所以我们给它输入“AAAA%x%x%x%x%x%x%x”之类的东西。查看 gdb 中的程序,我们查看 snprinf 之后的缓冲区,我们可以看到:
"AAAA849541414141353934....blah blah blah"
这很好!我们可以看到堆栈上的 A 以及十六进制 A 的 41。但是接下来会发生什么?我知道这里的一般想法是用四个字节覆盖指令指针,方法是将地址放在我们输入的字符串的开头......然后在我们让它指向我们的 shellcode 的地方。
如何找到要覆盖的 seip/返回地址的地址?
【问题讨论】:
-
您看到的 A 不在堆栈中。它们正在打印,因为您的格式字符串是这样说的。 41 是... 指向哪个方向的指南?问题是什么?
-
为清晰起见进行了编辑。我认为这个漏洞利用的下一步是找到指令指针,这样我就可以用指向我缓冲区的地址覆盖它。我如何找到这两个地址?
标签: c string-formatting exploit