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

Основна інформація

Програма/служба Finger використовується для отримання відомостей про користувачів комп’ютера. Зазвичай надавана інформація включає логін користувача, повне ім’я, а інколи — додаткові деталі. Ці додаткові дані можуть включати розташування офісу та номер телефону (якщо доступні), час входу користувача, період неактивності (idle time), останній раз, коли користувач прочитав пошту, та вміст файлів користувача .plan / .project.

З погляду pentesting, Finger все ще цікавий, оскільки протокол надзвичайно малий, зрозумілий людині, і часто реалізований із застарілою логікою розбору. Демон може розкрити:

  • користувачі, що наразі увійшли
  • повні імена / GECOS data
  • домашні каталоги, shells, часи останнього входу та TTYs
  • вміст .plan / .project
  • relay behaviour для опитування другого хоста через перший

Порт за замовчуванням: 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

Протокол — ASCII over TCP/79, зазвичай завершується CRLF, а після відповіді server closes the TCP connection. На практиці пустий запит (\r\n) часто достатній, щоб отримати поточний список користувачів, що саме й робить стандартний скрипт finger NSE від 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-style services, оскільки valid і invalid користувачі створюють різні текстові макети, але вам може знадобитися вручну порівняти positive і negative відповіді та адаптувати regexes, якщо цільовий daemon поводиться нетипово.

Корисні запити, коли daemon поводиться не як стандартний 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 виконати скрипт, використовуючи default scripts

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

Скрипт Nmap finger NSE є безпечним і просто надсилає null query для отримання поточного списку користувачів. Якщо ви хочете ширше вгадування username проти permissive daemons, розгляньте розширення підходу за допомогою кастомних wordlists або використання проектів, таких як fat-finger.nse, які надсилають кілька ймовірних account names в одному запиті та шукають відповідності username/GECOS.

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, звідки походить класичне зловживання |/bin/.... Сьогодні це рідкість, але якщо ви знайдете нестандартний або застарілий демон, ретельно перевіряйте на:

  • shell метасимволи в обробці імені користувача
  • виконання |program в хуках plan/project
  • бекенд-обгортки, які передають ім’я користувача в shell-скрипт або CGI

Також пам’ятайте про client-side шлях зловживання на Windows: finger.exe — підписаний LOLBIN, який може отримати довільний текст з віддаленого Finger сервера по TCP/79, а потім передати цей вивід в інший процес. Ця техніка більше стосується post-exploitation, ніж service enumeration, тому дивіться the Linux reverse-shell page для ідеї shell-транспорту і майте це на увазі при емулюванні attacker tradecraft.

Finger Bounce

Use a system as a finger relay

finger user@host@victim
finger @internal@external

Це не просто особливість реалізації: RFC 1288 визначає рекурсивну переадресацію @hostname (запити {Q2}). Якщо демон підтримує relaying, то проміжний сервер відкриває друге з’єднання Finger замість вас і повертає відповідь по початковому socket. Це означає:

  • ваш хост може не підключатися безпосередньо до кінцевої цілі
  • the relay може бути використаний для переліку внутрішніх користувачів з відкритої служби 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

Якщо ретрансляція працює, використовуйте її як внутній recon-примітив та порівняйте ретрансляційний вивід з прямим виводом публічного daemon’а. Різне форматування або фільтрація часто виявляють, чи обробляється шлях ретрансляції окремим 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