当前位置: 首页 > 图文教程 > 服务器 > 安全防护 > IIS配置文件后门

安全防护
为Windows 2003安全—层层设防(3)
为Windows 2003安全—层层设防(4)
修改IIS的Banner隐藏操作系统版本
以毒攻毒!IIS Banner巧伪装
四招加强Windows 2003安全性
深入剖析EFS(2)
设置Active Directory域(1)
设置Active Directory域(2)
Rootkit分析(1)
Rootkit分析(2)
Rootkit分析(3)
Windows域信任关系建立全攻略
关于网站木马的解释(1)
关于网站木马的解释(2)
hdsi2.0 sql注入部分抓包(1)
hdsi2.0 sql注入部分抓包(2)
hdsi2.0 sql注入部分抓包(3)
hdsi2.0 sql注入部分抓包(4)
建造永不被杀的80端口后门(1)
建造永不被杀的80端口后门(2)

安全防护 中的 IIS配置文件后门


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-29   浏览: 36 ::
收藏到网摘: n/a

本文的内容是如何利用IIS本身的一些特性建立后门。当然,这主要是一份供网络管理员和网络安全工作人员参考的“Know Your Enemy”类文档,作者希望这篇文章能够对检查和清除后门有所帮助,而并不鼓励或赞同利用本文的技巧进行违法活动。 

  首先简单介绍一下IIS的配置文件MetaBase.bin。这个文件位于%SystemRoot%system32inetsrvMetaBase.bin,包含了几乎所有IIS的配置信息,是非常重要的系统文件。简单的说,我们在“intenet服务管理器”中所作的一切设置最终都会被保存在MetaBase.bin中。在日常的系统管理中除了通过“intenet服务管理器”来对MetaBase.bin进行操作外,Windows还提供了一个脚本adsutil.vbs可以对MetaBase.bin进行操作。 

  MetaBase的结构类似于注册表,也是树形结构,有类似键、值、项的概念。事实上在IIS3和PWS中,MetaBase的内容就是存储在注册表中的。MetaBase有两个主键:LM和Schema。其中,Schema保存了系统默认的一些配置,通常不需要修改,一旦改错也非常危险,所以无论是“intenet服务管理器”还是adsutil.vbs都没有提供修改Schema的机制。LM中包含了IIS的HTTP服务,FTP服务,SMTP服务等的配置信息。其中,LM/W3SVC/下是我们要用到的HTTP服务的配置信息。 

几个下面会提到的值: 

  LM/W3SVC/InProcessIsapiApps,进程内启动ISAPI。这是一个数组,里面包含的是一组指向一些ISAPI的路径。在这个数组里面的ISAPI运行的时候都是由inetinfo.exe直接启动的,继承inetinfo.exe的local 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.exe的local system权限。 

  AccessWrite,决定某个目录是否允许写入,也就是WEBDAV的PUT方法。 

  AccessExecute,决定某个目录是否允许执行应用程序。 

后门思路: 

  创建一个特定扩展名的脚本映射,指向我们的ISAPI,并把该ISAPI添加到InProcessIsapiApps列表中。那么我们向服务器请求该扩展名类型文件时就会在服务器上以local system权限执行该ISAPI,且所请求的文件并不需要是真实存在的。 

技巧: 

  1、既然并不需要真的建一个目录来设定ScriptMaps,那么就可以只写一个键,并给这个键加上ScriptMaps。这样,从“intenet服务管理器”里是看不出这个目录的,更看不到这个ScriptMaps。 

  2、虽然“intenet服务管理器”里面看不出来,但是有经验的管理员可能习惯于偶尔用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,在“intenet服务管理器”中是看不见的。 

  因为系统中本身InProcessIsapiApps中有一个WINNTSystem32msw3prt.dll,是.printer的映射,一般用不上。我们可以删掉D:WINNTSystem32msw3prt.dll的值,换上WINNTSystem32inetsrvmsw3prt.dll。 

  美中不足的是HTTP请求会留下