Wargame – Leviathan – Level 6

De posse da senha do usuário leviathan6 fazemos o login no servidor leviathan.labs.overthewire.org e procuramos por arquivos:

Vamos testar o executável leviathan6:

Informando um código de 4 dígitos:

Depurando:

O que será que a função atoi faz? Pesquisando: http://linux.die.net/man/3/atoi

atoi converte uma string em um inteiro.

Como não consegui resolver sozinho o problema, pesquisei e encontrei duas formas de passar esse nível: força bruta ou usar um depurador. Como a ideia é aprender, vamos pelo caminho mais complicado.

Para isso vamos usar o depurador gdb:

Iremos transformar o código em assembler:

O que nos importa é a seguinte linha:

Nela o programa faz uma comparação dos registradores esp e eax. Vamos colocar um breakpoint no programa bem na hora da comparação:

E então executamos o programa passando como código 0000:

Agora vamos ver o que temos no registrado esp:

Pronto, o código que é comparado ao código informado será exibido. Depois é só executar o programa com o código correto.

Referências

http://cplusperks.com/leviathan/#level6

http://www.unknownroad.com/rtfm/gdbtut/gdbtoc.html

Wargame – Leviathan – Level 5

De posse da senha do usuário leviathan5 fazemos o login no servidor leviathan.labs.overthewire.org e procuramos por arquivos:

Vamos ver o que o arquivo leviathan5 faz:

Parece que ele procura por um arquivo em /tmp/file.log. Neste caso pensei em criar um link simbólico para o arquivo da senha, assim:

Depois executamos o programa de novo:

Pronto, temos a senha do leviathan6!

Wargame – Leviathan – Level 4

De posse da senha do usuário leviathan4 fazemos o login no servidor leviathan.labs.overthewire.org e procuramos por arquivos:

Chama atenção o diretório .trash. Vamos ver o que tem nele:

Encontramos um arquivo chamado bin. Vamos executá-lo:

A saída parece ser um código binário, então procurei um conversor de binário para texto online e pronto, temos a senha!

Wargame – Leviathan – Level 3

De posse da senha do usuário leviathan3 fazemos o login no servidor leviathan.labs.overthewire.org e procuramos por arquivos:

Encontramos o arquivo level3. Vamos executá-lo:

O programa espera que seja informada uma senha. Informei abc, mas parece que era a senha errada.

Vamos depurar:

Primeiro é feita uma comparação com o comando strcmp, mas parece que ela não serve pra nada, porque mais adiante é feita outra comparação, da senha que digitamos com a string snlprintf. snlprintf é um comando do Linux, mas neste caso está aqui só pra confundir mesmo. Vamos testar:

Conseguimos o shell, basta pegar a senha para o nível 4.

Wargame – Leviathan – Level 2

De posse da senha do usuário leviathan2 fazemos o login no servidor leviathan.labs.overthewire.org e procuramos por arquivos:

Chama a atenção o arquivo printfile. Ao executá-lo ele mostra a saída do arquivo passado como parâmetro.

Vamos tentar:

Como eu não fazia a menor ideia de como continuar, fui pesquisar.

Encontrei uma pessoa que já completou o desafio usando o comando ltrace.

ltrace é uma ferramenta de depuração (debug) usada no Linux.

Primeiro vamos criar um arquivo temporário:

O programa printfile usa o comando cat para carregar o arquivo, então vamos tentar carregar o arquivo com a senha:

A saída é um pouco diferente que o comando anterior. Note a diferença na linha que checa as permissões do arquivo:

Segundo a documentação do access (http://linux.about.com/library/cmd/blcmdl2_access.htm)

A verificação é feita com uid e gid reais do processo, em vez de com os uid e gid efetivos como é feito geralmente.

A ideia é usar um arquivo com espaço no nome para que o comando cat seja executado com outros privilégios:

Podemos ver que foi executado o comando /bin/cat: two, ou seja, o sistema tentou abrir o arquivo. Por isso vamos criar um link simbólico para o arquivo:

E depois:

Pronto, temos a senha para o próximo nível!

Referências:

http://blog.moz-code.org/2012/07/leviathan-level-2-walkthrough.html