
SEH 오버플로우와 임의 DLL 주입에 대한 개념 증명
SEH 오버플로우와 임의 DLL 주입의 개념 증명
Kolibrì HTTP Server 2.0은 스택 기반 버퍼 오버플로우의 영향을 받습니다. 발견 당시 이 취약점은 스택에 배치된 셸코드를 가리키는 ESP에 JMP ESP 명령어로 명령 포인터를 덮어씌우는 방식으로 악용되었습니다. 이후 더 큰 페이로드를 보내면 SEH 체인을 덮어쓸 수 있다는 것이 발견되었습니다. 그러나 애플리케이션에는 SE 핸들러가 다음 SEH 레코드를 가리키도록 하는 유효한 POP - POP - RET 명령어가 없습니다. 이는 모든 관련 메모리 주소가 널바이트로 시작하기 때문입니다.

이 익스플로잇은 DLL 주입을 통한 SEH 오버플로우로 코드 실행을 제안합니다. Kolibrì 프로세스에 임의 DLL을 주입하면 해당 DLL의 POP - POP - RET 명령어를 가리키는 널바이트 없는 주소로 SE 핸들러를 덮어쓸 기회가 생깁니다. 분명히 이 방법은 개념 증명 개발에만 사용할 수 있으며, 로컬에서 시스템 권한을 상승시키기 위해 악용을 수행할 경우 신뢰할 수 없습니다. 이는 DLL을 주입하려면 대상 프로세스와 동일한 권한이 필요하기 때문입니다. 그 외에는 익스플로잇이 작동합니다!

이 익스플로잇을 처음 업로드했을 때는 하드코딩된 WinExec 및 ExitProcess 주소를 가진 매우 짧은 사용자 정의 셸코드만 지원했습니다. SEH를 덮어쓴 후 남은 버퍼 공간이 짧았기 때문입니다. 이제 SEH 바로 뒤에 에그헌터 셸코드를 배치하고, 웹 서버의 User-Agent 헤더에 에그 + 셸코드를 추가하여 익스플로잇 코드를 업데이트했습니다. 따라서 실행 흐름이 덮어쓰인 SEH에서 에그헌터로 리디렉션되고, 에그헌터는 'w00t' 에그로 표시된 셸코드를 검색합니다.
이 방법에 대한 크레딧은 이 원본 저장소의 FULLSHADE에게 있습니다.
https://github.com/FULLSHADE/POPPOPRET-nullbyte-bypass
제가 한 것은 이 아이디어를 이 특정 CVE에 적용한 것뿐입니다.