medium.com

VulnHub serial: 2

Anderson Gomes

Anderson Gomes

Hello friends.

Informações.

Serial 2 é uma maquina aparentemente fácil a parte mais difícil é para ganhar acesso root.

Autor da máquina: sk4
Tipo de máquina: Linux
Nível da máquina: Intermediário

Reconhecimento.

Usei o netdiscover para descobrir qual era o ip da máquina alvo, e descobrimos que é 192.168.56.128.

Escaneando.

Ao realizar a varredura com nmap encontramos algumas portas abertas.

Escaneando porta no alvo.

Agora vamos escanear a aplicação web em busca alguma coisa importante.

Escaneando com nmap

Escaneando o serviço que esta na porta 10000, encontramos um backdoor, mas infelizmente não temos a senha.

backdoor.

Acessando a página inicial da aplicação encontramos, um link para o serial2.apk .

Press enter or click to view image in full size

pagina inicial da aplicação.

Agora vamos fazer uma rápida análise no apk e tentar descobrir alguma informação importante.

Press enter or click to view image in full size

serial2.apk

No apk achamos um usuário e senha para ser usados na requisições da “/api”.
Tem mais algumas pistas na página inicial, “/api/ip”, “/api/arp”, “/api/nmap”.

Press enter or click to view image in full size

Ganhando acesso.

Depois de testar alguns request encontrei o uma forma de executar comandos, estamos dento da servidor.

Press enter or click to view image in full size

Depois de listar os arquivos executei outros comandos para coletar mais algumas informações.

cat todo.txt => for user sk4: create a snapshot of the project!

Já temos um usuário sk4.

id => uid=0(root) gid=0(root)

Get Anderson Gomes’s stories in your inbox

Join Medium for free to get updates from this writer.

ifconfig => 172.17.0.2

Somos root dentro de um container docker basta executar LinEnum.sh.

git log

Press enter or click to view image in full size

A descrição do último commit indica que algumas chaves foram removida , então vamos executar um “git checkout <commit>” no commit anterior.

Press enter or click to view image in full size

E lá estava nossa chave para acessar o servidor.
depois de se login com o usuário e a chave encontrada obtemos nossa primeira flag.

ssh -i id_rsa sk4@192.168.56.128

Primeira flag.

Agora vamos explorar um binário, primeiro vamos checar se existe alguma proteção ativada.

Verificando as proteções ativas.

O binário possui uma proteção ativada NX ( No eXecute) isso significa que qualquer código que for armazenado na pilha não sera executado.

ASLR ativado

Outro ponto importante é que no nosso alvo o ASLR (Address space layout randomization) esta habilitado e isso dificulta um pouco nossa exploração, pois quando ela esta habilitada alguns endereços de memória são randômicos.

Pontos esclarecidos vamos continuar.
Precisamos descobrir a senha, então vamos colocar um breakpoint em algum ponto de comparação da senha.

b *login+184

Press enter or click to view image in full size

pegando a senha.

A senha é j&9GCS34MY+^4ud* agora precisamos provocar um erro no programa.

python -c ‘print “A”*72+”B”*6’

Depois de enviar o payload gerado e depois digitar exit para sair do programa nossos “B” são exibidos como um endereço invalido.

Press enter or click to view image in full size

Mas isso não nos leva em lugar algum, precisamos executar algum comando system(“/bin/sh”) já é o suficiente.

Usaremos uma técnica chamada ROP (Return Oriented Programming).

“A Programação Orientada a Retorno (ou ROP) é a idéia de encadear pequenos trechos de montagem com controle de pilha para fazer com que o programa faça coisas mais complexas.”

Para conseguir fazer o bypass no ASLR precisanmos vazar o endereço da GOT (Global Offset Table) para calcular em tempo de execução qual o endereço base da libc .
Vamos criar nosso código para a exploração.

Press enter or click to view image in full size

O código completo esta no link abaixo.

https://raw.githubusercontent.com/andersongomes001/vulnhub/master/serial2/xpl.py

O teste feito na máquina local funcionava normalmente com o trecho do código abaixo, mas na máquina remota tive que repetir para a exploração ser bem sucedida.

p += p64(pop_rdi_ret)
p += p64(binsh)
p += p64(system)

Press enter or click to view image in full size