REXEC是服务的远程计算机上
运行命令。rexec 命令在执行指定命令前,验证远程计算机上的用户名,只有安装了 TCP/IP 协议后才可以使用该命令。
弱口令的检测
rexec的网络通信细节
rexec服务侦听512/TCP口,而512/UDP口对应biff服务。
rexec建立到rexecd的TCP连接(512/TCP),发送如下请求数据:
port
ANSI字符串形式的端口号,不是短整型形式的端口号。用途同rsh,stderr会重
定向到回连的TCP连接上。但对port没有范围限制,可任意指定。
此外,主连接(512/TCP)的源端口没有范围限制,这与rsh、rlogin通信不同。
username
试图远程使用的服务端用户名,最长16个字符。
password
与username对应的明文
口令,最长16个字符。
command
试图远程使用的服务端命令,也有长度限制,不过比较大。
rexecd向rexec发送如下响应数据:
ret等于0x00表示成功,data对应执行结果,一般是
分隔、结尾的文本。
ret等于0x01表示失败,data对应错误信息,一般也是
分隔、结尾的文本。
rexec通信过程与rsh通信过程极其相似,甚至连那个变态的port字段都一个用途。显
然应尽量不提供port字段。rexec通信过程中口令以明文形式传递,很不安全。这个
服务好像并没有考虑暴力穷举猜测口令的事,实在是个不该开放的服务。
三种操作系统
1) Linux
-a的作用就是不提供port字段,缺省没有指定-a。
in.rexecd会对客户端IP进行
反向域名解析,解析不成功的话向客户端返回错误信息
并终止服务进程。没有命令行开关改变这种行为,解决方案是在/etc/hosts中为客户
端IP增加相应条目。
2) Solaris
在我手头的Solaris 8上没找到rexec命令。
in.rexecd不会对客户端IP进行反向域名解析。没有命令行开关改变这种行为。
3) Aix
rexec -a -n
-a的作用同上。指定-n,rexec将交互式获取username/password。
rexecd会对客户端IP进行反向域名解析,解析不成功的话向客户端返回错误信息并终
止服务进程。解决方案有两种,一是在/etc/hosts中为客户端IP增加相应条目,二是