Come estrarre i dati utilizzando SQL injection su un'applicazione ASP.NET vulnerabile?

0

Sono riuscito a trovare una vulnerabilità in un cosiddetto sito amico di miniere e voglio mostrargli che il suo sito Web è vulnerabile all'estrazione dei dati.

Quando uso qualcosa come yes')-- come post ottengo le seguenti informazioni di debug:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%' ) or (r.nrinreg=1 and datainreg='01.01.2017' and r.adresant like '%yes' at line 3

Quindi in pratica il mio input è all'interno di alcune parentesi. Il fare yes%')-- si traduce in una pagina a caricamento lento che risulta nient'altro che vuota. In tal modo risulterebbe qualcosa di simile a questa query:

or (r.nrinreg=1 and datainreg='01.01.2017' and r.adresant like '%yes%') -- whatever is after the comment

Come posso ottenere qualsiasi dato o versione di MySQL da quella query sapendo che l'input non è sfuggito?

Inoltre, come si chiama questo tipo di iniezione SQL?

Versione ASP.NET: 2.0.50727.8762

    
posta an4rei 23.05.2018 - 17:09
fonte

2 risposte

1

A volte (il più delle volte) non puoi. La sua cosiddetta iniezione SQL cieca. Quello che di solito puoi fare è cancellare (di solito non lo vuoi) o creare o modificare alcuni dati (sì, questo è quello che vuoi fare) o evitare una valutazione dell'espressione (es. Password = password).

Le attività tipiche che si desidera eseguire è assegnare il ruolo di amministratore al proprio account o modificare la password dell'amministratore, forzare l'applicazione a presentare i dati modificati agli utenti di destinazione (XSS memorizzato e molte altre cose) o semplicemente effettuare il login senza conoscere il nome utente / parola d'ordine. Inoltre, su MS SQL (se configurato male) è possibile anche avviare i comandi di sistema, quindi alla fine ci sono molte possibilità da fare tra cui ottenere il controllo completo sul server e altri server nell'infrastruttura.

Buona fortuna ma sii etico!

    
risposta data 24.05.2018 - 01:29
fonte
1

Questa è un'iniezione SQL cieca.

Devi scoprire quante colonne sono usate in quella query SQL e quindi, usa UNION per aggiungere i dati che desideri.

Per ottenere il numero di colonne, prova questo, fermandoti al 1 ° successo:

') UNION SELECT 1 -- ') UNION SELECT 1, 2 -- ') UNION SELECT 1, 2, 3 -- ... ') UNION SELECT 1, 2, 3, 4, 5, 6, 7, 8, 9... --

Ho già trovato alcuni casi in cui MySQL richiede uno spazio prima e dopo il tag di commento (usando '--' fallisce mentre ' -- ' funziona, il ' è irrilevante e sono qui solo per mostrarti gli spazi estranei ) quindi potrebbe valere la pena conservare lo spazio finale aggiuntivo.

La query fallirà finché non avrai ottenuto il giusto numero di colonne. In questo caso, trova dove ogni colonna finisce nella pagina (alcune colonne potrebbero non essere utilizzate nella pagina in modo che i dati che contiene non raggiungeranno mai lo schermo). Quindi, puoi iniettare qualsiasi SELECT desiderato e recuperare informazioni come la versione di MySQL:

') UNION SELECT VERSION(), 2, 3, 4...

Si noti che alcune colonne potrebbero essere utilizzate internamente, come una colonna id : se tale colonna contiene dati impropri, la pagina finale potrebbe caricarsi, ma sarà vuota (immagina che il sito web sia un forum, e la prima colonna è la id dell'autore di ciascun messaggio e se l'autore non esiste, la pagina si blocca: in tal caso, è necessario avere un ID esistente nella prima colonna).

Un altro buon metodo per ottenere informazioni è SELECT di loro da information_schema : questo è il motivo per cui l'utente MySQL del tuo sito web deve avere i privilegi minimi possibili, quindi non può accedere a quella tabella critica (lo stesso per altri come mysql o performance_schema ).

Infine, non dimenticare che questo può essere fatto solo se il proprietario del web ti permette di farlo, come una dimostrazione molto efficace del concetto di un attacco reale (tutti questi passaggi possono essere eseguiti automaticamente da SQLMap o software simile).

    
risposta data 23.07.2018 - 10:01
fonte

Leggi altre domande sui tag