- [1. Contexto: el servidor] vulnerables -
Vamos a utilizar el servidor muy minimalista (pero sin embargo pedagógicos) a lo largo este trabajo. La Comisión solicita un nombre de usuario y contraseña, luego se hace eco de su insumos.
Para instalar el servidor fmtd, tendrá que configurar inetd para que
conexiones con el puerto 12345 están permitidos:
Or with xinetd:
# /etc/xinetd.conf
service fmtd
{
type = UNLISTED
user = raynal
group = users
socket_type = stream
protocol = tcp
wait = no
server = /tmp/fmtd
port = 12345
only_from = 192.168.1.1 192.168.1.2 127.0.0.1
}
A continuación, reinicie su servidor. No se olvide de cambiar las reglas de su
servidor de seguridad si está utilizando una.
Ahora, vamos a ver cómo funciona este servidor:
$ telnet bosley 12345
Trying 192.168.1.2...
Connected to bosley.
Escape character is '^]'.
login: raynal
password: secret
hello world
hello world
^]
telnet> quit
Connection closed.
Vamos a echar un vistazo al archivo de registro:
Jan 4 10:49:09 bosley fmtd[877]: login -> read login [raynal^M ] (8) bytes
Jan 4 10:49:14 bosley fmtd[877]: passwd -> read passwd [bffff9d0] (8) bytes
Jan 4 10:49:56 bosley fmtd[877]: vul() -> error while reading input buf [] (0)
Jan 4 10:49:56 bosley inetd[407]: pid 877: exit status 255
En el ejemplo anterior, nos indica un inicio de sesión, una contraseña y un
frase antes de cerrar la conexión. Pero qué sucede cuando alimentamos
el servidor con las instrucciones de formato:
telnet bosley 12345
Trying 192.168.1.2...
Connected to bosley.
Escape character is '^]'.
login: raynal
password: secret
%x %x %x %x
d 25207825 78252078 d782520
Las instrucciones "% x% x% x% x" , muestra que nuestro
servidor es vulnerable a un error de formato.
De hecho, todos los programas actuan como que no son vulnerables a un
formato de errores:
int main( int argc, char ** argv )
{
char buf[8];
sprintf( buf, argv[1] );
}
Usando hn% aprovechado esta conduce a un desbordamiento: el formato de cadena es cada vez más y más, pero desde ningún control
realizados por su longitud, un desbordamiento.
En cuanto a las fuentes revela que los problemas vienen de vul ()
función:
...
snprintf(tmp, sizeof(tmp)-1, buf);
...
está disponible directamente a un usuario malintencionado, el ze "="
ya que el
este último se le permite tomar el control del servidor ... y obtener así una
shell con los privilegios del servidor.
esta es la primera entrega en ya iremos platicando de esto mas adelante.
Saludos mundo libre.
No hay comentarios:
Publicar un comentario