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 (ou 993 en SSL/TLS).

  • POP3 utilise le port 110 (ou 995 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 :

ParamĂštre
Description

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

Commande
Description

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

Commande
Description

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 -k 'imaps://<IP CIBLE>' --user <user>:<pass>

Avec -v :

curl -k 'imaps://<IP CIBLE>' --user <user>:<pass> -v

Utiliser 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 :

ProblĂšme
Risque

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