WWW2Exec - atexit()
__atexit Estruturas
Atualmente é muito estranho explorar isso!
atexit()
é uma função para a qual outras funções são passadas como parâmetros. Essas funções serão executadas ao executar um exit()
ou o retorno do main.
Se você puder modificar o endereço de qualquer dessas funções para apontar para um shellcode, por exemplo, você ganhará controle do processo, mas isso atualmente é mais complicado.
Atualmente os endereços das funções a serem executadas estão ocultos por várias estruturas e finalmente o endereço para o qual apontam não são os endereços das funções, mas são criptografados com XOR e deslocamentos com uma chave aleatória. Portanto, atualmente esse vetor de ataque não é muito útil pelo menos em x86 e x64_86.
A função de criptografia é PTR_MANGLE
. Outras arquiteturas como m68k, mips32, mips64, aarch64, arm, hppa... não implementam a função de criptografia porque ela retorna o mesmo que recebeu como entrada. Portanto, essas arquiteturas seriam atacáveis por esse vetor.
Você pode encontrar uma explicação detalhada de como isso funciona em https://m101.github.io/binholic/2017/05/20/notes-on-abusing-exit-handlers.html
Last updated