
Strumento automatizzato per lo sfruttamento di vulnerabilità di formato stringa per scoprire stack, PIE e canary leak con capacità di ricerca di flag tramite specificatori %s o %p.
.d8888b. 888 888 888 8888888888 .d8888b.
d88P Y88b 888 888 888 888 d88P Y88b
888 888 888 888 888 888 Y88b.
888 888 888 888 8888888 "Y888b.
888 88888 888 888 888 888 "Y88b.
888 888 888 888 888 888 "888
Y88b d88P 888 Y88b. .d88P 888 Y88b d88P
"Y8888P88 88888888 "Y88888P" 888 "Y8888P"
Di: DiegoAltF4
GLUFS ti permette di automatizzare il noioso processo di trovare leak utilizzando vulnerabilità di formato stringa. Ti permetterà di trovare stack leak, pie leak e canary leak, indicando in ogni caso il payload che fornisce il leak. Inoltre, include una modalità che consente di cercare una stringa "flag" nei leak. Per questa modalità, possono essere utilizzati gli specificatori %s o %p.
| Parametro | Informazioni |
|---|---|
| -b | Seleziona questa opzione per indicare il binario da sfruttare. |
| -max | Seleziona questa opzione per indicare il valore massimo da testare. Intervallo: (min, max). Per impostazione predefinita, max = 40 |
| -min | Seleziona questa opzione per indicare il valore minimo da testare. Intervallo: (min, max). Per impostazione predefinita, min = 1 |
| -ip | Seleziona questa opzione per specificare l'IP del server remoto. |
| -port | Seleziona questa opzione per specificare la porta del server remoto. |
| -flag | Seleziona questa opzione per indicare l'inizio della flag da cercare. |
| -arch | Seleziona questa opzione per impostare l'architettura (32 o 64). |
| --s | Seleziona questa opzione per usare %s invece di %p. |
| --canary | Seleziona questa opzione per trovare la posizione in cui si trova un canary leak. |
| --leaks | Seleziona questa opzione per stampare tutti i leak trovati. |
| --pie | Seleziona questa opzione per trovare la posizione in cui si trova un pie leak. |
| --stack | Seleziona questa opzione per trovare la posizione in cui si trova uno stack leak. |
| --v | Seleziona questa opzione per impostare la modalità verbose. |
Per questo esempio, useremo GLUFS per ottenere un pie leak e un canary leak.
Il binario che prenderemo come esempio è quello corrispondente alla sfida 7 della room pwn101 di TryHackMe TryHackMe room pwn101.
Useremo l'opzione -b per indicare il binario, l'opzione -min per indicare il valore iniziale dell'iterazione e -max per indicare il valore finale dell'iterazione. Inoltre, vogliamo ottenere informazioni sui canary e sul pie.
./glufs.py -b ./pwn107.pwn107 -min 5 -max 15 --pie --canary

Per questo esempio, useremo GLUFS per ottenere la flag.
La sfida che risolveremo è Confused environment read dalla piattaforma 247CTF.
Per questo esempio non useremo un binario. Abbiamo solo un IP e una porta. Quindi, useremo l'opzione -ip per indicare l'indirizzo, -port per indicare la porta, -flag per specificare l'inizio della flag da cercare. Inoltre, non avendo un binario, dobbiamo indicare l'architettura, in questo caso x86-64 (-arch 64). Indicheremo anche l'inizio dell'iterazione con -min e la fine con -max. Inoltre, useremo l'opzione -s per usare %s invece di %p.
./glufs.py -ip 3bcbadabd1a7e914.247ctf.com -port 50387 -flag 247CTF -arch 64 -min 1 -max 200 --s

Per questo esempio, useremo GLUFS per ottenere la flag.
La sfida che risolveremo è flag leak dalla piattaforma PicoCTF.
Per questo esempio, useremo l'opzione -ip per indicare l'indirizzo del server, -port per indicare la porta del server, -b per indicare il binario, -flag per indicare l'inizio della flag, e infine specifichiamo l'inizio e la fine dell'iterazione con -min e -max. Se non specifichi l'opzione --s, verrà usato il formato %p per impostazione predefinita.
./glufs.py -ip saturn.picoctf.net -port 50563 -b ./vuln -flag picoCTF -min 20 -max 200

git clone https://github.com/Diego-AltF4/GLUFS.git
cd GLUFS/
pip3 install -r requirements.txt
chmod +x ./glufs.py
È molto importante che tu modifichi il codice per poterlo adattare al tuo binario/sfida. Per questo, ci sono due sezioni delimitate del codice in cui devi apportare modifiche per ottenere il leak della stringa di formato e per configurare quando inviare il payload.
Esempi: Per la sfida picoCTF spiegata sopra, viene usata la seguente configurazione:
#######################################################################
# This is the part that you must modify to fit your binary. #
#######################################################################
p.sendlineafter(b'>>', payload)
p.recvuntil(b'-')
leak = p.recv().strip(b'\n')
#print(leak) ## For debugging errors
#######################################################################