Lezione del 26/03/2024

Blind SQL Injection

Qui parliamo di una situazione in cui non ho alcun tipo di output sull’input che do al database, sito, applicativo di sorta. Se vogliamo solamente andare a bypassare questo in realta’ non ci interessa! Se vogliamo estrarre dei dati questa cosa invece ci complica non di poco le cose. Abbiamo svariati scenari, potremmo avere una app in cui mettendo una stringa abbiamo qualche feedback che potrebbe esser utile!

fa vedere le cose che avevamo visto la volta scorsa in mille altre salse praticamente. Praticamente sta facendo una sorta di esercitazione in classe, consiglio direttamente di vederla, non sta nemmeno scorrendo le slides per dire.

Dobbiamo riuscire a inventare una injection basandoci su due output possibili: vero e falso. Quindi possiamo andare a codificare qualsiasi cosa, anche se limita il throughput. Per ogni interazioni e otteniamo al massimo un bit di informazione se siamo ottimali, altrimenti tiriamo fuori meno di un bit di informazione.

Ci sono anche blind inj out of band in cui abbiamo leak email, https, dns,… ma non le vediamo.

Immaginiamo che la pagina web di prima ci dia come output: account valid o invalid number account.

Possiamo sempre fare 1=1 - - per andare a forzare il vero. Partiamo da questo punto faccio 101 and 1=1 - - e riesco a controllare i valori di validita’ e invalidita’. Come faccio a tirare fuori delle info rispetto al nome utente. Ho id esistente and cond arbitraria. Devo pensare ad una cond che il valore di falsita’ mi faccia fare inferenze.

Come posso fare?

Untitled

Se non fossi in un contesto blind potrei andare a fare direttamente qualcosa e bona, mentre in questo caso e’ un po’ difficile e non posso andare ad applicare direttamente la prima interrogazione come avremmo fatto prima.

Al massimo posso usare prima soluzione, in cui dopo and estraggo il nome basandomi sul numero di carta che conosco. Questo pero’ alla fine mi fa fare brute force su tutti quanti i nomi possibili, e’ l’unica cosa che possiamo andare a fare, e’ come fare un attacco a dizionario praticamente.

Potremmo pero’ andare ad usare substring per fare una cosa un pochino piu’ fine. Prende 3 parametri: stringa position e length

Come potrei usarla? I caratteri sono tantissimi, quindi potrei usare un processo iterativo. Supponiamo che estraiamo il nome. Lo diamo a substring e vedo se e’ uguale ad A maiscuola. Se e’ uguale a dx di and avro’ account number valid, altrimenti probo con B e C. Molto meglio provare lo spazio di caratteri che quello dei nomi. Quando becco qualcosa scopro la prima lettera e poi la seconda etc. … cambiando il valore di indice. Praticamente faccio brute force su tutti i caratteriuno ad uno fino a quando non compongo tutto quanto il nome.

Fighissimo come ci siano delle repo github che praticamente contengono tutta una serie di esempi su sql injection di ogni genere e sorta! Interessante la faccenda di andare ad iniettare del tempo. Questo e’ interessante quando sono molto blind.

Non faccio un exploit a mano di tutto quanto, solitamente cerco di estrarre una copia completa del database. Pensiamo alle cose che un tempo faceva il gruppo anonymous. Praticamente facevano grandi sql injection. Pensiamo a strumenti come sql map che sono completamente automatici senza sapere nulla tutto quanto in black box.

Problema stra classico di wordpress → i componenti vulnerabili che vengono fatti e mai aggiornati <3 ricordo i bei tempi a mediagroup98

Abbiamo anche uno strumento facile facile: wpscan in cui enumera tutti quanti i plugin e prova a cercarli uno per uno con numero di versione e quindi siamo a cavallo.

In piu’ ci mettiamo a cercare roba su exploit db e via che si va.

sqlmap per altro ha un sacco di comandi interessanti per cui posso andare a fare tantissime cose in maniera automatica.