Sto cercando di andare a costruire una query sql che sia veritiera e la si cerca di fare eseguire al server. Qui ho una query parametrica praticamente in cui non ho alcun controllo sul parametro. E’ per questo che funziona!!!
E’ un modo per andare a concatenare varie query una sull’altra e attaccare delle funzioni sql una dietro l’altra e poi per poter andarla ad eseguire comandi arbitrari nel contesto di sql; davvero quello che ci pare. L’errore nasce da un input non standardizzato ed un output fatto male, questo mi porta andare a stampare tutti gli elementi della tabella corrente. Uno potrebbe dire che alla fine non è guadagnato tantissimo, ma dipende dall’azienda e dai che dati cerco, in generale non porto a casa granché, ma potrei portare a casa di più usando l’operatore union.

Con la union posso andare ad iniettare due query e me ne accorgo perché ho un totale di righe in output che è pari alla somma delle due query. Troviamo un modo per andare a dedurre il numero delle colonne:
Nell’esempio del prof mi rendo conto che dei cinque campi delle tabelle ne ho due in cui abbiamo dei campi che non vengono stampati. Ora la sfida sarebbe andare a capire come si chiamano le tabelle e il db. Se so i nomi delle tabelle e le relative colonne posso andare a fare delle select e andare a vedere tutto quanto. Uno modo comunqe in mysql è la funzione di sistema: version() e la funzione si sistema per vedere che utente è connesso è current_user(). La prossima operazione è una iniezione union in cui nei primi tre campi della metto queste informazioni. Qui c’è una cosa simile: https://stackoverflow.com/questions/43278649/sql-select-null-as-fieldname
Se sono a corto di campi riflessi posso andare ad usare concat, per andare a impacchettare in un solo campo più informazioni utili!
Vediamo come fare funzionare le iniezioni anche in situazioni un pochino più patologiche. Abbiamo una applicazione con un parametro chiamato order. Questo fa si che la query ordini per colonne. Potrei andara ad analizzare l’applicazione e provare a vedere se ci sono distringuisher → procedura per distinguere alcune proprietà di un determinato sistema.
Ottimizzazione di order by: se il campo di order by ha un indice all’ora l’algoritmo di ordinamento produce la sequenza ordinata direttamente. Se il campo usato da order by non ha un indidce si usa una procedura → filesort. Si fa una query non ordinati, si memorizza l’output su file, poi si fa un sorting sul file in cui è salvato l’output.
La logica di mysql è a tre valori: 1, 0, NULL (in cui non ho un valore quando sono in uno stato di unknown). Mi serve quando metto in and due operandi di cui uno non ritorno una sega. Qualunque operando che non sia intero viene convertito come intero. se mettiamo insieme tutte queste regole possiamo andare a ridefinire and e or a tre valori. Incrociando sulla prima colonna il primo parametro. Funziona come and mi raccomando. Questo mi potrebbe fare pensare che potrei andare a fare delle operazioni di confronto con admin o delle stringhe qualunque, ma vado ad ottenere sempre dei FALSE come ritorno. Le cose cambiano però se metto il numero all’inizio: la stringa 1admin viene convertito come 1. select “1admin” is true → 1, funziona anche se metti 0 all’inizio. Qualunque maggiore di 1 è 1 e qualunque cosa che è zero viene ritornato 0. Funziona anche 0.1, 01, etc. …
Dopo aver eseguito il confronto and/or avviene l’ordinamento. Quello che avviene è che il dbms ordina sulla base dell’espressione booleana fatta prima. Ordina prima chi ritorna 0 poi chi ritorna 1. Quindi calcola la query, notarsi per ogni riga il valore di confronto, poi sorta prima con gli 0 e poi con gli 1. Nel set degli zeri cercherà di fare un ordinamento con i parametri a disposizione. Ci interessa il giusto ma quello che ci interessa quando viene eseguita la sleep, perché lì ho esecuzione di statements arbitrario.
[28-03-2023]
prima parte ero via per prendere papà in stazione
Spesso vado ad eseguire attacchi in memoria e divido le operazioni in due stadi. Sfide interessanti da fare ROPEmporium. Mostra il funzionamento di GDB.