我正在尝试使用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上找到了这个例子,这个例子也恰好是'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中当前的标准安全措施引起的,但我想绕过它们来练习这个例子以及将来更多。如果有人可以提供帮助,那将是“粉碎”。
欢呼声
答案 0 :(得分:4)
你的字符串文字周围有“智能”引号,
“/bin/bash”;
尝试使用普通引号"
。
答案 1 :(得分:2)
我认为这与安全性无关,而是以下几行:
args[0] = “/bin/bash”;
用于分隔字符串的引号字符不是标准的ASCII引号字符;相反,它们是引号的Unicode字符。
尝试将其重写为
args[0] = "/bin/bash";
用新的双引号替换引号字符。
顺便一提 - 编译器无法检测到可能启动shellcode的所有程序。如果任何标准编译器会做任何事情来阻止程序因安全漏洞而编译,我会感到震惊。
希望这有帮助!
答案 2 :(得分:0)
感谢大家的快速反应。我学到了一些东西:
1)复制和粘贴是愚蠢的
2)不要复制和粘贴
3)无论如何检查我的引号
答案是引号。我删除并再次键入它们。 *叹气。
干杯
我是新手 - 我是第一个承认它的人。