2password
Descrição do Desafio:
Autor: kaiphait Categoria: pwn Descrição:
2Password > 1Password
Arquivos
chall
Executável.
chall.c
Código-fonte.
Dockerfile
Arquivo docker.
ld-linux-x86-64.so.2
Linker da libc
libc.so.6
libc
solve.py
Script em Python que resolve o desafio.
📥 Download: Arquivos
Passo a Passo da Solução
1. Análise dos arquivos fornecidos
Este desafio fornece tanto o executável como o código-fonte dele. Olhando para o código fonte, notamos que é um código simples, ele apenas pede para inserirmos um usuário, uma senha 1, e por fim uma senha 2, sem nenhuma possibilidade de overflow.
Também notamos que a flag não é impressa na tela em nenhum momento, porém, há uma verificação entre o conteúdo dela e a senha 2.
O interessante desse código, é que no final dele, caso uma das verificações de usuário e senha tenha falhado, é impresso o username
por meio da função printf(username)
. E isso é uma vulnerabilidade de format string, porque dessa forma nós podemos inserir formatos na variável do usuário que imprimirão o conteúdo da pilha, e como o conteúdo da flag é carregado para uma variável local antes da verificação, ela estará na pilha.
2. Exploit
A solução é bem simples, devemos encontrar a posição na qual a flag começa a aparecer na pilha e com isso vazar seu conteúdo. Executando o código, e digitando vários caracteres de formato, encontramos a flag na posição 6 da pilha.
Flag
lactf{hunter2_cfc0xz68}
Autor da WriteUp
Atualizado