WWW2Exec - atexit()
__atexit 구조체
요즘은 이를 악용하는 것이 매우 이상합니다!
**atexit()
**은 매개변수로 전달된 다른 함수들에 대한 함수입니다. 이러한 함수들은 **exit()
**를 실행하거나 main의 반환 시에 실행됩니다.
예를 들어 이러한 함수들 중 하나의 주소를 쉘코드를 가리키도록 수정할 수 있다면, 프로세스를 제어할 수 있지만, 현재 이 작업은 더 복잡해졌습니다.
현재 실행될 함수들의 주소는 여러 구조체 뒤에 숨겨져 있으며, 마지막으로 가리키는 주소는 함수들의 주소가 아니라 XOR로 암호화되고 임의의 키로 이동됩니다. 따라서 현재 이 공격 벡터는 적어도 x86 및 x64_86에서는 매우 유용하지 않습니다.
암호화 함수는 **PTR_MANGLE
**입니다. m68k, mips32, mips64, aarch64, arm, hppa와 같은 다른 아키텍처는 암호화 함수를 구현하지 않습니다. 왜냐하면 입력으로 받은 것과 동일한 값을 반환하기 때문입니다. 따라서 이러한 아키텍처는 이 벡터에 의해 공격당할 수 있습니다.
이 작동 방식에 대한 자세한 설명은 https://m101.github.io/binholic/2017/05/20/notes-on-abusing-exit-handlers.html에서 찾을 수 있습니다.
Last updated