
Automatisiertes Tool zur Ausnutzung von Format-String-Schwachstellen zum Aufdecken von Stack-, PIE- und Canary-Leaks mit Flag-Suchfunktion über %s- oder %p-Spezifikatoren.
.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"
By: DiegoAltF4
GLUFS ermöglicht es Ihnen, den mühsamen Prozess des Findens von Leaks mithilfe von Format-String-Schwachstellen zu automatisieren. Damit können Sie Stack-Leaks, PIE-Leaks und Canary-Leaks finden, wobei jeweils das Payload angegeben wird, das den Leak liefert. Darüber hinaus enthält es einen Modus, mit dem Sie in den Leaks nach einem "flag"-String suchen können. Für diesen Modus können die Spezifizierer %s oder %p verwendet werden.
Für dieses Beispiel verwenden wir GLUFS, um einen PIE- und einen Canary-Leak zu erhalten.
Die Binärdatei, die wir als Beispiel nehmen, ist diejenige, die Challenge 7 des TryHackMe-Raums pwn101 TryHackMe room pwn101 entspricht.
Wir verwenden die -b-Option, um die Binärdatei anzugeben, die -min-Option für den Startwert der Iteration und -max für den Endwert der Iteration. Außerdem möchten wir Informationen über die Canaries und über PIE erhalten.
./glufs.py -b ./pwn107.pwn107 -min 5 -max 15 --pie --canary

Für dieses Beispiel verwenden wir GLUFS, um die Flagge zu erhalten.
Die Herausforderung, die wir lösen werden, ist Confused environment read von der 247CTF-Plattform.
Für dieses Beispiel verwenden wir keine Binärdatei. Wir haben nur eine IP und einen Port. Daher verwenden wir die -ip-Option, um die Adresse anzugeben, -port für den Port, -flag, um den Anfang der zu suchenden Flagge anzugeben. Da wir keine Binärdatei haben, müssen wir die Architektur angeben, in diesem Fall x86-64 (-arch 64). Wir geben auch den Start der Iteration mit -min und das Ende der Iteration mit -max an. Außerdem verwenden wir die -s-Option, um %s anstelle von %p zu verwenden.
./glufs.py -ip 3bcbadabd1a7e914.247ctf.com -port 50387 -flag 247CTF -arch 64 -min 1 -max 200 --s

Für dieses Beispiel verwenden wir GLUFS, um die Flagge zu erhalten.
Die Herausforderung, die wir lösen werden, ist flag leak von der PicoCTF-Plattform.
Für dieses Beispiel verwenden wir die -ip-Option, um die Serveradresse anzugeben, -port für den Serverport, -b für die Binärdatei, -flag für den Anfang der Flagge, und schließlich geben wir Start und Ende der Iteration mit -min und -max an. Wenn Sie die --s-Option nicht angeben, wird standardmäßig das Format %p verwendet.
./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
Es ist sehr wichtig, dass Sie den Code ändern, um ihn an Ihre Binärdatei/Herausforderung anzupassen. Dazu gibt es zwei abgegrenzte Codeabschnitte, in denen Sie Änderungen vornehmen müssen, um den Leak des Format-Strings zu erhalten und zu konfigurieren, wann das Payload gesendet werden soll.
Beispiele: Für die oben erläuterte picoCTF-Challenge wird die folgende Konfiguration verwendet:
#######################################################################
# 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
#######################################################################
| Parameter | Information |
|---|
| -b | Wählen Sie diese Option, um die zu exploitierende Binärdatei anzugeben. |
| -max | Wählen Sie diese Option, um den zu testenden Maximalwert anzugeben. Bereich: (min, max). Standardmäßig ist max = 40 |
| -min | Wählen Sie diese Option, um den zu testenden Minimalwert anzugeben. Bereich: (min, max). Standardmäßig ist min = 1 |
| -ip | Wählen Sie diese Option, um die IP des entfernten Servers anzugeben. |
| -port | Wählen Sie diese Option, um den Port des entfernten Servers anzugeben. |
| -flag | Wählen Sie diese Option, um den Anfang der zu suchenden Flagge anzugeben. |
| -arch | Wählen Sie diese Option, um die Architektur (32 oder 64) festzulegen. |
| --s | Wählen Sie diese Option, um %s anstelle von %p zu verwenden. |
| --canary | Wählen Sie diese Option, um die Position zu finden, an der sich ein Canary-Leak befindet. |
| --leaks | Wählen Sie diese Option, um alle gefundenen Leaks auszugeben. |
| --pie | Wählen Sie diese Option, um die Position zu finden, an der sich ein PIE-Leak befindet. |
| --stack | Wählen Sie diese Option, um die Position zu finden, an der sich ein Stack-Leak befindet. |
| --v | Wählen Sie diese Option, um den ausführlichen Modus zu aktivieren. |