`
coolerbaosi
  • 浏览: 722071 次
文章分类
社区版块
存档分类
最新评论

asp.net服务器入侵方法

 
阅读更多

1.ASP中常用的标准组件:FileSystemObject,这个组件为 ASP 提供了强大的文件系统访问能力,可以对服务器硬盘上的任何有权限的目录和文件进行读写、删除、改名等操作。FSO对象来自微软提供的脚本运行库scrrun.dll中。使用下面的代码就可以在ASP中创建一个FSO对象:Set fso = CreateObject("Scripting.FileSystemObject")我们使用fso对象包含的属性和方法,如Drive、Drives、Folder、Floders、File、Files等对服务器的磁盘、目录和文件进行读、写、删除等操作。这一强大的文件系统访问能力给ASP共享空间提供者带来了严重的安全问题,很多ASP空间的管理员都删除此组件或将这个组件改名以避免用户使用这一标准组件。删除组件或组件改名确实是一个简单的方法并且也很有效,但是却使广大用户无法使用它的强大的功能。网络上还有一种看起来很美的方案,它允许用户使用 FileSystemObject 组件又不影响服务器的安全,即对每一个用户都设置一个独立的服务器用户和单个目录的操作权限。但是这种方法是有问题的。因为ASP和ASP.NET中在这方面的问题十分类似,所以我们将在ASP.NET的相应解决办法部分详加说明。在ASP.NET中我们发现这一问题仍然存在,并且变得更加难以解决。这是因为.NET中关于系统IO操作的功能变得更加强大,而使这一问题更严重的是ASP.NET所具有的一项新功能,这就组件不需要象ASP那样必须要使用regsvr32来注册了,只需将Dll类库文件上传到bin目录下就可以直接使用了。这一功能确实给开发ASP.NET带来了很大的方便,但是却使我们在ASP中将此dll删除或者改名的解决方法失去效用了,防范此问题就变得更加复杂。在讨论解决方案之前,我们先来看一下怎么来实现上述的危险的功能

2.文件系统

我们还要使用System.IO名称空间的其他几个类是:

System.IO.Directory:提供用于创建、移动和枚举通过目录和子目录的静态方法的类

System.IO.File:提供用于创建、复制、删除、移动和打开文件的静态方法的类

System.IO.FileInfo:提供创建、复制、删除、移动和打开文件的实例方法的类

System.IO.StreamReader:实现一个 TextReader,使其以一种特定的编码从字节流中读取字符。

每个我们所使用的类的属性和方法的具体用法我们将以代码注释的方式在程序中加以说明。

System.IO名称空间在 .NET FRAMEWORK提供的mscorlib.dll中,在使用VS.Net编程之前需要将此Dll引用到此项目中。

我们所编写的程序都使用了Codebehind方式,即每一个aspx程序都有一个对应的aspx.cs程序,aspx程序中只是写与页面显示相关的代码,所有逻辑实现的代码都放在相应的aspx.cs文件中,这样就可以更好得做到显示与逻辑的分离。由于我们的目的不是讨论Codebehind技术,所以就不在对此多加讨论了。

在这篇文章里,我们只介绍几个主要的类及其关键方法的用法,详细程序请查看附带的源代码。

程序一:显示服务器的当前信息和全部逻辑驱动器的名称的程序listdrivers.aspx

主要方法1:我们使用 GetSysInf() 方法来得到服务器的当前环境和平台的信息

//获取系统信息的方法,此方法在listdrivers.aspx.cs文件中

public void GetSysInf () {

//获取操作系统类型

qDrives = Environment.OSVersion.ToString();

//获取系统文件夹

qSystemDir = Environment.SystemDirectory.ToString();

/*获取映射到进程上下文的物理内存量,通过这一内存映射量可以了解ASP.NET程序在运行时需要多少系统物理内存,有助于更好的规划我们的整个应用,因为物理内存量是以Byte为单位的,所以我们将此数值除以1024,可以得到单位为KB的物理内存量*/

qMo = (Environment.WorkingSet/1024).ToString();

//获取当前目录(即该进程从中启动的目录)的完全限定路径

qCurDir = Environment.CurrentDirectory.ToString();

//获取主机的网

域名

qDomName = Environment.UserDomainName.ToString();

//获取系统启动后经过的毫秒数

qTick = Environment.TickCount;

//计算得到系统启动后经过的分钟数

qTick /= 60000;

//获取机器名

qMachine = Environment.MachineName;

//获取运行当前进程的用户名

qUser = Environment.UserName;

/*检索此计算机上格式为"<驱动器号>:\"的逻辑驱动器的名称,返回字符串数组,这是下一步操作的关键所在*/

achDrives = Directory.GetLogicalDrives();

//获取此字符串数组的维数,确定有多少个逻辑驱动器

nNumOfDrives = achDrives.Length;

} 系统信息不需要进行操作,我们简单的用asp:Label将他们显示出来就行了。逻辑驱动器的个数在不同的服务器上是不定的,所以用不定长数组保存逻辑驱动器的名称,而且逻辑驱动器的名称也是我们下一步浏览目录和文件的基础,故我们采用了数据网格DataGrid来显示和处理它。显示和处理逻辑驱动器名称的DataGrid的代码(代码在listdrivers.aspx文件):

<asp:DataGrid id="DriversGrid" runat="server" AutoGenerateColumns="false">

<Columns>

<asp:BoundColumn HeaderText="ID" DataField="ID" />

<asp:BoundColumn HeaderText="磁盘名" DataField="Drivers" />

<asp:HyperLinkColumn

HeaderText="详细信息"

DataNavigateUrlField="Drivers" DataNavigateUrlFormatString="listdir.aspx?dir={0}"

DataTextField="Detail"

Target="_new" />

</Columns>

</asp:DataGrid> 前两个BoundColumn列都是显示序号和实际逻辑驱动器名称的,需要说明的是第三列,我们在进入各个逻辑驱动器显示目录和文件之前需要将所选择的逻辑驱动器的名称传递到显示目录的文件去,所以需要一个特殊的超级链接行HyperLinkColumn,我们将DataNavigateUrlField设置为数据源中要绑定到 HyperLinkColumn 中的超级链接的 URL 的字段,在此即逻辑驱动器名称。然后将DataNavigateUrlFormatString设置为当 URL 数据绑定到数据源中的字段时,此HyperLinkColumn中的超级链接的 URL 的显示格式,即要链接到的下一级处理页面,在此为listdir.aspx?dir={用户点击行的逻辑驱动器名称}

1.ASP中常用的标准组件:FileSystemObject,这个组件为 ASP 提供了强大的文件系统访问能力,可以对服务器硬盘上的任何有权限的目录和文件进行读写、删除、改名等操作。FSO对象来自微软提供的脚本运行库scrrun.dll中。使用下面的代码就可以在ASP中创建一个FSO对象:Set fso = CreateObject("Scripting.FileSystemObject")我们使用fso对象包含的属性和方法,如Drive、Drives、Folder、Floders、File、Files等对服务器的磁盘、目录和文件进行读、写、删除等操作。这一强大的文件系统访问能力给ASP共享空间提供者带来了严重的安全问题,很多ASP空间的管理员都删除此组件或将这个组件改名以避免用户使用这一标准组件。删除组件或组件改名确实是一个简单的方法并且也很有效,但是却使广大用户无法使用它的强大的功能。网络上还有一种看起来很美的方案,它允许用户使用 FileSystemObject 组件又不影响服务器的安全,即对每一个用户都设置一个独立的服务器用户和单个目录的操作权限。但是这种方法是有问题的。因为ASP和ASP.NET中在这方面的问题十分类似,所以我们将在ASP.NET的相应解决办法部分详加说明。在ASP.NET中我们发现这一问题仍然存在,并且变得更加难以解决。这是因为.NET中关于系统IO操作的功能变得更加强大,而使这一问题更严重的是ASP.NET所具有的一项新功能,这就组件不需要象ASP那样必须要使用regsvr32来注册了,只需将Dll类库文件上传到bin目录下就可以直接使用了。这一功能确实给开发ASP.NET带来了很大的方便,但是却使我们在ASP中将此dll删除或者改名的解决方法失去效用了,防范此问题就变得更加复杂。在讨论解决方案之前,我们先来看一下怎么来实现上述的危险的功能

2.文件系统

我们还要使用System.IO名称空间的其他几个类是:

System.IO.Directory:提供用于创建、移动和枚举通过目录和子目录的静态方法的类

System.IO.File:提供用于创建、复制、删除、移动和打开文件的静态方法的类

System.IO.FileInfo:提供创建、复制、删除、移动和打开文件的实例方法的类

System.IO.StreamReader:实现一个 TextReader,使其以一种特定的编码从字节流中读取字符。

每个我们所使用的类的属性和方法的具体用法我们将以代码注释的方式在程序中加以说明。

System.IO名称空间在 .NET FRAMEWORK提供的mscorlib.dll中,在使用VS.Net编程之前需要将此Dll引用到此项目中。

我们所编写的程序都使用了Codebehind方式,即每一个aspx程序都有一个对应的aspx.cs程序,aspx程序中只是写与页面显示相关的代码,所有逻辑实现的代码都放在相应的aspx.cs文件中,这样就可以更好得做到显示与逻辑的分离。由于我们的目的不是讨论Codebehind技术,所以就不在对此多加讨论了。

在这篇文章里,我们只介绍几个主要的类及其关键方法的用法,详细程序请查看附带的源代码。

程序一:显示服务器的当前信息和全部逻辑驱动器的名称的程序listdrivers.aspx

主要方法1:我们使用 GetSysInf() 方法来得到服务器的当前环境和平台的信息

//获取系统信息的方法,此方法在listdrivers.aspx.cs文件中

public void GetSysInf () {

//获取操作系统类型

qDrives = Environment.OSVersion.ToString();

//获取系统文件夹

qSystemDir = Environment.SystemDirectory.ToString();

/*获取映射到进程上下文的物理内存量,通过这一内存映射量可以了解ASP.NET程序在运行时需要多少系统物理内存,有助于更好的规划我们的整个应用,因为物理内存量是以Byte为单位的,所以我们将此数值除以1024,可以得到单位为KB的物理内存量*/

qMo = (Environment.WorkingSet/1024).ToString();

//获取当前目录(即该进程从中启动的目录)的完全限定路径

qCurDir = Environment.CurrentDirectory.ToString();

//获取主机的网

tail"

HeaderText="详细信息"

Target="_new"

/>

在两个DataGrid(DirGrid,FileGrid)中我们分别设置了两个HyperLinkColumn列来导航到不同的处理页面。

在两个DataGrid中我们都使用了一个删除的按钮列:

<asp:ButtonColumn HeaderText="删除"

Text="删除"

CommandName="Delete"

/>

由于添加、更新、删除功能列都是DataGrid的默认模板列,所以可以在Vs.net中通过DataGrid的属性生成器自动添加此列。

获取上一页面所传递来的参数的代码:

因为在下面产生数据源的方法中需要使用由上一个页面传递过来的参数来确定目录和文件的名称,所以在页面的Page_Load方法里使用了下列代码:

strDir2List = Request.QueryString["dir"];

字符串strDir2List即传过来的目录名或文件名。

因为我们使用了两个DateGrid,就需要进行两次数据绑定,就有两个不同的生成数据源的方法。

生成目录数据网格(DirGrid)数据源的方法:

//通过此方法返回一个集合形式的数据视图DataView,用来初始化子目录的DataGrid

ICollection CreateDataSourceDir() {

dtDir = new DataTable();

DataRow dr;

//向DataTable中添加新的数据列,共四列

dtDir.Columns.Add(new DataColumn("DirID", typeof(Int32)));

dtDir.Columns.Add(new DataColumn("DirName", typeof(string)));

dtDir.Columns.Add(new DataColumn("DelDir", typeof(string)));

dtDir.Columns.Add(new DataColumn("DirDetail", typeof(string)));

//根据传入的参数(目录名)得到此目录下所有子目录名的字符串数组

string [] DirEntries = Directory.GetDirectories(strDir2List);

//使用foreach循环可以对未知长度的数组进行遍历循环

foreach(string DirName in DirEntries){

dr = dtDir.NewRow();

dr[0] = i;//序号

dr[1] = DirName;//文件夹名称

dr[3] = "删除";

dr[3] = "查看详情";

dtDir.Rows.Add(dr);

i++;

}

DataView dvDir = new DataView(dtDir);

//返回得到的数据视图

return dvDir;

}

生成文件数据网格(FileGrid)数据源的方法:

//通过此方法返回一个集合形式的数据视图DataView,用来初始化文件的DataGrid

ICollection CreateDataSourceFile() {

dtFile = new DataTable();

DataRow dr;

dtFile.Columns.Add(new DataColumn("FileID", typeof(Int32)));

dtFile.Columns.Add(new DataColumn("FileName", typeof(string)));

dtFile.Columns.Add(new DataColumn("DelFile", typeof(string)));

dtFile.Columns.Add(new DataColumn("FileDetail", typeof(string)));

//根据传入的参数(目录名)得到此目录下所有文件名的字符串数组

string [] FileEntries = Directory.GetFiles(strDir2List);

foreach(string FileName in FileEntries){

dr = dtFile.NewRow();

dr[0] = i;

dr[1] = FileName;

dr[2] = "删除";

dr[3] = "查看详情";

dtFile.Rows.Add(dr);

i++;

}

dvFile = new DataView(dtFile);

return dvFile;

}

我们编程实现了两个DataSource只需在页面的Page_Load方法里对两个DataGrid进行数据绑定即可将得到的DataTable中的数据显示在aspx页面的DataGrid上。

数据绑定代码://对子目录数据列表DirGrid进行数据源定义和数据绑定

DirGrid.DataSource = CreateDataSourceDir();

DirGrid.DataBind();

//对文件数据列表FileGrid进行数据源定义和数据绑定

FileGrid.DataSource = CreateDataSourceFile();

FileGrid.DataBind();

通过我们上边介绍的主要方法,我们实现了对某个逻辑驱动器或目录中的所有子目录和文件进行了列表显示,并且可以根据显示结果更进一步的浏览子目录或者查看文件的属性和内容提要。浏览子目录仍然是通过listdir.aspx这个程序,没有任何子目录级别要求,没有目录深度限制。

删除子目录和文件的主要方法和代码:

在删除子目录时,我们需要用到Directory.Delete (string,bool)方法,此方法有两种:

1.public static void Delete(string);

从指定路径删除空目录。

2.public static void Delete(string, boolean);

删除指定的目录并(如果指示)删除该目录中的任何子目录,将boolean设置为true的话,则删除此目录下的所有子目录和文件,否则将boolean设置为false。

在这里我们使用了第二种方法,如果选择删除的话,将删除此目录下的所有子目录和文件。

注意:Directory 类的所有方法都是静态的,因而无需具有目录Directory的实例就可被调用。

/*实现删除子目录的方法,此方法为VS.NET自动添加,注意DataGridCommandEventArgs e为DirGrid中 CommandName="Delete" 的ButtonColumn的事件,通过此事件,我们可以得到是那一行的ButtonColumn按钮列被点击,进而确定我们需要删除的子目录的名称*/

private void DirGrid_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e){

/*定义一个单元格,e.Item为此事件所发生行的所有项目,e.Item.Cells[1]为整个行的第二个单元格的内容,在此DataGrid中为子目录的名称

*/

TableCell ItemCell = e.Item.Cells[1];

//得到此子目录的名称的字符串

string item = ItemCell.Text;

//删除此子目录

Directory.Delete(item,true);

//删除后进行数据绑定以更新数据列表

DirGrid.DataBind();

}

在删除文件时,我们需要用到File.Delete(string path);

注意:File 类的所有方法都是静态的,因而无需具有目录的实例就可被调用。

private void FileGrid_DeleteCommand(object source,

System.Web.UI.WebControls.DataGridCommandEventArgs e) {

TableCell ItemCell = e.Item.Cells[1];

//得到此文件名称的字符串

string item = ItemCell.Text;

//删除此文件

File.Delete(item);

//删除后进行数据绑定以更新数据列表

DirGrid.DataBind();

}

通过上边的主要方法我们在页面上实现了一个删除某一个子目录或者文件的功能,此功能在测试时需要慎重使用,一旦删除无法通过常规方法恢复。其他如目录或文件改名、修改内容等方法都可以在此程序基础上添加相应的功能,实现方法也很简单。各位爱好者可以通过添加相应功能,使之扩充为一个基于Web的服务器文件管理系统。我们也可以由此看到这个程序的危害性,一个没有对此安全隐患采取防范措施的服务器的文件系统就都暴露在了使用此程序的用户面前。

分享到:
评论

相关推荐

    在CentOS6.5上使用Jexus安装部署ASP.NET MVC4和WebApi

    与其它WEB服务器相比,Jexus不但具有跨平台ASP.NET服务器这样的标志性特征,同时还拥有内核级的安全监控、入侵检测、URL重写、无文件路由等一系列重要功能和专有特性。 一、使用Jexus5.8.1独立版 网址...

    仿赶集网站模板.net分类信息管理系统下载

    源码名称:网软分类信息系统asp.net正式版下载分类信息网站网页模板 源码版本:V2020 建议分类:源码下载/asp.net源码/分类信息 联系EMAIL:38306293@qq.com 软件网站:http://www.wrzc.net 演示网站:...

    网软志成分类信息网站系统.net官方商业版

    分类信息网站系统正式版提供有桔红色.net综合风格分类网站模板,同时还提供有.net同城风格分类信息网页模板,asp.net分类信息网站系统地方门户版风格网站模板免费大餐来了,完全免费的asp.net+mssql简易风格分类信息...

    jexus-5.8.3-x64.tar.gz

    jexus是一款Linux平台上的高性能WEB服务器和负载均衡网关,以支持ASP.NET、ASP.NET CORE、PHP为特色,同时具备反向代理、入侵检测等重要功能。可以这样说,Jexus是.NET、.NET CORE跨平台的最优秀的宿主服务器,如果...

    分类信息系统正式版下载

    建议分类:源码下载/asp.net源码/分类信息 联系EMAIL:38306293@qq.com 软件网站:http://www.wrzc.net 演示网站:...

    联动天下服务器管理助理

    3.网站管理功能: 修改默认主页,自定义错误页面,修改ASP.NET版本 4.查看IIS上绑定的所有域名,获取IIS中的网站,重启IIS 5.添加数据库(SQL Server,MySQL) 限制大小, 修改数据库,删除数据库 6.一键对服务器进行安全设置...

    联动天下服务器管理助理 V1.0.0.zip

    3.网站管理功能: 修改默认主页,自定义错误页面,修改ASP.NET版本 4.查看IIS上绑定的所有域名,获取IIS中的网站,重启IIS 5.添加数据库(SQL Server,MySQL) 限制大小, 修改数据库,删除数据库 6.一键对服务器进行安全...

    ASP.NET MVC中使用jQuery时的浏览器缓存问题详解

    许多开发人员使用POST主要有2个原因:明确了数据不能被缓存,或者是避免JSON攻击(JSON返回数组的时候可以被入侵)。 缓存解释 jQuery全局对象里的ajax方法提供了一些options来支持缓存和Conditional GETs功能。 $...

    网页后门 ad.asp

     另一方面,被入侵者利用,从而达到控制网站服务器的目的。这些网页脚本常称为webshell。  脚本木马,目前比较流行的asp或php木马,也有基于.NET的脚本木马。 http://www.shanxiyiyou.com/admin/ad.asp admin

    FTP服务器程序

    程序语言ASP 、.NET。 端口:3306  服务:MYsql  说明:MySQL是一个小型关系型数据库管理系统,目前MySQL被广泛地应用在Internet上的中小型网站中。 端口:43958  服务:Serv-U 说明:Serv-U 是一个可以运行于...

    Ddun-v2.1.5.7.zip

    限制了常见的入侵方法,让服务器更安全! 功能介绍 一句话免疫,主动后门拦截,SESSION保护,防WEB嗅探,防CC,防篡改,注入防御,防XSS,防提权,上传防御,未知0day防御,异 形脚本防御等等。 防止黑客入侵和提权,让服务器更...

    有效防止ASP木马上传运行—小知识[网络安全技术]

    一般现今ASP木马常通过以下四点来操作服务器,所以我们只要将一下四处设置好就能从一定程度上有效防止ASP木马的入侵 一、使用FileSystemObject组件 FileSystemObject可以对文件进行常规操作 可以通过修改注册表,将...

    云锁PC控制端 v3.1.6 windows版

    云锁是服务器必备安全防护及运维管理SAAS解决方案,支持windows/linux服务器跨平台实时、批量、远程安全管理。云锁会7*24小时无间断守护业务系统,持续对企业业务系统进行学习并识别业务的风险点,通过防御模块减少...

    西部数码网站管理助手 v3.0.0

    可选支持asp,php,asp.net等脚本,各站点独立权限。 2.Mysql数据库创建、导入、导出、修复、改密码等 3.Mssql数据库创建、导入、备份、修复所有者、改密码、清空日志、清空数据库等… 4.备份IIS、还原,重装或更换...

    星外文件权限批处理生成工具_x64

    针对于宽松模式asp.net用户。在使用本工具之前请在自动设置受控中勾上"拦截可能入侵"功能,“记录相关入侵日志”,不需要勾。 4、可多次扫描重复修复个别问题。 2014.7.7: 文件夹: 1、删除目录C:\Inetpub\...

    服务器iis安全专家.zip

    目前,大部份站点采用,isapi-rewrite litte与Asp.net来实现URL重写,MYIIS-VIF能提供细化到域名站点的重写策略,一次加载,多次使用,使URL 的内部转化接近0,同时能不重新启动IIS的情况下使配置生效(同样适合用...

    网站管理助手V3

    可选支持asp,php,asp.net等脚本,各站点独立权限。 2.Mysql数据库创建、导入、导出、修复、改密码等 3.Mssql数据库创建、导入、备份、修复所有者、改密码、清空日志、清空数据库等… 4.备份IIS、还原,重装或更换了...

    付宝云支付平台程序 v1.0.7.2

    3.采用基于当前最安全的asp.net 4.0 + C++语言开发,程序更加稳定安全。4. 强大的脚本功能 和 脚本编辑功能!适合你的个性发展!5. 独家订单同比功能,可以比较同一时间段的充值量,和总的充值量 让你你对你的运营...

    网站恶意网页木马扫描器(WebshellScanner).zip

    更新程序需要服务器装有.net v2.0.50727 版本以上的环境才能运行,因此不支持.net的服务器无法使用自动更新。 2.无需.net环境运行扫描程序; -------------------------------------------------------- 这个...

Global site tag (gtag.js) - Google Analytics