
Una prova di concetto di un overflow SEH con iniezione arbitraria di dll
Una proof of concept di un overflow SEH con iniezione arbitraria di DLL
Kolibrì HTTP Server 2.0 è affetto da un buffer overflow basato su stack. Al momento della scoperta, questa vulnerabilità veniva sfruttata semplicemente sovrascrivendo il puntatore all'istruzione con un'istruzione JMP ESP, dove ESP puntava allo shellcode caricato sullo stack. Successivamente, si è scoperto che la catena SEH poteva essere sovrascritta inviando un payload più grande. Tuttavia, l'applicazione non dispone di istruzioni POP - POP - RET valide per far puntare il gestore SE al successivo record SEH. Ciò è dovuto al fatto che tutti gli indirizzi di memoria correlati iniziano con un nullbyte.

Questo exploit propone l'esecuzione di codice tramite overflow SEH attraverso l'iniezione di una DLL. Iniettare una DLL arbitraria nel processo Kolibrì apre la possibilità di sovrascrivere il gestore SE con un indirizzo senza nullbyte che punta a un'istruzione POP - POP - RET di quella DLL. Chiaramente questo metodo può essere usato solo per sviluppare una proof of concept, e non si può fare affidamento su di esso se lo sfruttamento viene effettuato per elevare i privilegi di sistema a livello locale. Questo perché è necessario avere gli stessi privilegi del processo di destinazione per poter iniettare una DLL al suo interno. Per il resto, l'exploit funziona!

Quando ho caricato per la prima volta questo exploit, supportava solo shellcode personalizzati molto corti con indirizzi hardcoded di WinExec e ExitProcess. Ciò era dovuto al poco spazio disponibile nel buffer dopo la sovrascrittura del SEH. Ora ho appena aggiornato il codice dell'exploit distribuendo uno shellcode egghunter subito dopo il SEH e inserendo l'egg + lo shellcode nell'header User-Agent del server web. Il flusso di esecuzione verrà quindi reindirizzato dal SEH sovrascritto all'egghunter, che cercherà lo shellcode contrassegnato con l'egg 'w00t'.
Il merito di questo metodo va a FULLSHADE, da questo repository originale.
https://github.com/FULLSHADE/POPPOPRET-nullbyte-bypass
Tutto quello che ho fatto è stato applicare l'idea a questa specifica CVE.