Acabo de configurar un banco de pruebas y deshabilité el acceso al esquema de información (un waf débil) y he estado tratando de extraer la lista de la tabla de la base de datos utilizando la conversión para escupir un error de conversión con la información contenida. Para extraer la versión usamos la sintaxis: + y + 1 = convertir (int, @@ version) El resultado será:
Conversion failed when converting the nvarchar value 'Microsoft SQL Server 2008 R2 (SP2) Copyright (c) Microsoft Corporation Standard Edition Windows NT 6.1 (Build 7601: Service Pack 1) (Hypervisor) ' to data type int.
El resultado de la consulta es lo que está dentro de las comillas simples. Ahora para obtener la primera tabla de la base de datos, normalmente usaríamos:
convert(int,(select+top+1+table_name+from+information_schema.tables))
Lo que llevaría al error:
Microsoft OLE DB Provider for SQL Server error '80040e07'
Conversion failed when converting the nvarchar value 'tblDepartement' to data type int.
index.asp, line 30
Nuevamente, la respuesta está dentro de las dos comillas simples que es tblDepartement
.
Una forma alternativa de extraer los nombres de las tablas sería utilizar estas 2 consultas siguientes:
(A):SELECT name FROM sys.tables
(B): select * from sys.tables
.
Si intento (A) con esta sintaxis:
convert(int,(select name FROM sys.tables))
Me sale el error:
Error Executing Database Query.
[Macromedia][SQLServer JDBC Driver][SQLServer]Incorrect syntax near the keyword 'from'.
Si intento (B) con esta sintaxis: %código% Me sale el error:
Error Executing Database Query.
[Macromedia][SQLServer JDBC Driver][SQLServer]Incorrect syntax near '*'.
Entonces, mi pregunta es, ¿cómo no puedo usar el esquema de información y el uso de sys.tables en lugar de la sintaxis de conversión para obtener la lista de la tabla de la base de datos? Gracias.