如何使这个简单的shellcode C程序从终端编译?(How do I make this sim

2019-09-19 02:38发布

我试图编译这个使用ubuntu上12终端:

#include <stdio.h>

#include <stdlib.h>

main()

{
    /*declare argument array*/
    char *args[2];

    args[0] = “/bin/bash”;
    args[1] = NULL;

    execve(args[0], args, NULL);

    exit(0);
}

我发现这个例子http://www.securitytube.net/video/235这也正好是一个阿列夫一个在“砸堆栈的乐趣和利润”使用。 我知道,因为那么多的改变。 更简单的例子,我用:

GCC -ggdb -mpreferred堆叠边界= 2 -fno堆叠保护器的文件名FILENAME.C

其他时候,我可能包括静态工具。 它的工作,直到我试图编译上面的C代码。 我从终端接收的消息是:

ss@ss-laptop:~$ gcc -static -mpreferred-stack-boundary=2 -fno-stack-protector -o shell         shell.c
shell.c: In function ‘main’:
shell.c:9:2: error: stray ‘\342’ in program
shell.c:9:2: error: stray ‘\200’ in program
shell.c:9:2: error: stray ‘\234’ in program
shell.c:9:15: error: expected expression before ‘/’ token
shell.c:9:15: error: stray ‘\342’ in program
shell.c:9:15: error: stray ‘\200’ in program
shell.c:9:15: error: stray ‘\235’ in program
ss@ss-laptop:~$

我明白,这是一个很简单的例子,这个错误可能是由当前的Linux标准的安全措施引起的,但我想,让他们围绕这个例子,在未来更多练习。 如果有人可以帮助,这将是“德艺双馨”。

干杯

Answer 1:

您对您的字符串“智能”引号的文字,

“/bin/bash”;

尝试使用普通引号"



Answer 2:

我认为这无关安全,反而是以下行:

args[0] = “/bin/bash”;

你使用来分隔字符串引号字符不是标准的ASCII引号字符; 相反,他们的报价相当Unicode字符。

尝试重写此作为

args[0] = "/bin/bash";

用新鲜的双引号替换引号字符。

顺便说一句 - 这可证明是不可能的编译器检测到可能推出的shellcode的所有程序。 我会感到震惊,如果任何标准编译器会做任何事情,从编译由于安全漏洞停止程序。

希望这可以帮助!



Answer 3:

感谢您的快速反应每一个人。 我已经学到了一些东西:

1)复制和粘贴是笨

2)不要复制和粘贴

3)检查我的引号呢

答案是引号。 我删除并重新输入他们。 *叹。

干杯

我是一个福利局 - 我承认它的第一个。



文章来源: How do I make this simple shellcode c program compile from terminal?