sábado, 23 de noviembre de 2013

Zabbix CVE-2013-5743

Hola a todos,
Hoy voy a escribir un poco sobre esta vulnerabilidad que paseando por el sitio de Corelan encontré, básicamente lo que he hecho es recrear todo en un laboratorio y ahondar un poco más en los detalles de esta vulnerabilidad.

Primero que nada les hago referencia al post original:


La idea es leerlo y entenderlo, por consiguiente necesitamos lo siguiente:

·        Contar con un Kali Linux con sqlmap.


Ahora bien lo que sucede aquí es que por defecto Zabbix tiene un usuario Guest en la página principal.
Ahora dirigiéndonos Monitoring -> Web, es ahí donde empieza la fiesta, pero veamos, haciendo un request nos entrega las siguientes variables.


ddreset y sid, que probando con sqlmap, no son inyectables, pero que sucede con el post de Corelan, si somos observadores en su post ellos inyectan a través  “applications=1’”, pero veamos de donde sale esa variable.

Si hacemos un less sobre el script httpmon, veremos lo siguiente:

Observamos que applications es una varibale supreglobal de php.

Y aparte de ser global es inyectable, usamos sqlmap de la siguiente manera

 /root/upgrades/sqlmap-dev/sqlmap.py -v 5 -u "http://192.168.127.136/httpmon.php?applications=2" --cookie="zbx_sessionid=a0ac94310dea482dc67fc858e8002fe0; PHPSESSID=g7k2i6dj7b98okhmdg18hajtt4" --level=5 --risk=3 --os=Linux --dbms=Mysql --dbs --users --passwords --tables --save --sql-query='select * from sessions;' --output-dir=./tmp

Ahora bien observando la salida de sqlmap, la tabla que nos interesa es donde se encuentran las sesiones, ya que estas permanecen activas, ya teneos el sesión ID, siguiendo el documento de Corelan, vemos que usan burp, para inyectar los parámetros, de la siguiente manera.


Usando el proxy de Burp, podemos interceptar cada petición y editarla manual mente, lo que sucede si hacemos esto es que a mano tendremos que editar cada petición http y si se nos pasa alguna, pues simplemente ya no funcionara el ataque.

Lo que podemos usar en este caso es una funcionalidad de burp, para remplazar los headers por algunos otros que queramos, ya sabeos que los tokens a editar en nuestras peticiones serán.

zbx_sessionid y SID

Configuramos nuestro burp de la siguiente manera para facilitarnos la vida y no estar copiando y cortando para pegar por cada request.

En la sección de proxy->options, configuramos Match and Replace, de la siguiente manera ya sabemos que SID son los 16 últimos caracteres de la sesión.




Ahora una vez configurado nuestro burp de esta manera, la sesión será permanente de Admin.
Básicamente es lo que he querido explicar, por qué el post de Corelan es bastante consiso, pero cuando lo realice en mi pc, tuve algunos problemas porque tenía que estar re escribiendo manualmente los datos tomados, una vez que vi que Burp puede hacer esto por ti, decidí explicar cómo hacer con este ejemplo de Zabbix.