[C] Prueba shellcodes

Iniciado por mr.blood, Mayo 15, 2013, 04:01:36 PM

Tema anterior - Siguiente tema

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

Mayo 15, 2013, 04:01:36 PM Ultima modificación: Octubre 28, 2013, 09:18:57 AM por Expermicid
Bueno, el titulo lo dice casi todo. Solo me queda decir que se usa de este modo:
Código: php
./shell_prueba shellcode
. Donde shellcode seria el fichero que nos devuelve el compilador de asm en binario ;).

Sin mas, el codigo es muy simple... solo carga los bytes en memoria y utiliza el buffer para ejecutar el codigo como si fuera una funcion. Si estais en ubuntu compilad con -z execstack para que no os de problemas.

Código: c
#include <malloc.h>
#include <stdio.h>

int longitud(FILE *archivo);

int main(int argc, char *argv[])
{
if(argc < 2)
{
puts("Necesita un parametro");
return 1;
}
int longi, i;
char *shellcode;
FILE *archivo=fopen(argv[1], "rb");
longi=longitud(archivo);
shellcode=(char *)malloc(longi);
for(i=0;i<longi;i++)
{
shellcode[i]=getc(archivo);
}
fclose(archivo);
((void(*)())shellcode)();
free(shellcode);
return 0;
}

int longitud(FILE *archivo)
{
int longi;
fseek(archivo, 0, SEEK_END);
longi=ftell(archivo);
fseek(archivo, 0, SEEK_SET);
return longi;
}


Sa1uDoS