La situazione è la seguente:
Ho identificato il vettore di attacco per iniezione sql e ho le seguenti informazioni sulla tabella di destinazione:
- Ha sei colonne. (Identificato utilizzando "ordina per").
- Vedo l'output di 3 di essi (viene visualizzata la tabella). due sembrano una sorta di valore enum (numero intero nel database?), e uno è una data. Ho il strong sospetto che col 6 sia la colonna della data.
- Sono quasi sicuro che il database sia Oracle. (ROWNUM funziona e LIMIT fornisce errore).
- Non ho messaggi di errore (viene sempre restituito testo generico - "qualcosa è andato storto").
- Il frontend è PHP se questo è importante. Ma potrebbe esserci uno strato intermedio tra esso e il database (ad esempio, il servizio java), quindi non sono sicuro di dove viene costruita la query.
es. la seguente query di ricerca funziona come previsto:
test' AND ROWNUM <= 5 ORDER BY 6--
MA non sono in grado di eseguire UNION ALL SELECT lavoro:
test' UNION ALL SELECT null,null,null,null,null,null--
La riga sopra indica errore.
Ho provato cose del tipo:
test' UNION ALL SELECT '2015.01.01', '2015.01.01', '2015.01.01', '2015.01.01', '2015.01.01', '2015.01.01'--
in modo che i valori possano corrispondere sia ai campi datetime sia ai campi stringa, ma - nessun successo: (
Non sono esperto in SQL injection e specialmente ORACLE (sebbene abbia esperienza con MsSql).
C'è QUALSIASI modo per identificare i tipi di colonna in modo che l'iniezione di UNION ALL SELECT possa funzionare?
Se no, esistono alternative alla tecnica di cui sopra che consentono di recuperare il risultato di una query arbitraria che posso eseguire sul target? Recuperare la versione @@ o simile sarebbe una missione compiuta nel mio caso.