
Une preuve de concept d'un débordement SEH avec injection arbitraire de DLL
Une preuve de concept d'un débordement SEH avec injection de DLL arbitraire
Le serveur HTTP Kolibrì 2.0 est affecté par un débordement de tampon basé sur la pile. Au moment de la découverte, cette vulnérabilité était exploitée en écrasant simplement le pointeur d'instruction avec une instruction JMP ESP, où ESP pointait vers un shellcode déposé sur la pile. Par la suite, il a été constaté que la chaîne SEH pouvait être écrasée si une charge utile plus grande était envoyée. Cependant, l'application ne dispose pas d'instructions POP - POP - RET valides pour faire pointer le gestionnaire SE vers l'enregistrement SEH suivant. Cela est dû au fait que toutes les adresses mémoire concernées commencent par un octet nul.

Cet exploit propose une exécution de code via un débordement SEH par injection de DLL. Injecter une DLL arbitraire dans le processus Kolibrì ouvre une opportunité d'écraser le gestionnaire SE avec une adresse sans octet nul pointant vers une instruction POP - POP - RET de cette DLL. De toute évidence, cette méthode ne peut être utilisée que pour développer une preuve de concept et ne peut pas être fiable si l'exploitation est effectuée pour élever les privilèges système localement. C'est parce que vous devez avoir les mêmes privilèges que le processus cible si vous voulez injecter une DLL dans celui-ci. À part cela, l'exploit fonctionne !

Lorsque j'ai téléchargé cet exploit pour la première fois, il ne supportait que des shellcodes personnalisés très courts avec des adresses WinExec et ExitProcess codées en dur. Cela était dû à l'espace tampon limité après l'écrasement du SEH. Maintenant, je viens de mettre à jour le code de l'exploit en déployant un shellcode egghunter juste après le SEH et en déposant l'œuf (egg) + le shellcode dans l'en-tête User-Agent du serveur web. Ainsi, le flux d'exécution sera redirigé du SEH écrasé vers l'egghunter, qui cherchera ensuite le shellcode marqué avec l'œuf 'w00t'.
Le crédit pour cette méthode revient à FULLSHADE de ce dépôt original.
https://github.com/FULLSHADE/POPPOPRET-nullbyte-bypass
Tout ce que j'ai fait est d'appliquer l'idée à ce CVE spécifique.