
Ein Proof of Concept für einen SEH-Overflow mit beliebiger DLL-Injektion.
Ein Proof of Concept für einen SEH-Überlauf mit beliebiger DLL-Injektion
Kolibrì HTTP Server 2.0 ist von einem stapelbasierten Pufferüberlauf betroffen. Zum Zeitpunkt der Entdeckung wurde diese Schwachstelle ausgenutzt, indem einfach der Instruction Pointer mit einer JMP-ESP-Anweisung überschrieben wurde, wobei ESP auf den auf dem Stack abgelegten Shellcode zeigte. Anschließend wurde festgestellt, dass die SEH-Kette überschrieben werden konnte, wenn eine größere Payload gesendet wurde. Die Anwendung verfügt jedoch nicht über gültige POP - POP - RET-Anweisungen, um den SE-Handler auf den nächsten SEH-Eintrag zeigen zu lassen. Das liegt daran, dass alle zugehörigen Speicheradressen mit einem Nullbyte beginnen.

Dieser Exploit schlägt eine Codeausführung per SEH-Überlauf durch DLL-Injektion vor. Das Injizieren einer beliebigen DLL in den Kolibrì-Prozess eröffnet die Möglichkeit, den SE-Handler mit einer nullbyte-freien Adresse zu überschreiben, die auf eine POP - POP - RET-Anweisung aus dieser DLL zeigt. Diese Methode kann offensichtlich nur zur Entwicklung eines Proof of Concept verwendet werden und ist nicht zuverlässig, wenn der Exploit dazu genutzt wird, lokal Systemprivilegien zu erweitern. Das liegt daran, dass man dieselben Berechtigungen wie der Zielprozess benötigt, um eine DLL in ihn zu injizieren. Abgesehen davon funktioniert der Exploit!

Als ich diesen Exploit zum ersten Mal hochlud, unterstützte er nur sehr kurze benutzerdefinierte Shellcodes mit fest verdrahteten WinExec- und ExitProcess-Adressen. Das lag an dem begrenzten Pufferplatz, der nach dem Überschreiben des SEH verfügbar war. Jetzt habe ich den Exploit-Code aktualisiert, indem ich direkt nach dem SEH einen Egghunter-Shellcode platziert und das Egg + den Shellcode im User-Agent-Header des Webservers abgelegt habe. Dadurch wird der Ausführungsfluss vom überschriebenen SEH zum Egghunter umgeleitet, der dann nach dem mit dem Egg 'w00t' markierten Shellcode sucht.
Die Anerkennung für diese Methode gebührt FULLSHADE aus diesem ursprünglichen Repository.
https://github.com/FULLSHADE/POPPOPRET-nullbyte-bypass
Ich habe lediglich die Idee auf diese spezifische CVE angewendet.