黑客揭密ASP.net服务器的入侵
有个朋友在QQ上问了我关于ASP.net服务器的入侵方法我将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();
//获取主机的网
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)));
//根据传入的参数(目录名)得到此目录下任何子目录名的字符串数组
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
本站文章均来自网络,如有侵权,请联系028-86262244-200 QQ: 1585463984 我们将立即删除!
--------------------编程问答-------------------- 标题党。
教别人如何进行普通地编,告诉程序员文件I/O的类库名字是啥这不叫“黑客”。我就很奇怪,靠写这些文章,能够给某些博客、小网站带来多少广告点击率呢? --------------------编程问答-------------------- P哥说的很对啊 --------------------编程问答-------------------- --------------------编程问答-------------------- 瞎扯蛋,鉴定完毕 --------------------编程问答-------------------- 围观楼主 --------------------编程问答-------------------- 没看。傻子文章
补充:.NET技术 , ASP.NET