程序不输出任何东西

时间:2020-04-15 21:31:05

标签: c buffer buffer-overflow

我目前在C缓冲区溢出。我只是一个初学者,所以请对我好一点。

int main( ) {
 char *name[2];
 name[0] = "/bin/sh";
 name[1] = NULL;
 execve(name[0], name, NULL);
} 

这是我得到的输出:enter image description here似乎在我编译并执行它时,它会切换到“ / bin / sh”,这是正常的输出还是我做错了什么?

#include <unistd.h> 

 int main(void) {
 char buf[7 + 1 + 4 + 4] = "/bin/sh<garbage>";

 *(buf + 7) = 0;
 *((char**)(buf + 8)) = buf;
 *((char**)(buf + 12)) = NULL;
 syscall(11, buf + 0, buf + 8, buf + 12);
}

对于此代码,要求我简要解释一下简化并运行它来解释输出。但是,如屏幕截图所示,它根本不输出任何内容,我该如何解决? enter image description here

1 个答案:

答案 0 :(得分:0)

它切换到“ / bin / sh”,这是正常输出还是我做错了什么?

在两种情况下都可以执行 sh ,因此提示符会更改,并且可以输入命令,例如在控制台中启动 sh 一样。要完成 sh 执行,请输入 exit 或Control-d

它根本不输出任何东西

这意味着您不输入 sh

第二个程序假定指针由于行而在32b上

*((char**)(buf + 8)) = buf;
 *((char**)(buf + 12)) = NULL;

如果您使用的是64b,则无法正常工作,请强制在32b中进行编译。

如果您使用的是32b,请修改其定义,例如打印 syscall

返回的值

当然可以修改程序以在64b上运行:

int main(void) {
 char buf[7 + 1 + 8 + 8] = "/bin/sh<garbage........>";

 *(buf + 7) = 0;
 *((char**)(buf + 8)) = buf;
 *((char**)(buf + 16)) = NULL;
 syscall(59, buf + 0, buf + 8, buf + 16);
}

如备注11所示,如果对于x86(对于PI4,ARMv7是我的情况),对于x86-64,则为59