您当前的位置:首页 > 计算机论文>信息管理论文

基于ASP上传源码的漏洞分析及解决策略的创建

2015-07-25 09:41 来源:学术参考网 作者:未知

 中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2012)33-7899-04
  随着基于ASP 技术建立的动态网站越来越多,由于网站的交互功能,导致ASP木马被上传至网站的可能性也越来越大。而ASP木马与正常的ASP文件并无本质不同,夹杂在正常ASP文件中难以分辨。当服务器被上传ASP木马并执行后,黑客可以对文件进行创建、修改、删除、上传、下载,服务器数据毫无安全可言。ASP木马甚至可以运行命令行程序,创建用户账号,安装后门程序,利用系统漏洞可将用户权限提升为管理员权限,其高度的隐蔽性和难查杀性,对网站的安全造成了严重的威胁。
  所谓上传漏洞是指利用程序开发者在开发过程中的一些漏洞,将ASP、JSP、PHP等格式的木马上传至网站目录内,进而取得WEBSHELL,甚至管理员权限的一种方法。 对于上传漏洞的分析和研究,应该从上传文件的文件路径(FilePath)和文件名称(FileName)的源代码两个方面入手。
  1 文件路径(FilePath)上传漏洞分析
  文件路径(FilePath)上传漏洞主要是由于上传文件的路径(FILEPath)过滤不严引起的。比如动网程序、动易程序等上传文件的源码都存在这类漏洞,而且采用这种上传方式的网站大有人在,在此分析一下其部分源码:
  在这段源码中,最关键的就这两句:
  ◆formPath=upload.form("filepath")
  ◆filename=formPath&year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&ranNum&fileExt
  下面来看一下上传漏洞是如何形成的。在第一句代码中,从变量filepath中获取文件的保存路径,然后在第二句中,用路径变量formPath加随机生成的数字及经过判断的扩展名合成为一个新的变量,这个变量Filename就是上传文件保存的路径及名称。比如选择“a.jpg”文件上传,在上传过程中,随文件一起上传的还有一个FilePath变量,假设其值为“image”,当这些值传到upfile.asp中,filename就变成了“image/201210190820944973.jpg”,上传成功后,该a.jpg就被保存到image文件夹内,文件名字也被改成了“201210190820944973.jpg”。
  这是设计者的想法,似乎无懈可击。但细细研究,就会发现问题,其突破点就在变量身上。如果将FilePath值改为“image/b.asp_”(“_”表示二进制的00的意思),这样,该变量提交入upfile.asp后,Filename值就变成了“image/b.asp_/201210190820944973.jpg”,服务器在读取这段变量时,因为“_”是二进制的00,认为该变量语句已经结束了,于是“_”后面的字符也就被忽略掉了,这样一来Filename就成了“image/b.asp”,程序再用file.SaveAs进行保存,这个文件就保存成了b.asp文件,这种上传文件路径(FilePath)漏洞就出现了,随之而来的严重后果在此就不分析了。
  2 文件名称(FileName)上传漏洞分析
  文件名称(FileName)上传漏洞主要是上传文件名称(FileName)过滤不严谨造成的。笔者收集并阅读了大量的上传程序源码,发现上传文件名称过滤不严的形式是多种多样的,但其核心问题的表现形式基本差不多,在此以一段最典型的代码进行分析说明,其部分源码如下:
  上面代码中正常运行所涉及到参数主要包括:
  ◆FixName()函数,其接下来的源码为:
  从上面代码可以看出,系统中asp.dll文件映射的类型(asp、asa、cer、cdx、htr、shtml等)全部被过滤了,除此之外,还有小数点、单引号也被过滤,甚至连Chr(0)都过滤了(这儿的Chr(0)是16进制的00,表示为二进制是00000000,就是前面在文件路径上传漏洞中大显神通的空字符)。
  ◆CheckFileExt()函数,源码形式为:
  这个函数对经过FixName()函数审核后的文件扩展名再次判断,共有三次检查。第一次是判断传递来的文件扩展名是否为空;第二次是判断文件扩展名是否属于asp、asa等四种禁止传的文件类型;第三次就是用该扩展名同后台自定义的上传扩展名进行对比,符合就允许上传。
  下面上传一个文件来看其流程。比如上传文件为“c.cer”,用“FileExt = FixName(File.FileExt)”过滤这个文件时,因为cer属于fixName()函数的过滤范围,所以扩展名cer就成了空。当把这个空的扩展名传递给CheckFileExt()函数,在其进行到“If FileExt=""or IsEmpty(FileExt)”语句时,就会因为FileExt为空而退出交互,拒绝上传。
  这种设计思路,多重的判断的审核,好像非常严谨,但是只要认真琢磨,一样会发现问题,其突破点就在FixName()函数中。从上面上传“c.cer”文件时我们知道,“cer”会被过滤为空,但如果我们把上传文件扩展名改为ccerer,同时在后台自定义上传类型中增加“ccerer”、“cer”。这样,扩展名为ccerer的文件在经过第一步FixName()函数过滤后,变成了cer(中间的cer字符被过滤为空),传递此值到CheckFileExt()函数时,可以通过第一个关卡(扩展名不为空),再通过第二个限制类型的关卡,最后到对比后台上传类型关卡,顺利通过CheckFileExt()的三次的判断,并给定CheckFileExt = True,这样就把这个扩展名ccerer的文件上传到服务器中了,并且上传后的扩展名是“cer”。由于cer文件同asp文件一样,可以被执行,这就是典型的文件名称(FileName)上传漏洞了。
 在此,有读者可能会问:如果上传扩展名为aaspsp_或aaspsp.格式的文件,经过FixName()函数的过滤,变成了asp_或asp.文件,而这两种格式同样不在限制的范围,只要在后台中加上这几种类型,是不是就可以把上传的文件保存为asp格式?经过笔者仔细研究分析,发现事实并不是这样。先说小数点,在FixName()中,有这么一句:FixName = Replace(FixName,".",""),将小数点过滤为空,所以aaspsp.这条路就断了。再来看空格,虽然FixName()中没有过滤空格,但在CheckFileExt()读取后台上传类型时有这么一句:“If FileExt = Trim(Forumupload(i)) Then ”,其中有个Trim(),Trim的作用是删除字符串开 始和尾部的空格。虽然在后台能写入了asp_类型,但在读取时,却会被Trim()过滤成asp,而aaspsp_通过层层关卡到了此处,已变成了asp_,同样被拒绝上传。
  3 解决对策与方案
  通过前面对上传漏洞产生原理的详细分析,我们很容易得到解决此类问题的思路,主要应该从源代码的编写、非法上传的文件检测查杀以及服务器配置这三个方面进行解决。由于上文已经对上传文件名称(FileName)漏洞和上传文件路径(FilePath)漏洞的源码进行了分析,所以从源代码入手解决这类漏洞,在此不再作详述,只要大家针对上述问题对代码略作补丁,使源代码过滤更加严格就可解决此类问题,下面主要从另外二个角度进行分析。
  3.1 对上传文件进行检测查杀
  其解决的原理是:不管别人是利用何种漏洞,上传至服务器的文件我们一律给以检测,判断上传的图片格式是否合法。即:判断该文件是否符合图像的规范,如果是木马伪装的图片肯定是不合法的,然后用FSO删除即可。这儿结合着代码,给大家解析:
  以上的代码表明,假设你利某种漏洞,“合理”地将该“伪图像”文件上传了,而我们接着再使用自定义函数来对此“伪图像”文件进行甄别,判断该文件是否符合图像的规范,若符合图像的规范则通过,若是木马伪装的图像文件则FSO做出删除该文件的操作,以此来达到阻止木马文件上传目的。
  3.2 对服务器进行优化配置
  这是假设我们无法阻止asp木马文件上传至服务器,那么应该对IIS进行规范设置,对访问用户权限进行严谨分配,对重要文件夹(易被asp木马上传的目的文件夹)进行充分限权,让上传进来的asp木马无用武之地。
  1)规范设置IIS
  在IIS的运用程序配置中,删除不需要的程序映射,这是避免因为过滤不够被攻击者上传了某些特殊类型的木马进行攻击的办法。应当只留下.asp、.asa、.aspx三个映射,去掉.cer、.config等其他映射。这样,就是别人传上去了.cer等格式文件,也是一种无用的木马。
  2)严控访问权限
  互联网用户一般都以“Internet来宾账户”访问Web站点的,因此严格控制Internet来宾账户的访问权限是非常重要的。应该在Web站点必要的目录,去掉“执行”权限,即将执行权限改为“无”,也就是这个目录下的文件,只能读取,不能运行。尤其是上传目录,比如UploadFiles这样的目录,还有图片目录,一定要设置为只读。这样设置以后,黑客即使利用安全漏洞上传了ASP木马,但由于没有执行权限而无法运行,同样可以起到保护的作用。
  3)隐藏或删除无关组件
  为防范ASP木马对服务器操作系统的入侵,可以删除或隐藏不安全的组件。ASP木马利用的常用组件分别是:FileSystemObject组件、WScript.Shell组件、Shell.Application组件、WScript.Network组件等,对于不需要的组件可以用RegSrv32/u命令删除,需要的组件可以通过修改注册表将组件改名,同样可以阻止ASP木马上传的作用。
  4 结束语
  总之,ASP木马程序在管理员严格的权限控制之下,是可以防范的。我们要从源代码编写这个源头入手,对上传文件进行严格审核,并及时更新系统补丁,严格控制“Internet来宾帐户”访问权限,尽可能避免ASP木马被非法上传,通过细致的网站目录执行权限控制,避免大部分ASP木马的运行,采用不安全组件的隐藏、删除及访问权限设置,可以将ASP木马运行后的危害大大降低。严格、综合、全面的权限体系将使黑客利用ASP木马入侵Web站点的阴谋无法轻易得手。
  参考文献:
  [1] 张明.ASP建网策略与案例[M].北京:科学出版社,2011.
  [2] 杜方冬,吴珊,胡宇峰.彻底捍卫数据安全[M].济南:山东电子音像出版社,2011.
  [3] 张涛,胡铭曾,云晓春.计算机网络安全性分析建模研究[J].通信学报,2011,26(12):100-109.

相关文章
学术参考网 · 手机版
https://m.lw881.com/
首页