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

 

 

 

Wargame – Leviathan – Level 1

Depois de conseguir a senha do usuário leviathan1, efetuamos o login no servidor leviathan.labs.overthewire.org

Procurando arquivos:

O arquivo check é um executável. Vamos executá-lo:

É provável que a senha esteja dentro do executável. Para procurar a senha podemos usar algumas ferramentas. A primeira é o xxd. O comando xxd irá criar um hex dump do executável:

Procurando nas strings encontramos algumas palavras: sex, love, god. O próximo passo é testar essas strings.

Outra forma é usar o comando ltrace. O ltrace é uma ferramenta para debug. Vamos usá-la:

Na saída do debug podemos ver que o check compara a string informada com uma outra string. Assim temos a senha. Ao executar o check e informar a senha correta obtemos a shell do usuário leviathan2. Agora basta ir ao diretório /etc/leviathan_pass e recuperar a senha.

 

 

 

 

 

 

Wargame – Leviathan – Level 0

Resolução do desafio Leviathan

Acessar leviathan.labs.overthewire.org por ssh com o usuário leviathan0 e senha leviathan0.

Depois que o login foi efetuado procurar por arquivos:

A listagem mostrou um diretório oculto chamado .backup. Ao acessá-lo encontramos o arquivo bookmarks.htm

Vamos analisar o arquivo procurando a senha:

Desta forma encontramos a senha do usuário leviathan1.

 

 

 

 

Clonando um disco com o dd

Algumas vezes pode ser necessário efetuar uma cópia exata de um HD. Seja para algum tipo de análise ou para migrar um sistema para um disco novo.

Clone

O Linux possui um utilitário chamado dd que permite efetuar o clone de partições ou discos inteiros. Podem ser feitos clones de qualquer sistema operacional, não necessariamente do Linux.

Efetuar um clone é muito simples. Neste exemplo vou clonar um HD com Windows 7 para um disco novo. O disco atual é de 320GB e o novo é de 500GB. A única desvantagem é que o disco novo ficará com 320GB de capacidade.

Para isso irei usar o Ubuntu. Não é necessário instalar o sistema, apenas executá-lo. Obviamente é preciso que os dois discos estejam instalados. Depois de efetuar o boot pelo lice CD do Ubuntu, precisamos identificar os discos. Podemos executar o fdisk para isso:

A saída do comando irá listar os discos instalados e mostrará algo semelhante a isso:

Desta forma identificamos que o disco instalado em /dev/sda é o disco original de GB e o disco /dev/sdb é o disco que se tornará o clone.

O comando para efetuar o clone é o seguinte:

Explicando o comando:

  • dd – é o nome do comando;
  • if=/dev/hda – é o HD de origem;
  • conv= – opções da conversão;
  • noerror – instrui o dd a continuar a operação ignorando os erros de leitura. Por padrão o dd vai parar se encontrar um erro;
  • sync -  preenche os blocos com zero se ocorrerem erros de leitura. Assim fica mantido o sincronismo.

O processo pode ser bastante demorado. Neste exemplo o processo levou 5 horas. O sistema pode parecer travado, então para ver o progresso é preciso abrir outro terminal e executar o seguinte comando para ver o estado da cópia:

Terminado o processo o HD novo se tornará um clone do disco original. Poderemos então efetuar o boot do e usar o sistema normalmente.

Referências:

http://en.wikipedia.org/wiki/Dd_%28Unix%29

https://wiki.archlinux.org/index.php/disk_cloning#Cloning_an_entire_hard_disk

Recuperar a senha do root no Linux

Se você perdeu a senha do root e tem acesso a máquina, este artigo vai lhe ajudar a recuperar o acesso ao Linux.

O procedimento foi testado no Debian 7, mas deve funcionar em qualquer distribuição que use o GRUB como gerenciador de boot.

O primeiro passo é efetuar o boot e na tela do GRUB apertar ‘e’ no teclado. A tela a seguir será exibida:

GRUB

Localize a linha que contém:

Altere para:

Aperte Crtl+X para iniciar o boot. Será  exibida a seguinte tela:

Root

Execute os seguintes comandos:

Procure pelo root e apague toda a linha, deixando somente os números:

Shadow

Shadow

Neste caso deve ficar assim:

Shadow

Deste modo nós removemos a senha do root. Aperte Ctrl+O e enter para salvar. Depois Ctrl+X para sair.

Execute então os seguintes comandos:

Reinicie o sistema pressionando Ctrl+Alt+Del. Após o servidor reiniciar, logue como root. Não será necessário informar a senha. Agora você poderá definir a nova senha com o comando:

Pronto! A senha do root foi atribuída!

Referências:

http://www.vivaolinux.com.br/dica/Recuperando-senha-de-root-no-Debian-Wheezy