9.5 Unix Remote Information Services: rusers, rwho, finger & systat
Key Takeaways
- The finger daemon listens on TCP port 79 and returns login names, real names, home directories, shells, and idle and last-login times.
- rwho relies on rwhod broadcasting login state on UDP port 513; ruptime reports uptime from the same data.
- rusers is an RPC service (program number 100002) reached via the portmapper on port 111 and lists users logged in across the network.
- rstatd (RPC program 100001) and the systat service (TCP port 11) leak system performance and process information respectively.
- These services enrich a username list that then feeds password spraying, SMTP VRFY/EXPN confirmation and finger-based information gathering.
9.5 Unix Remote Information Services: rusers, rwho, finger & systat
Syllabus item F1 is precise: "Discovery of valid usernames from network services commonly running by default: rusers, rwho, SMTP, finger." It then requires you to "understand how finger daemon derives the information that it returns, and hence how it can be abused." These are legacy services from the era of trusted campus networks, and they survive on Solaris, AIX, HP-UX, embedded appliances and unhardened Linux hosts. Every one of them hands out user information to anyone who asks.
The reason this matters is the username half of a credential. Password attacks (spraying, brute force) need a valid user list, and account-lockout policies mean you cannot afford to waste attempts on non-existent names. A confirmed username is worth as much as half the credential.
1. The finger Service (TCP 79)
finger (RFC 1288) was designed so users could look up each other's contact details and login status. fingerd listens on TCP port 79.
finger @target.example.com # list all currently logged-in users
finger root@target.example.com # detail for a specific account
finger admin@target.example.com
A response is rich:
Login Name TTY Idle When Where
jsmith John Smith pts/0 2 Tue 09:14 10.20.31.117
oracle Oracle User pts/1 15 Tue 08:02 dbadmin-lt
How fingerd Derives Its Output — and Why That Is Abusable
This is the exact point the syllabus calls out. fingerd builds its answer from files it reads on the host:
/etc/passwd— login name, the GECOS field (real name, office, phone), home directory and shell.utmp/wtmp— who is currently logged in, on which terminal, from where, and idle time.~/.planand~/.project— free-text files in each user's home directory whose contents finger prints verbatim.- lastlog — the last login time and source for each account.
Two abuses follow directly:
- Username and account enumeration. Because the answer comes from
/etc/passwdandutmp,finger user@hostconfirms whether an account exists, andfinger @hostdumps everyone currently logged in — including the source addresses they logged in from, which reveals administrator workstations and trust relationships. Somefingerdimplementations even accept a query with no user or a wildcard, listing all known accounts. - Information disclosure and further abuse. The GECOS field leaks real names (feeding password guessing and social engineering) and phone/office data. The
.planfile is attacker-influenced in some setups. Historically,fingerdalso enabled the finger redirection / relay trick (finger user@host1@host2), using one host to finger another and bypassing source-address controls — and the original 1988 Morris Worm spread partly through afingerdbuffer overflow, the canonical example of the service's danger.
The idle and last-login data is valuable operationally: an account idle for months is a candidate for takeover with less chance of the real user noticing.
2. rwho and ruptime (UDP 513)
rwho shows who is logged in across every host on the local network. It depends on the rwhod daemon, which broadcasts each host's login state on UDP port 513 and listens for the broadcasts of its peers, caching them under /var/spool/rwho.
rwho # all users on all hosts that broadcast rwhod
ruptime # uptime, load and user count for each broadcasting host
ruptime reads the same cached data to report each host's uptime and load. The security problems:
- Passive disclosure. Because
rwhodbroadcasts, an attacker on the segment simply listens on UDP 513 and harvests a live map of every host, every logged-in user, and each host's uptime — with no query sent. Uptime is itself useful: a host with a very long uptime has not been rebooted and is therefore likely missing kernel patches. - Broadcast amplification of the estate map. One
rwhodgives you the whole broadcast domain's user population.
3. rusers and the RPC Family (portmapper 111)
rusers is the RPC-based equivalent of rwho. It is an ONC RPC service, program number 100002, and like all RPC services it is located by first querying the portmapper (rpcbind) on TCP/UDP port 111, which returns the dynamic port rusersd is actually listening on.
rpcinfo -p target.example.com # enumerate RPC services and their ports
rusers -l target.example.com # long listing: users, TTYs, idle times
rusers -al 10.20.30.0 # -a includes hosts with no users logged in
sysadmin target:pts/0 Sep 14 09:14 :22
backup target:pts/2 Sep 14 03:00 1:47
The related RPC/legacy services in the same family, all named or implied by the syllabus:
| Service | Port / RPC program | Leaks |
|---|---|---|
| rusersd | RPC program 100002 (via portmapper 111) | Users logged in across the network, with TTY and idle time |
| rstatd | RPC program 100001 (via portmapper 111) | System performance: CPU, disk, network, load — and thereby usage patterns |
| rwalld | RPC program 100008 | Accepts broadcast messages to all users (nuisance/DoS) |
| sprayd | RPC program 100012 | Packet-flood testing target |
| systat | TCP port 11 | Runs who/w/netstat-style output to any connector: live user and process list |
| netstat service | TCP port 15 | Legacy service echoing netstat output remotely |
rstatd deserves a note: its performance data reveals when a host is busy or idle, letting an attacker time activity for low-observation windows, and older rstatd implementations carried remote format-string vulnerabilities.
The systat service (TCP 11) is the bluntest of all — connecting to it runs a who-style command and returns the live user and process listing directly, no client tool required:
nc target.example.com 11 # systat: dumps who/process output
nc target.example.com 15 # netstat service: dumps connection table
4. Chaining Into a Username List
finger @host -> currently logged-in users + real names + source hosts
finger user@host -> confirm/deny a specific account
rwho / rusers -> users across the whole segment
systat (TCP 11) -> live who/process output
rstatd -> when the host is busy (timing)
|
v
Consolidated, de-duplicated username list
|
v
SMTP VRFY/EXPN (section 9.2) -> confirm which names are valid mail recipients
|
v
Password spraying / targeted brute force (mindful of lockout)
The value of F1 is that these services build the input to the credential-attack phase. A single finger @host can name every administrator and the workstation each logs in from; combined with GECOS real names it also seeds a realistic phishing campaign.
5. Detection, Reporting and Remediation
These services are almost never needed on a modern network, so the finding and the fix are simple:
- Confirm exposure with
nmap -p 11,15,79,512,513,514 <target>for the TCP/UDP legacy services andrpcinfo -p <target>for the RPC family. - Report the specific disclosure, not just "finger is enabled": name the accounts, real names and source hosts the service actually revealed, because that evidence is what conveys the risk.
- Remediate by disabling the services entirely — remove
fingerd,rwhod,rusersd,rstatdand thesystat/netstatinetd entries; where a legitimate need exists, restrict them by firewall to management hosts only. Modern equivalents (SSH, monitoring agents with authentication) replace every legitimate use. - Treat username disclosure as a real finding even without a password, because it removes lockout-safe target selection and directly enables spraying and phishing.
An assessor runs 'finger @oldhost' against a legacy Solaris server and receives a list of logged-in users together with the IP addresses they connected from. From which sources does fingerd derive this output, and what is the primary abuse?
The rusers command relies on which mechanism to locate the rusersd service on a target host?
An assessor on a local segment passively captures UDP port 513 broadcasts and builds a live map of hosts, their logged-in users and their uptimes without sending any query. Which service is responsible?
Why is disclosure of valid usernames through services like finger, rusers and systat treated as a genuine finding even when no password is obtained?