在WINDOWS的SOCKET服务器应用的编程中,如下的语句或许比比都是: E%^28}dN
s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); _6m3$k_[MJ
K*Jtyy}r
saddr.sin_family = AF_INET; `0^i
#
Z ~(XyaN
saddr.sin_addr.s_addr = htonl(INADDR_ANY); ~qS/90,
c Vn+~m_%
bind(s,(SOCKADDR *)&saddr,sizeof(saddr)); >D/~|`=p
;PfeP;z
其实这当中存在在非常大的安全隐患,因为在winsock的实现中,对于服务器的绑定是可以多重绑定的,在确定多重绑定使用谁的时候,根据一条原则是谁的指定最明确则将包递交给谁,而且没有权限之分,也就是说低级权限的用户是可以重绑定在高级权限如服务启动的端口上的,这是非常重大的一个安全隐患。 ;xW8Z<\-
aW`:)y&f
这意味着什么?意味着可以进行如下的攻击: #/n|@z'
klK-,J
1。一个木马绑定到一个已经合法存在的端口上进行端口的隐藏,他通过自己特定的包格式判断是不是自己的包,如果是自己处理,如果不是通过127.0.0.1的地址交给真正的服务器应用进行处理。 tsTR2+GZS
y'J:?!S,Yu
2。一个木马可以在低权限用户上绑定高权限的服务应用的端口,进行该处理信息的嗅探,本来在一个主机上监听一个SOCKET的通讯需要具备非常高的权限要求,但其实利用SOCKET重绑定,你可以轻易的监听具备这种SOCKET编程漏洞的通讯,而无须采用什么挂接,钩子或低层的驱动技术(这些都需要具备管理员权限才能达到) 86;+r'3p.
J<