IIS配置文件后门来源: 发布时间:星期四, 2009年9月10日 浏览:0次 评论:0
作者:tombkeeper
主页http://www.nsfocus.com 日期:2003-03-03 本文内容是如何利用IIS本身些特性建立后门当然这主要是份供网络管理员和网络安全工作人员参考“Know Your Enemy”类文档作者希望这篇文章能够对检查和清除后门有所帮助而并不鼓励或赞同利用本文窍门技巧进行违法活动 首先简单介绍下IIS配置文件MetaBase.bin这个文件位于%Root%\system32\inetsrv\MetaBase.bin包含了几乎所有IIS配置信息是非常重要系统文件简单说我们在“enet服务管理器”中所作切设置最终都会被保存在MetaBase.bin中在日常系统管理中除了通过“enet服务管理器”来对MetaBase.bin进行操作外Windows还提供了个脚本adsutil.vbs可以对MetaBase.bin进行操作 MetaBase结构类似于注册表也是树形结构有类似键、值、项概念事实上在IIS3和PWS中MetaBase内容就是存储在注册表中MetaBase有两个主键:LM和Schema其中Schema保存了系统默认些配置通常不需要修改旦改错也非常危险所以无论是“enet服务管理器”还是adsutil.vbs都没有提供修改Schema机制LM中包含了IISHTTP服务FTP服务SMTP服务等配置信息其中LM/W3SVC/下是我们要用到HTTP服务配置信息 几个下面会提到值: LM/W3SVC/InProcessIsapiApps进程内启动ISAPI这是个里面包含是组指向些ISAPI路径在这个里面ISAPI运行时候都是由inetinfo.exe直接启动继承inetinfo.exelocal system权限;而不在其中ISAPI则是由svchost.exe派生dllhost.exe进程启动运行身份是IWAM_NAME当然这是IIS默认安全级别“中”情况下如果设为低那么所有ISAPI都会由inetinfo.exe直接派生另外如果设定时候不指定路径而是仅指定个扩展名那么任何路径下同名ISAPI在被时候都会以system权限执行 ScriptMaps脚本映射在某个目录下设定该值后则向该目录请求特定扩展名文件会交给指定ISAPI执行需要强调是设定ScriptMaps目录并不定要真实存在只要在MetaBase中某个HTTP例子root键下建了个子键对该字键同名目录HTTP请求IIS会认为是合法并会交由映射ISAPI处理这也算是IIS个问题吧 CreateProcessAsUser在某个目录下指定改值为0则该目录下应用会继承inetinfo.exelocal system权限 AccessWrite决定某个目录是否允许写入也就是WEBDAVPUT思路方法 AccessExecute决定某个目录是否允许执行应用 后门思路: 创建个特定扩展名脚本映射指向我们ISAPI并把该ISAPI添加到InProcessIsapiApps列表中那么我们向服务器请求该扩展名类型文件时就会在服务器上以local system权限执行该ISAPI且所请求文件并不需要是真实存在 窍门技巧: 1、既然并不需要真建个目录来设定ScriptMaps那么就可以只写个键并给这个键加上ScriptMaps这样从“enet服务管理器”里是看不出这个目录更看不到这个ScriptMaps 2、虽然“enet服务管理器”里面看不出来但是有经验管理员可能习惯于偶尔用adsutil.vbs enum /p来看下: # adsutil.vbs enum /p /w3svc/1/root Microsoft (R) Windows Script Host Version 5.6 版权所有(C) Microsoft Corporation 1996-2001保留所有权利 [/w3svc/1/root/_vti_bin] [/w3svc/1/root/evildir] 这样就暴露了我们设那个键并不是真实存在虚拟目录只是配置文件中个串所以可以使用0x08这样来做键值0x08是Backspace键对应16进制值控制台上显示效果是向左边删除个其实就是把“/”给删了: # adsutil.vbs enum /p /w3svc/1/root Microsoft (R) Windows Script Host Version 5.6 版权所有(C) Microsoft Corporation 1996-2001保留所有权利 [/w3svc/1/root/_vti_bin] [/w3svc/1/root] 面对这种输出般人是不会留意 当然也可以设为类似_vti_script_vti_bin这样名字只要不设KeyType在“enet服务管理器”中是看不见 系统中本身InProcessIsapiApps中有个\WINNT\32\msw3prt.dll是.prer映射般用不上我们可以删掉D:\WINNT\32\msw3prt.dll值换上\WINNT\32\inetsrv\msw3prt.dll 美中不足是HTTP请求会留下痕迹但是HTTP也有好处那就是可以随便用个代理服务器做跳板另外也可以用插入0x0D 0x0A来伪造日志思路方法(详见ApacheIIS等多种http服务器允许通过发送回车符伪造日志文)这就是构造目录窍门技巧了 具体实现: 当然可以用adsutil.vbs手工来加不过需要注意adsutil.vbs只能设不能改所以用adsutil.vbs时候定要把原先也加上否则原先就会丢失区别条目的间用空格分开 先用下面命令取得当前InProcessIsapiApps列表: adsutil.vbs get /W3SVC/InProcessIsapiApps 取到的后把自己ISAPI路径也加进去 adsutil.vbs /W3SVC/InProcessIsapiApps "C:\WINNT\32\idq.dll" "C:\WINNT\32\inetsrv\httpext.dll" ……………… ScriptMaps设定同InProcessIsapiApps 当然这样比较麻烦也无法写入0x08这样键值所以我干脆自己写个VBS次性搞定至于那个做后门ISAPI能实现功能就完全取决于想象力了这里是个简单例子屏幕拷贝: # nc 10.11.0.26 80 POST /%08/anything.tom Microsoft Windows 2000 [Version 5.00.2195] (C) 版权所有 1985-1998 Microsoft Corp. C:\WINNT\system32>whoami NT AUTHORITY\SYSTEM C:\WINNT\system32>exit HTTP/1.1 200 OK Server: Microsoft-IIS/5.0 Date: Wed, 08 Jan 2003 06:49:37 GMT 更隐蔽思路方法是写个特殊ISAPI并注册为解析asp通常情况下该把收到请求转给系统原来asp.dll并把结果返回当收到个特殊POST请求时就启动自己后门代码这样日志里面也不会有什么显示审核时也很难发现 除了上面所述利用脚本映射思路方法外还可以赋予某个虚拟目录AccessWrite和AccessExecute权限需要运行后门时候利用WEBDAV上载ISAPI然后运行使用完了再删除(是否能删除?还是需要restart W3SVC ?我没有试验)如果上载不是DLL而是EXE文件那么把该目录下CreateProcessAsUser设为0也可以获得local system权限这个思路方法早有人撰文论述但AccessWrite和AccessExecute改变都可以在“enet服务管理器”中看出来隐蔽性就差了 0
相关文章读者评论发表评论 |