In che modo Netsparker estrae la versione di SQL Server durante un'iniezione SQL?

0

Utilizziamo la versione cloud di netsparker La scorsa settimana, durante la scansione di netsparker, rileva le vulnerabilità di Injection SQL.

Tuttavia sono sorpreso dal fatto che l'interrogazione dell'iniezione ha generato un errore per la trasmissione e lo scanner ha estratto le informazioni sulla versione del server SQL.

microsoft sql server 2012 (sp3) (kb3072779) - 11.0.6020.0 (x64)
oct 20 2015 15:36:27
copyright (c) microsoft corporation
web edition (64-bit) on windows nt 6.3 <x64> (build 9600: ) (hypervisor)

Stringa usata per l'iniezione

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

Quando il modulo inviato nel server di risposta genera un errore per il cast come sotto.

Conversion failed when converting the varchar value '_!@2dilemma' to data type int.

Poi ho provato a cercare sul Web e ho trovato i collegamenti seguenti, ma non ho informazioni su come estrarre i dati.

link

    
posta Sagar Upadhyay 08.02.2016 - 11:05
fonte

1 risposta

1

La variabile @@version restituisce la versione corrente di SQL Server.

Esempi qui :

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

Apr 2 2010 15:48:46

Copyright (c) Microsoft Corporation

Enterprise Edition (64-bit) on Windows NT 6.0 (Build 6002: Service Pack 2)

Tornando alle nozioni di base, per trovare manualmente una vulnerabilità di iniezione SQL da iniettare come

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

in un input, che farebbe eseguire una query simile al seguente

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

Ciò combinerebbe i risultati della query alterata originale con i risultati della colonna aggiuntiva 1 .

Tuttavia, per prima cosa è necessario assicurarsi che il numero di colonne che si sta selezionando corrisponda alla query originale. Pertanto, potrebbe essere necessario modificare 1 in 1, 2 , 1, 2, 3 , 1, 2, 3, 4 , ecc. Fino a quando non vengono restituiti i valori.

Una volta ottenuto un risultato valido dalla pagina che contiene i valori iniettati, è sufficiente sostituire uno dei valori iniettati con @@version . per es.

SELECT * FROM foo WHERE name= '' OR '1'='1' UNION SELECT @@version,2,3;--'
    
risposta data 09.02.2016 - 09:29
fonte

Leggi altre domande sui tag