-4

十六进制版本的程序,例如在linux中是一个程序是这样写的

char esp[] __attribute__ ((section(“.text”))) /* e.s.p
release */
= “\xeb\x3e\x5b\x31\xc0\x50\x54\x5a\x83\xec\x64\x68″
 ...........
 ......
 .....
“\xc0\x40\xeb\xf9\xe8\xbd\xff\xff\xff\x2f\x62\x69″
“\x6e\x2f\x73\x68\x00\x2d\x63\x00″
“cp -p /bin/sh /tmp/.beyond; chmod 4755
/tmp/.beyond;”;

有人可以向我解释上面的代码是做什么的吗?

4

1 回答 1

4

您链接的内容通常称为shellcode

这是表示计算机可以执行的指令的原始字节,通常用作各种攻击中的有效负载,例如缓冲区溢出攻击

回答你关于它是如何产生的问题:

考虑汇编中的这段代码:

[SECTION .text]
global _start
_start:
        xor eax, eax       ;exit is syscall 1
        mov al, 1       ;exit is syscall 1
        xor ebx,ebx     ;zero out ebx
        int 0x80

如果你组装它,你会得到这个:

Disassembly of section .text:

08048080 <_start>:
 8048080:       b0 01                   mov    $0x1,%al
 8048082:       31 db                   xor    %ebx,%ebx
 8048084:       cd 80                   int    $0x80

您需要的字节是b0, 01, 31, db, cd 80。现在您可以像这样轻松使用它:

char shellcode[] = "\xb0\x01\x31\xdb\xcd\x80";

来源
另一个来源

于 2013-08-25T11:39:23.710 回答