【发布时间】:2010-11-14 14:54:21
【问题描述】:
我正在尝试使用以下简单代码返回 libc 技巧:
#define SYSTEM_CALL_ADDR 0xb7ec5e50 /*my system call addr*/
#define EXIT_CALL_ADDR 0xb7ebbb80 /*my exit call addr*/
char shell[] = "/bin/sh";
int main(){
int* p;
p = (int*)&p + 2;
*p = SYSTEM_CALL_ADDR;
p = (int*)&p + 3;
*p = EXIT_CALL_ADDR;
p = (int*)&p + 4;
*p = shell;
return 1;
}
有趣的是,当我运行这个程序时,它以“分段错误”结束,但如果我使用 gdb 调试它并逐步运行它,它完全没问题,生成一个 shell 然后退出程序。有人遇到这种情况吗?或者有人可以指导我如何纠正这个问题吗?先谢谢了。我在 ArchLinux 内核:2.6.33,gcc 4.5.0。
【问题讨论】:
-
如果你正在玩这样的漏洞利用,你应该关闭地址空间布局随机化以使其更容易。
echo '0' > /proc/sys/kernel/randomize_va_space -
你能否提供更多关于你的代码应该做什么的细节?如果它是一个漏洞,正如@R 所暗示的那样,这就像你正在尝试启动一个 shell,是吗?
-
谢谢大家。首先我已经关闭了 ALSR,我确信系统/退出调用地址是正确的。
-
@Kevin,是的,我正在尝试从 system("/bin/sh") libc 调用启动一个 shell。