【发布时间】:2018-05-19 20:26:41
【问题描述】:
我有以下代码,它应该删除一个 shell,但是,在我运行代码之后,似乎什么都没有发生。这是我拥有的代码。这摘自 shellcoder 的手册。
`
char shellcode[] =
"\xeb\x1a\x5e\x31\xc0\x88\x46\x07\x8d\x1e\x89\x5e\x08\x89\x46"
"\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\xe8\xe1"
"\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68";
int main()
{
int *ret;
ret = (int *)&ret + 2;
(*ret) = (int)shellcode;
}`
我使用gcc -fno-stack-protector -z execstack shellcode.c -o shellcode编译它
这是产生上述结果的代码:
int main()
{
char *name[2];
name[0] = "/bin/sh";
name[1] = 0x0;
execve(name[0], name, 0x0);
exit(0);
}
我不确定为什么会这样。我在 Windows 10 上使用 Ubuntu。这可能不会影响我的结果,但我禁用了 ASLR。这可能是个问题。我还没有在虚拟机上试过这个。在我这样做之前,我想尝试弄清楚为什么这不起作用。如果不清楚,请告诉我,我很乐意澄清任何细节。
提前感谢您的所有帮助。
--更新--
我能够从我提供的 shellcode 中获得汇编指令。
有没有人发现任何会导致 shell 不被丢弃的问题?
【问题讨论】:
-
uname -a的输出是什么? -
如何在没有虚拟机的情况下在 Windows 10 上运行 Ubuntu?
-
@jwdonahue:Windows 10 上有一个 Linux (Ubuntu) 子系统。
-
@jwdonahue 他说了什么, uname -a 的输出是
Linux DESKTOP-P4KG81D 4.4.0-17134-Microsoft #48-Microsoft Fri Apr 27 18:06:00 PST 2018 x86_64 x86_64 x86_64 GNU/Linux -
如果有帮助的话,我相信参考文献使用的是 Debian 3.1r4