Skip to content

☆ rexec的网络通信细节

rexec服务侦听512/TCP口,而512/UDP口对应biff服务。

rexec -a -l -p

rexec建立到rexecd的TCP连接(512/TCP),发送如下请求数据:

[port]\0\0\0\0

port

ANSI字符串形式的端口号,不是短整型形式的端口号。用途同rsh,stderr会重
定向到回连的TCP连接上。但对port没有范围限制,可任意指定。

此外,主连接(512/TCP)的源端口没有范围限制,这与rsh、rlogin通信不同。

username

试图远程使用的服务端用户名,最长16个字符。

password

与username对应的明文口令,最长16个字符。

command

试图远程使用的服务端命令,也有长度限制,不过比较大。

rexecd向rexec发送如下响应数据:

ret等于0x00表示成功,data对应执行结果,一般是\n分隔、结尾的文本。

ret等于0x01表示失败,data对应错误信息,一般也是\n分隔、结尾的文本。

rexec通信过程与rsh通信过程极其相似,甚至连那个变态的port字段都一个用途。显 然应尽量不提供port字段。rexec通信过程中口令以明文形式传递,很不安全。这个 服务好像并没有考虑暴力穷举猜测口令的事,实在是个不该开放的服务。

下面分三种操作系统简单讨论一下rexec/rexecd:

1) Linux

rexec -a -l -p

-a的作用就是不提供port字段,缺省没有指定-a。

in.rexecd会对客户端IP进行反向域名解析,解析不成功的话向客户端返回错误信息 并终止服务进程。没有命令行开关改变这种行为,解决方案是在/etc/hosts中为客户 端IP增加相应条目。

当username/password无法通过认证时,直接终止服务进程,没有任何提示。相比后 两种操作系统来说,这是一种安全的响应行为。

2) Solaris

在我手头的Solaris 8上没找到rexec命令。

in.rexecd不会对客户端IP进行反向域名解析。没有命令行开关改变这种行为。

username不存在时的响应信息:

1 [Login incorrect.]

username存在但password不正确时的响应信息:

1 [Password incorrect.]

这是一种不安全的响应行为。

3) Aix

rexec -a -n

-a的作用同上。指定-n,rexec将交互式获取username/password。

rexecd会对客户端IP进行反向域名解析,解析不成功的话向客户端返回错误信息并终 止服务进程。解决方案有两种,一是在/etc/hosts中为客户端IP增加相应条目,二是 修改/etc/inetd.conf中rexecd的命令行,增加命令行开关"-c",取消反向域名解析。

username不存在时的响应信息:

1 [rexecd: 0826-604 The login is not correct.]

username存在但password不正确时的响应信息:

1 [3004-300 You entered an invalid login name or password.]

这是一种不安全的响应行为。