admin 管理员组

文章数量: 1184232


2024年12月28日发(作者:初学c语言书籍)

一个虚拟主机安全漏洞的解决方案

曾经很早就在网上看到一篇关于<虚拟主机的重大

隐患>的文章,当时并不在意,做过asp虚拟主机的伴侣可能都知道,

即对每一个用户都设置一个的服务器用户和单个名目的操作权限,能

够基本上解决asp的fso问题。

在网上无意中发觉了一个叫做webadmin的-webshell,

对自己的服务器进行测试的时候,让我大吃一惊,竟然对我服务器的

c盘有读取的权限。以及对整个硬盘的修改删除权限。这样的话,那

么我的服务器的平安……

为了进一步证明,本人曾在国内一些有名的虚拟主机供应商上

作过测试,均有和我一样的问题。

有必要先介绍一下漏洞的缘由。

ASP中常用的标准组件:FileSystemObject,这个组件为 ASP

供应了强大的文件系统访问力量,可以对服务器硬盘上的任何有权限

的名目和文件进行读写、删除、改名等操作。FSO对象来自微软供应

的脚本运行库中。

在中我们发觉这一问题仍旧存在,并且变得更加难以解决。

这是由于.NET中关于系统IO操作的功能变得更加强大,而使这一问

题更严峻的是所具有的一项新功能,这就组件不需要象ASP

那样必需要使用regsvr32来注册了,只需将Dll类库文件上传到bin

名目下就可以直接使用了。这一功能的确给开发带来了很大

的便利,但是却使我们在ASP中将此dll删除或者改名的解决方法失

第 1 页

去效用了,防范此问题就变得更加冗杂。需要进一步了解的伴侣可以

看<虚拟主机的重大隐患>一文,本文就不再重复。只针对

此问题引出虚拟主机的平安设置。

网上提出针对此问题用Microsoft .NET Framework

Configration设置的对名目读取的权限,经过我们长时

间的测试没有胜利,可能是.net framework1.1机制改革了?

废话不说。先说说解决的思路:在 IIS 6 中,Web 应用程序

的工作进程设置为以进程标识“Network Service”运行。在 IIS 5

中,进程外 Web 应用程序则设置为以 IWAM_<服务器名> 帐户运行,

这个帐户是一般的本地用户帐户。

Network Service 是 Windows Server 2023 中的内置帐户。

了解 IIS 5 上的本地用户帐户〔IUSR 和 IWAM〕与这个内置帐户之

间的区分是特别重要的。Windows 操作系统中的全部帐户都安排了一

个 SID〔平安标识,Security ID〕。服务器是依据 SID,而不是与 SID

相关的名称来识别服务器上全部帐户的,而我们在与用户界面进行交

互时,则是使用名称进行交互的。服务器上创建的绝大部分帐户都是

本地帐户,都具有一个唯一的 SID,用于标识此帐户隶属于该服务器

用户数据库的成员。由于 SID 只是相对于服务器是唯一的,因此它

在任何其他系统上无效。所以,假如您为本地帐户安排了针对某文件

或文件夹的 NTFS 权限,然后将该文件及其权限复制到另一台计算机

上时,目标计算机上并没有针对这个迁移 SID 的用户帐户,即使其

上有一个同名帐户也是如此。这使得包含 NTFS 权限的内容复制可能

第 2 页

消失问题。

内置帐户是由操作系统创建的、一类较为特殊的帐户或组,例如

System 帐户、Network Service 和 Everyone 组。这些对象的重要

特征之一就是,它们在全部系统上都拥有一个相同的、众所周知的

SID。当将安排了 NTFS 权限的文件复制到内置帐户时,权限在服务

器之间是有效的,由于内置帐户的 SID 在全部服务器上都是相同的。

Windows Server 2023 服务中的 Network Service 帐户是特殊设计

的,专用于为应用程序供应访问网络的足够权限,而且在 IIS 6 中,

无需提升权限即可运行 Web 应用程序。这对于 IIS 平安性来说,是

一个特大的消息,由于不存在缓冲溢出,怀有恶意的应用程序无法破

译进程标识,或是对应用程序的攻击不能进入 System 用户环境。更

为重要的一点是,再也不能形成针对 System 帐户的“后门”,例如,

再也无法通过 InProcessIsapiApps 元数据库项利用加载到

Inetinfo 的应用程序。

Network Service 帐户在创建时不仅仅考虑了在 IIS 6 中的

应用。它还具有进程标识 的绝大部分〔并不是全部〕权限。

犹如 ASPNET 用户为了运行 应用程序,需要具有 IIS 5 服

务器上某些位置的访问权限,进程标识 也需要具有类似位

置的访问权限,而且还需要一些默认状况下没有指派给内置组的权限。

为了管理的便利,在安装 IIS 6 时创建了 IIS_WPG 组〔也称

为 IIS 工作进程组,IIS Worker Process Group〕,而且它的成员包

括 Local System〔本地系统〕、Local Service〔本地服务〕、Network

第 3 页

Service〔网络服务〕和 IWAM 帐户。IIS_WPG 的成员具有适当的 NTFS

权限和必要的用户权限,可以充当 IIS 6 中工作进程的进程标识。

因此,Network Service 帐户供应了访问上述位置的权限,具

有充当 IIS 6 工作进程的进程标识的充分权限,以及具有访问网络

的权限。

Msdn上说:在 Windows Server 2023 中,用户上下文称为

NETWORK SERVICE。这些用户帐户是在 .NET Framework 安装过程中

创建的,它具有唯一的不易破解的密码,并仅被授予有限的权限。

ASPNET 或 NETWORK SERVICE 用户只能访问运行 Web 应用程序所需

的特定文件夹,如 Web 应用程序存储已编译文件的 bin 名目。

要将进程标识设置为特定用户名,以取代 ASPNET 或 NETWORK

SERVICE 用户标识,您供应的用户名和密码都必需存储在

文件中。

但是依据实际状况,的可以无限制访问不

设防的服务器路径。不知道这算不算一个ms的重大漏洞。而且根本

不能使iis以的用户执行程序。J

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

IIS 6.0 在被称为应用程序隔离模式〔隔离模式〕的两种不同

操作模式下运行,它们是:工作进程隔离模式和 IIS 5.0 隔离模式。

这两种模式都要依靠于 作为超文本传输协议 (HTTP) 侦

听程序;然而,它们内部的'工作原理是截然不同的。

工作进程隔离模式利用 IIS 6.0 的重新设计的体系结构并且

第 4 页

使用工作进程的核心组件。IIS 5.0 隔离模式用于依靠 IIS 5.0 的

特定功能和行为的应用程序。该隔离模式由

IIs5IsolationModeEnabled 配置数据库属性指定。

您所选择的 IIS 应用程序隔离模式对性能、牢靠性、平安性

和功能可用性都会产生影响。工作进程隔离模式是 IIS 6.0 操作的

推举模式,由于它为应用程序供应了更牢靠的平台。工作进程隔离模

式也供应了更高级别的平安性,由于运行在工作进程中的应用程序的

默认标识为 NetworkService。

以 IIS 5.0 隔离模式运行的应用程序的默认标识为

LocalSystem,该标识允许访问并具有更改计算机上几乎全部资源的

力量。

IIS 功能

IIS 5.0隔离模式宿主/组件

工作进程隔离模式宿主/组件

工作进程管理

N/A

/ 服务

工作进程

N/A

第 5 页

/工作进程

运行进程内ISAPI 扩展

运行进程外ISAPI 扩展

N/A〔全部的 ISAPI 扩展都在进程内〕

运行ISAPI筛选器

配置 / 服务

/

服务

HTTP 协议支持

Windows内核/

Windows 内核/

第 6 页

IIS配置数据库

FTP

NNTP

SMTP

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

题。

默认状况下,IIS 6.0在工作进程隔离模式下运行,如图五所

示。在这种模式中,对于每一个Web应用,IIS 6.0都用一个的

第 7 页

的实例来运行它。也称为工作进程〔Worker

Process〕,或W3Core。

牢靠性和平安性。牢靠性的提高是由于一个Web应用的故障不

会影响到其他Web应用,也不会影响,每一个Web应用由

W3SVC单独地监视其健康状况。平安性的提高是由于应用程序不再象

IIS 5.0和IIS 4.0的进程内应用那样用System帐户运行,默认状

况下,的全部实例都在一个权限有限的“网络服务”帐户

下运行,如图六所示,必要时,还可以将工作进程配置成用其他用户

帐户运行。

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

我们把每一个网站都安排一个的应用程序池,并给予不同的权

限。不就能解决这个问题了吗?

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

首先,我们为网站创建两个用户〔一个是app_test_user、密

码为appuser,一个是iis_test_user、密码为iisuser〕

1. 打开 计算机管理器

2. 单击掌握台树中的用户→计算机管理→系统工具→本地用

第 8 页

户和组→用户

3. 单击“操作”菜单上的“新用户”输入用户名为。

app_test_user、密码为appuser

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

5. 选中复选框:

用户不能更改密码

密码永不过期

6. 单击“创建”,然后单击“关闭”。

根据此方法在创建iis_test_user账户

然后分别把app_test_user添加到iis_wpg组,把

iis_test_user添加到Guests组。删除其他组。

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

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

建→应用程序池

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

第 9 页

编辑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

FilesCommon FilesMicrosoft Shared继承属性删除并复制现有属

性,增加users的读取权限并替换子名目〔这样做是为了能够让

asp,使用access等数据库〕。

C:windows删除继承,并复制现有属性,只赐予

第 10 页

administrators,system完全掌握和users读取的权限并替换子名目

其余全部的盘都只给于administrators和system用户的完全

掌握权限,删除其他全部用户并替换子名目。

D:test〔用户网站名目〕继承现有属性并增加app_test_user

和iis_test_user完全掌握的权限并替换子名目。

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

但是,至此,还是对c:windows又读取权限的,〔怀

疑network servers用户属于users组,但是好多服务都要使用users

组来执行的,所以不能把c:windwos去掉users组的读取权限〕但

必需知道系统路径,有两种方案解决。

1、 再安装系统的时候使用无人值守安装,更换c:windows

默认安装路径,如更改为c:testtest(要符合dos的命名规章,不

能超过8个字符)。这个是必需的

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

%windir%helpiishelpcommon – 读取

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

写入

%windir%system32inetsrvASP Compiled Template – 读取

Inetpubroot〔或内容名目〕- 读取、执行

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

忽视遍历检查〔SeChangeNotifyPrivilege〕

作为批处理作业登录〔SeBatchLogonRight〕

第 11 页

从网络访问此计算机〔SeNetworkLogonRight〕

当然两种方法结合起来算是最平安的方案,一般使用第一种方

案已经算是很平安的,究竟是用一个webshell来猜想8位字符的名

目还是需要花费时间的。使用防火墙很简单就能发觉出来,并加以掌

第 12 页


本文标签: 进程 权限 用户 应用程序 帐户