e20 – easypwn (Day 20)

Home / Wiki / e20 – easypwn (Day 20)

e20 – easypwn (Day 20)

> ADCTF > ADCTF 2014 > e20 - easypwn (Day 20)

Pwn me! The flag is in /home/easypwn/flag. ASLR enabled, no libs.

Solução

Pois bem, analisando o binário encontramos:

Isto é, em uma primeira olhada, não teremos uma stack executável para explorar.

E analisando o código, vemos:

Bem interessante! Temos uma função que faz uma chamada a syscall. Precisamos então ver como usá-la para chamar a syscall que nós queremos, ou seja, controlar tanto EIP como EAX (syscall number), e claro os demais registradores que são usados como argumento pra syscall.

Causando um overflow, notamos que a partir do 16º byte o EIP é sobreescrito. E como o overflow ocorre na escrita da sys_read(), teremos em %eax o número de bytes lidos (pois é onde é colocado o retorno), então aí está a forma de controlar o número da syscall que iremos chamar!

Depois de tentar explorar usando brk(), passamos a adotar uma estratégia ainda mais simples:

  • Chamar mprotect()  para dar permissão de escrita na seção .text
  • Colocar em %ecx um endereço arbitrário para usar na sys_read()
  • Chamar sys_read() para escrever em nosso endereço arbitrário
  • Executar nosso shellcode!

Colocando tudo isso em prática, segue nosso exploit:

 

Flag

Executando temos:

Criado por

Epic Leet Team

Recent Posts