在WINDOWS的SOCKET服务器应用的编程中,如下的语句或许比比都是: EY
9N{
s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); xYWg1e$k
`BZX\LPHm
saddr.sin_family = AF_INET; )SFyQ
oQ8If$a}
saddr.sin_addr.s_addr = htonl(INADDR_ANY); * d[sja+
0_-NE4SM/
bind(s,(SOCKADDR *)&saddr,sizeof(saddr)); %Nm69j-5%
f<~S0[H
其实这当中存在在非常大的安全隐患,因为在winsock的实现中,对于服务器的绑定是可以多重绑定的,在确定多重绑定使用谁的时候,根据一条原则是谁的指定最明确则将包递交给谁,而且没有权限之分,也就是说低级权限的用户是可以重绑定在高级权限如服务启动的端口上的,这是非常重大的一个安全隐患。 }>u<,
9l9|w4YJs
这意味着什么?意味着可以进行如下的攻击: z}m)u
Ni 5Su
1。一个木马绑定到一个已经合法存在的端口上进行端口的隐藏,他通过自己特定的包格式判断是不是自己的包,如果是自己处理,如果不是通过127.0.0.1的地址交给真正的服务器应用进行处理。 L%O(
I
~w9ZSSb4
2。一个木马可以在低权限用户上绑定高权限的服务应用的端口,进行该处理信息的嗅探,本来在一个主机上监听一个SOCKET的通讯需要具备非常高的权限要求,但其实利用SOCKET重绑定,你可以轻易的监听具备这种SOCKET编程漏洞的通讯,而无须采用什么挂接,钩子或低层的驱动技术(这些都需要具备管理员权限才能达到) -nrfu) G
v/lQ5R1
3。针对一些的特殊应用,可以发起中间人攻击,从低权限用户上获得信息或事实欺骗,如在guest权限下拦截telnet服务器的23端口,如果是采用NTLM加密认证,虽然你无法通过嗅探直接获取密码,但一旦有admin用户通过你登陆以后,你的应用就完全可以发起中间人攻击,扮演这个登陆的用户通过SOCKET发送高权限的命令,到达入侵的目的。 B&