¿Cómo extrae Netsparker la versión de SQL Server durante una inyección de SQL?

0

Estamos usando la versión de nube de Netsparker La semana pasada, cuando netsparker scan it detecta vulnerabilidades de inyección de SQL.

Sin embargo, me sorprende que el error de lanzamiento de la consulta de inyección para la conversión y el escáner haya extraído información de la versión del servidor SQL.

  

microsoft sql server 2012 (sp3) (kb3072779) - 11.0.6020.0 (x64)   
oct 20 2015 15:36:27
copyright (c) microsoft   Edición de web y empresa (64 bits) en windows nt 6.3 < x64 >   (compilación 9600:) (hipervisor)

Cadena utilizada para inyección

'AND 1=cast(0x5f21403264696c656d6d61 as varchar(8000)) or '1'='

Cuando el formulario enviado en el servidor de respuesta arrojó un error para realizar la conversión como se muestra a continuación.

  

La conversión falló al convertir el valor de varchar '_! @ 2dilemma' a   tipo de datos int.

Luego traté de buscar en la web y encontré los enlaces a continuación, pero no tengo información sobre cómo extraen datos.

enlace

    
pregunta Sagar Upadhyay 08.02.2016 - 11:05
fuente

1 respuesta

1

La variable @@version devuelve la versión actual de SQL Server.

Ejemplos aquí :

  

Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64)

     

2 de abril de 2010   15:48:46

     

Copyright (c) Microsoft Corporation

     

Enterprise Edition   (64 bits) en Windows NT 6.0 (Build 6002: Service Pack 2)

Volviendo a lo básico, para encontrar manualmente una vulnerabilidad de inyección de SQL que inyectaría algo como

' OR '1'='1' UNION SELECT 1;--

en una entrada, lo que haría que una consulta se ejecute de forma similar a la siguiente

SELECT * FROM foo WHERE name= '' OR '1'='1' UNION SELECT 1;--'

Esto combinaría los resultados de la consulta original, alterada, con los resultados de la columna de valor 1 adicional.

Sin embargo, primero debe asegurarse de que la cantidad de columnas que está seleccionando coincida con la consulta original. Por lo tanto, es posible que deba cambiar 1 a 1, 2 , 1, 2, 3 , 1, 2, 3, 4 , etc., hasta que obtenga los valores devueltos.

Una vez que obtenga un resultado válido de la página que contiene sus valores inyectados, simplemente reemplace uno de los valores inyectados con @@version . por ejemplo

SELECT * FROM foo WHERE name= '' OR '1'='1' UNION SELECT @@version,2,3;--'
    
respondido por el SilverlightFox 09.02.2016 - 09:29
fuente

Lea otras preguntas en las etiquetas