如何从终端编译这个简单的shellcode c程序?

我试图使用ubuntu 12上的终端编译它:

#include  #include  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上找到了这个例子,这也恰好是’Smashing the Stack for Fun and Profit’中使用的一个Aleph One。 我知道自那以后发生了很多变化。 在我使用的更简单的例子中:

gcc -ggdb -mpreferred-stack-boundary = 2 -fno-stack-protector filename 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中当前的标准安全措施引起的,但我想绕过它们来练习这个例子以及将来更多。 如果有人可以提供帮助,那将是“粉碎”。

干杯

你的字符串文字周围有“聪明”的引号,

 “/bin/bash”; 

尝试使用普通的引号"

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

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

您用来分隔字符串的引号字符不是标准的ASCII引号字符; 相反,它们是引号的Unicode字符。

尝试将其重写为

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

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

顺便说一下 – 编译器无法检测到可能启动shellcode的所有程序。 如果任何标准编译器会做任何事情来阻止程序因安全漏洞而编译,我会感到震惊。

希望这可以帮助!

感谢大家的快速反应。 我学到了一些东西:

1)复制和粘贴是愚蠢的

2)不要复制和粘贴

3)无论如何检查我的引号

答案是引号。 我删除并再次键入它们。 *叹。

干杯

我是新手 – 我是第一个承认它的人。