网站运营
位置:首页>> 网站运营>> 上传漏洞解析-小韩网站编程安全系列二

上传漏洞解析-小韩网站编程安全系列二

作者:小韩 来源:蓝色经典 发布时间:2007-07-13 10:08:00 

标签:上传,漏洞,安全

不算前言的前言


前两天小韩简单写了写关于在网站编程中跨站漏洞的一些知识,如果你还没有看到,那么为什么不现在就去看看呢:跨站漏洞解析-小韩网站编程安全系列一
你是否经常遇到自己的网站被人写入了iframe的挂马代码,你是否发现自己网站被入侵,而只发现有用户上传了某个貌似图片的文件,而实际上内容确实ASP木马呢,请看本期小韩网站编程安全系列。
今天继续我们的专题--小韩网站编程安全系列。在这一篇文章中,你将学到关于上传漏洞的一些知识,在本文中我们以ASP为例,来讲解上传漏洞的原理、成因以及防护。


什么是上传漏洞


上传漏洞是一个非常恐怖的漏洞,如果你的程序里面有这种漏洞,那么恶意攻击者可以直接向你的服务器上传一个webshell(又称ASP木马、PHP木马等即利用服务器端的文件操作语句写成的 * 页,可以用来编辑你服务器上的文件),从而控制你的网站。
那么,上传漏洞是怎么样一种漏洞呢。
一般对于上传漏洞的概念定义如下:由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。打个比方来说,如果你使用windows服务器并且以asp作为服务器端的 * 站环境,那么在你的网站的上传功能处,就一定不能让用户上传asp类型的文件,否则他上传一个webshell,你服务器上的文件就可以被他任意更改了。
相对于我前面所谈到的跨站漏洞,不得不承认,上传漏洞对于网站的危害是致命的,那么,上传漏洞是如何产生的呢。
我们知道,在WEB中进行文件上传的原理是通过将表单设为multipart/form-data,同时加入文件域,而后通过HTTP协议将文件内容发送到服务器,服务器端读取这个分段(multipart)的数据信息,并将其中的文件内容提取出来并保存的。通常,在进行文件保存的时候,服务器端会读取文件的原始文件名,并从这个原始文件名中得出文件的扩展名,而后随机为文件起一个文件名(为了防止重复),并且加上原始文件的扩展名来保存到服务器上。
慢着,就在这个扩展名这里就出了问题了,究竟是什么问题呢,我们开启一个新的章节来详细说说,上传漏洞的几种形式和各自的防护方法。


上传漏洞的几种形式及其防护


第一、       完全没有处理。

完全没有处理的情况不用我说,看名字想必大家都能够了解,这种情况是程序员在编写上传处理程序时,没有对客户端上传的文件进行任何的检测,而是直接按照其原始扩展名将其保存在服务器上,这是完全没有安全意识的做法,也是这种漏洞的最低级形式,一般来说这种漏洞很少出现了,程序员或多或少的都会进行一些安全方面的检查。

第二、       将asp等字符替换。

我们再看一些程序员进阶的做法,程序员知道asp这样的文件名是危险的,因此他写了个函数,对获得的文件扩展名进行过滤,如:

Function checkExtName(strExtName)
    strExtName = lCase(strExtName)        '转换为小写
    strExtName = Replace(strExtName,"asp","")        '替换asp为空
    strExtName = Replace(strExtName,"asa","")        '替换asa为空
    checkExtName = strExtName
End Function

 

使用这种方式,程序员本意是将用户提交的文件的扩展名中的“危险字符”替换为空,从而达到安全保存文件的目的。粗一看,按照这种方式,用户提交的asp文件因为其扩展名asp被替换为空,因而无法保存,但是仔细想想,这种方法并不是完全安全的。
突破的方法很简单,只要我将原来的webshell的asp扩展名改为aaspsp就可以了,此扩展名经过checkExtName函数处理后,将变为asp,即a和sp中间的asp三个字符被替换掉了,但是最终的扩展名仍然是asp。
因此这种方法是不安全的。如何改进呢,请接着往下看。

0
投稿

猜你喜欢

手机版 网站运营 asp之家 www.aspxhome.com