IMAP / POP3
đ ThĂ©orie
Le protocole IMAP (Internet Message Access Protocol) permet dâaccĂ©der et de gĂ©rer les courriels directement sur le serveur de messagerie. Contrairement Ă POP3 (Post Office Protocol), IMAP offre des fonctionnalitĂ©s plus avancĂ©es comme la gestion de dossiers, la synchronisation multi-client et la consultation en ligne des emails. POP3, quant Ă lui, se limite au tĂ©lĂ©chargement, Ă la lecture et Ă la suppression des messages.
IMAP fonctionne sur une base client-serveur. Il permet aux utilisateurs de consulter leurs mails en ligne, tout en gardant les messages sur le serveur. Cela garantit la synchronisation de lâĂ©tat des mails (lus, non lus, dĂ©placĂ©s, supprimĂ©s) sur tous les clients connectĂ©s. Ă l'inverse, POP3 tĂ©lĂ©charge gĂ©nĂ©ralement les messages en local puis les supprime du serveur, ce qui rend leur gestion moins flexible sur plusieurs appareils.
Par défaut :
IMAP utilise le port
143
(ou993
en SSL/TLS).POP3 utilise le port
110
(ou995
en SSL/TLS).
â ïž IMAP et POP3 fonctionnent initialement en texte clair : noms dâutilisateur, mots de passe et contenu peuvent ĂȘtre interceptĂ©s sans chiffrement. Il est donc crucial dâutiliser SSL/TLS pour sĂ©curiser ces communications.
IMAP est particuliĂšrement utile en entreprise pour centraliser la messagerie tout en offrant une interface fluide Ă travers plusieurs clients. Il est souvent associĂ© Ă SMTP pour lâenvoi des messages, tandis quâIMAP et POP3 sont utilisĂ©s pour la lecture et la gestion des mails.
âïž Configuration par dĂ©faut
Des services comme Dovecot implémentent à la fois IMAP et POP3. On peut installer les paquets suivants pour tester une configuration locale :
apt install dovecot-imapd dovecot-pop3d
Parmi les paramĂštres sensibles dans la configuration :
auth_debug
Active les logs dĂ©taillĂ©s de lâauthentification.
auth_debug_passwords
Permet de loguer les mots de passe soumis.
auth_verbose
Log des tentatives échouées.
auth_verbose_passwords
Log plus détaillé, parfois avec troncature.
auth_anonymous_username
Définit un utilisateur anonyme par défaut.
â ïž Ces paramĂštres peuvent conduire Ă des fuites dâinformations sensibles si mal configurĂ©s !
đ§Ș Commandes utiles
đ„ IMAP
1 LOGIN <username> <password>
Authentifie lâutilisateur.
1 LIST "" *
Liste les dossiers disponibles.
1 SELECT INBOX
Ouvre la boßte de réception.
1 FETCH <ID> all
RécupÚre un message par ID.
1 LOGOUT
Ferme la session.
đ€ POP3
USER <username>
Sâidentifie avec un nom dâutilisateur.
PASS <password>
Envoie le mot de passe.
LIST
Liste tous les messages.
RETR <id>
RécupÚre un message.
DELE <id>
Supprime un message.
QUIT
Ferme la session.
đ Empreinte du service
Pour découvrir les services IMAP/POP3 :
nmap -sV -p110,143,993,995 -sC <IP CIBLE>
Exemple de réponse :
110/tcp open pop3 Dovecot pop3d
143/tcp open imap Dovecot imapd
993/tcp open ssl/imap Dovecot imapd
995/tcp open ssl/pop3 Dovecot pop3d
Ces résultats montrent les certificats SSL, les fonctions supportées (comme UIDL
, PIPELINING
, SASL
) ainsi que la version du serveur Dovecot.
đ° Interaction directe
Utiliser curl
:
curl
:curl -k 'imaps://<IP CIBLE>' --user <user>:<pass>
Avec -v
:
curl -k 'imaps://<IP CIBLE>' --user <user>:<pass> -v
Utiliser openssl
:
openssl
:IMAP :
openssl s_client -connect <IP CIBLE>:993
POP3 :
openssl s_client -connect <IP CIBLE>:995
Ces commandes permettent dâinitier une connexion TLS et de voir le certificat ainsi que les capabilitĂ©s du serveur.
đ Exemples de mauvaise configuration
Voici quelques mauvaises pratiques rencontrĂ©es lors de tests dâintrusion :
Logs dâauthentification trop verbeux
Divulgation de mots de passe en clair.
Compte anonyme activé (auth_anonymous_username
)
Connexion sans identifiants.
Mots de passe faibles ou identiques au nom dâutilisateur
Compromission simple via attaque par dictionnaire.
đź Exemple de reconnaissance
Utilisation de curl
avec des identifiants trouvés :
curl -k 'imaps://<IP CIBLE>' --user robin:robin
Résultat :
* LIST (\HasNoChildren) "." Important
* LIST (\HasNoChildren) "." INBOX
On peut voir que lâutilisateur robin
a accĂšs Ă deux dossiers : Important
et INBOX
. Cela valide lâaccĂšs et permet de continuer lâanalyse ou la compromission.
đ Ressources utiles
Figure out the exact organization name from the IMAP/POP3 service and submit it as the answer.
Nous effectuons dans un premier temps un scan concernant notre cible :
$ nmap -A -T5 10.129.42.195
Starting Nmap 7.93 ( https://nmap.org ) at 2025-06-24 10:41 CEST
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
25/tcp open smtp
53/tcp open domain ISC BIND 9.16.1 (Ubuntu Linux)
110/tcp open pop3 Dovecot pop3d
| ssl-cert: Subject: commonName=dev.inlanefreight.htb/organizationName=InlaneFreight Ltd/stateOrProvinceName=London/countryName=UK
143/tcp open imap Dovecot imapd
| ssl-cert: Subject: commonName=dev.inlanefreight.htb/organizationName=InlaneFreight Ltd/stateOrProvinceName=London/countryName=UK
993/tcp open ssl/imap Dovecot imapd
|_imap-capabilities: SASL-IR LITERAL+ ID OK ENABLE more post-login have listed IDLE capabilities IMAP4rev1 Pre-login AUTH=PLAINA0001 LOGIN-REFERRALS
| ssl-cert: Subject: commonName=dev.inlanefreight.htb/organizationName=InlaneFreight Ltd/stateOrProvinceName=London/countryName=UK
|_ssl-date: TLS randomness does not represent time
995/tcp open ssl/pop3 Dovecot pop3d
|_pop3-capabilities: RESP-CODES AUTH-RESP-CODE TOP CAPA USER PIPELINING SASL(PLAIN) UIDL
| ssl-cert: Subject: commonName=dev.inlanefreight.htb/organizationName=InlaneFreight Ltd/stateOrProvinceName=London/countryName=UK
3306/tcp open mysql MySQL 8.0.27-0ubuntu0.20.04.1
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Nmap done: 1 IP address (1 host up) scanned in 87.50 seconds
Ce scan nous permet d'obtenir le nom de l'organisation :
| ssl-cert: Subject: commonName=dev.inlanefreight.htb/organizationName=InlaneFreight Ltd/stateOrProvinceName=London/countryName=UK
Le nom de l'organisation est donc InlaneFreight Ltd
.
What is the FQDN that the IMAP and POP3 servers are assigned to?
La scan précédent nous permet de relever le FQDN associé au serveur actuel qui est dev.inlanefreight.htb
.
Enumerate the IMAP service and submit the flag as the answer. (Format: HTB{...})
Nous effectuons un scan relevant les baniÚres associés aux posts IMAP/POP3 :
$ nmap -p 110,143,993,995 --script=banner 10.129.42.195 -oA IMAP
Starting Nmap 7.93 ( https://nmap.org ) at 2025-06-24 11:09 CEST
Nmap scan report for aca.htb (10.129.42.195)
Host is up (0.026s latency).
PORT STATE SERVICE
110/tcp open pop3
|_banner: +OK InFreight POP3 v9.188
143/tcp open imap
| banner: * OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE ID
|_LE LITERAL+ STARTTLS LOGINDISABLED] HTB{roncfbw7iszerd7shni7jr2343zhrj}
993/tcp open imaps
| banner: * OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE ID
|_LE LITERAL+ AUTH=PLAIN] HTB{roncfbw7iszerd7shni7jr2343zhrj}
995/tcp open pop3s
|_banner: +OK InFreight POP3 v9.188
Nmap done: 1 IP address (1 host up) scanned in 0.54 seconds
Nous relevons ainsi le flag :
HTB{roncfbw7iszerd7shni7jr2343zhrj}
What is the customized version of the POP3 server?
Afin d'obtenir la version personnalisée du serveur POP3, nous utilisons netcat
:
$ nc -nv 10.129.42.195 110
Ncat: Version 7.93 ( https://nmap.org/ncat )
Ncat: Connected to 10.129.42.195:110.
+OK InFreight POP3 v9.188
La version utilisée est donc InFreight POP3 v9.188
.
What is the admin email address?
Nous nous connectons à la cible à l'aide des identifiants donnés par HTB (robin:robin
) :
$ openssl s_client -connect 10.129.42.195:imaps
CONNECTED(00000003)
Can't use SSL_get_servername
[...]
1 login robin robin
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
Une fois connectés, nous observons les différents mails disponibles via le compte actuel :
1 list "" *
* LIST (\Noselect \HasChildren) "." DEV
* LIST (\Noselect \HasChildren) "." DEV.DEPARTMENT
* LIST (\HasNoChildren) "." DEV.DEPARTMENT.INT
* LIST (\HasNoChildren) "." INBOX
1 OK List completed (0.001 + 0.000 secs).
Nous observons qu'il existe plusieurs listes. Nous pouvons alors en sélectionner l'une d'elles et observer si un mail est disponible :
1 select DEV.DEPARTMENT.INT
* FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
* OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft \*)] Flags permitted.
* 1 EXISTS
* 0 RECENT
* OK [UIDVALIDITY 1636414279] UIDs valid
* OK [UIDNEXT 2] Predicted next UID
1 OK [READ-WRITE] Select completed (0.001 + 0.000 secs).
1 fetch 1 all
* 1 FETCH (FLAGS (\Seen) INTERNALDATE "08-Nov-2021 23:51:24 +0000" RFC822.SIZE 167 ENVELOPE ("Wed, 03 Nov 2021 16:13:27 +0200" "Flag" (("CTO" NIL "devadmin" "inlanefreight.htb")) (("CTO" NIL "devadmin" "inlanefreight.htb")) (("CTO" NIL "devadmin" "inlanefreight.htb")) (("Robin" NIL "robin" "inlanefreight.htb")) NIL NIL NIL NIL))
1 OK Fetch completed (0.001 + 0.000 secs).
Cette recherche nous permet de trouver le mail de l'administrateur qui est devadmin@inlanefreight.htb
.
Try to access the emails on the IMAP server and submit the flag as the answer. (Format: HTB{...})
Nous récupérons le contenu du corps du message afin d'en obtenir le flag :
1 fetch 1 body[]
* 1 FETCH (BODY[] {167}
Subject: Flag
To: Robin <robin@inlanefreight.htb>
From: CTO <devadmin@inlanefreight.htb>
Date: Wed, 03 Nov 2021 16:13:27 +0200
HTB{983uzn8jmfgpd8jmof8c34n7zio}
)
1 OK Fetch completed (0.001 + 0.000 secs).
Nous observons alors que l'utilisateur devadmin@inlanefreight.htb
à envoyé à robin@inlanefreight.htb
le flag attendu :
HTB{983uzn8jmfgpd8jmof8c34n7zio}
Mis Ă jour