Iniezione SQL su più tabelle

6

Se un sito web ha più app Web, ciascuna di esse è connessa a diverse tabelle in un database e tutte le app sono protette da SQL Injection tranne una; è possibile utilizzare quella app Web per leggere / modificare / attaccare altre tabelle nel database tramite SQL injection?

    
posta Bob Joe 22.10.2013 - 02:28
fonte

2 risposte

5

Sì, a seconda della sicurezza del database sottostante, un singolo attacco SQL Injection può influenzare altre tabelle nello stesso database e persino tabelle in database diversi o in tabelle di casi molto specifici in esecuzione su istanze di database diverse.

È persino possibile aggiornare / leggere da più tabelle contemporaneamente utilizzando un'unica query di database. Poiché hai taggato la tua domanda come mysql, ecco una query MySQL per l'aggiornamento di più tabelle:

UPDATE Books, Orders
SET Orders.Quantity=Orders.Quantity+2,
Books.InStock=Books.InStock-2
WHERE Books.BookID=Orders.BookID
 AND Orders.OrderID = 1002;

Leggere è semplice come usare un JOIN:

   SELECT t1.name, t2.otherColumn 
   FROM Table1 as t1
   LEFT JOIN Table2 as t2
   ON t1.id = t2.id

Ovviamente l'efficacia di queste query dipende dalla struttura della tabella sottostante, ma è possibile leggere in modo assoluto da tabelle non volute / multiple usando SQL Injection.

Un esempio di quando ciò non sarebbe possibile è se le tabelle in questione appartengono tutte a schemi diversi, ciascuno con un account specifico a cui è possibile accedere. Esempio:

app1.ImportantTable
app2.OtherTable
app3.BigTable

Se ciascuno di questi schemi è configurato per consentire solo un accesso utente diverso, non può esserci accesso involontario. Pertanto, se nel database è presente un'impostazione App1User che può solo leggere / modificare lo schema app1 , non sarà in grado di selezionare i dati dalle tabelle nello schema app2 .

    
risposta data 22.10.2013 - 02:35
fonte
4

Dipende completamente dalle autorizzazioni concesse all'utente del database che l'applicazione sta utilizzando per accedere al database.

Nel migliore dei casi, no, l'utente non avrà accesso a dati o tabelle che non è necessario per eseguire le azioni richieste dall'applicazione. (Nel migliore dei casi, non ha accesso diretto a nessuna tabella, ma solo autorizzazioni per l'esecuzione di procedure predefinite che restituiscono dati specifici limitati.)

Nel peggiore dei casi, non solo può accedere ad altre tabelle nel database appartenenti ad altre applicazioni, ma ad altri database e al server su cui è in esecuzione il motore di database, e alla rete che il server che esegue il motore di database è collegato a.

Le autorizzazioni eccessive concesse all'utente che un'applicazione utilizza per accedere a un database, in altre parole, possono essere molto, molto pericolose. È molto importante assicurare che gli utenti del database siano opportunamente limitati solo agli oggetti e ai dati a cui hanno effettivamente bisogno di accedere per poter eseguire le funzioni richieste dall'applicazione, e non di più.

    
risposta data 22.10.2013 - 03:05
fonte

Leggi altre domande sui tag