在WINDOWS的SOCKET服务器应用的编程中,如下的语句或许比比都是: #:3~I
s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); 0CRk&_ht
;?0r,0l2$
saddr.sin_family = AF_INET; >pn5nn1a
>R}p*=J
saddr.sin_addr.s_addr = htonl(INADDR_ANY); `.a~G
y
:0RfA%
bind(s,(SOCKADDR *)&saddr,sizeof(saddr)); SV96eYT<
I<ta2<h
其实这当中存在在非常大的安全隐患,因为在winsock的实现中,对于服务器的绑定是可以多重绑定的,在确定多重绑定使用谁的时候,根据一条原则是谁的指定最明确则将包递交给谁,而且没有权限之分,也就是说低级权限的用户是可以重绑定在高级权限如服务启动的端口上的,这是非常重大的一个安全隐患。 Ro|%pT
p8Wik<'^
这意味着什么?意味着可以进行如下的攻击: (}LLk+
7cJh^M
1。一个木马绑定到一个已经合法存在的端口上进行端口的隐藏,他通过自己特定的包格式判断是不是自己的包,如果是自己处理,如果不是通过127.0.0.1的地址交给真正的服务器应用进行处理。 !o&