资源福利站
精品百度网盘资源博客

网站安全-聊聊上传漏洞

“瓜分社交电商千亿红利,粉象生活团队招募!”
问题与概念

一个问题:只要有上传功能就一定有漏洞吗?

让我们假设两种场景:

(1)公司的网站管理员经常接到各种修改网站的需求,并且很多时候不在办公网内也被要求修改网站,这时管理员为了方便开发出一个单独的上传页面(不与其他页面相互引用),且这个页面只是为了方便管理员远程上传各种资源、文档,修改网站,同时他认为不会被他人发现,并没有做任何安全措施,这时如果被别有用心之辈发现,上传任意的资源,这种情况可以被称为上传漏洞么?

(2)一个网站为了更好的方便网站用户进行互动,允许上传各种图片,video等多媒体资源,被居心不良的人发现了,通过各种手段绕过了限制,上传了任意资源,这种情况可以被称为上传漏洞么?

两个概念:上传漏洞与解析漏洞

私以为第一种是真正的上传漏洞,因为原本的目标是只打算自己偷偷用,并不希望被别人发现用来做上传,人性中懒惰的弱点被放大成为网站上的漏洞。而第二种,本意是希望被用来上传,同时对上传文件的类型加以限制,但是由于Web服务器开发者的某些意图、失误或者系统的某些特性,导致被别有用心的人绕过了限制,并且使Web服务器解析了上传的任意文件,这种应该被称为通过上传途径,利用Web服务器的解析漏洞导致的任意文件上传,本质上出现漏洞的是Web服务器的解析方式,而不是上传,既然我们说到了上传漏洞和解析漏洞的区别,那我们先来看看常见的Web上传方式吧。

上传漏洞

表单提交是最常见的提交数据、上传资源的方式,不同的编码类型,影响着浏览器对服务端提交数据的格式,表单常见的编码类型有三种:

1、application/x-www-form-urlencoded

2、text/plain 

3、multipart/form-data

首先,让我们构造一个表单提交的场景:

前端显示为:

网站上传漏洞-表单

1、application/x-www-form-urlencoded编码

(1)表单源码

表单源码

(2)提交数据格式

提交数据格式

(3)说明

当编码格式为“application/x-www-form-urlencoded”时,提交的content-type为“application/x-www-form-urlencoded”,提交的数据为key-value对,这里只提交了file=2.jpg,并没有提交2.jpg的具体内容。

2、text/plain编码

(1)表单源码

提交数据格式

(2)提交数据格式

提交数据格式

(3)说明

当编码为text/plain时,content-type为text/plain,提交的数据为key-value对,与

“application/x-www-form-urlencoded”编码的区别在于没有使用“&”连接,这里也只提交了file=2.jpg,并没有提交2.jpg的具体内容。

3、multipart/form-data编码

(1)表单源码

multipart/form-data编码 (1)表单源码

(2)提交数据格式

提交数据格式

(3)说明

当编码格式为multipart/form-data时,content-type为multipart/form-data,构造的表单提交,并非单纯的提交了key-value对,从提交数据中可以看出,提交了“2.jpg”文件的具体内容。这部分有单独的content-type,这里为“image/jpeg”,但是最终决定在服务器上生成的文件类型,并不是由这里的content-type决定的,所以会出现利用解析漏洞产生的上传攻击。

解析漏洞

网站允许用户上传文件到服务器一般是有限制的,若不限制上传内容,则非常容易被上传木马,从而被攻击者控制服务器,这些限制一般为只允许上传期望的文件类型,比如只允许上传图片,作为头像等,这时攻击者的目的从简单的上传木马变为怎样绕过限制上传木马,这里攻击者利用的就是各种各样的web服务器解析漏洞。

当编码格式为multipart/form-data,客户端可以上传文件内容到服务器,也就会出现多种上传攻击,其本质目的都是在服务器上生成一个可解析执行的文件。

接下来让我们介绍7种常见的利用解析漏洞进行上传攻击的方式:

1、对Content-type类型进行检测

例如:当content-type为image/jpeg时(或者其他非可解析执行类型),修改filename=”2.jpg”,为filename=” 2.php”,这样会在服务器上产生一个php文件,发生了上传攻击,服务器侧编码一般类似下图:

对Content-type类型进行检测

2、对图片文件头标识检测

有些情况下,防护设备识别cotent-type为图片的时候会检查上传的图片头部是否是图片的特殊编码,这时候在上传的webshell文件中写入图片的特殊标识就可以进行绕过,但是文件后缀依旧要为可执行文件的后缀,例如.php。

不同的图片文件都有不同文件头,如:

PNG: 文件头标识 (8 bytes) 89 50 4E 47 0D 0A 1A 0A

JPEG: 文件头标识 (2 bytes): 0xff, 0xd8 (SOI) (JPEG 文件标识)

GIF: 文件头标识 (6 bytes) 47 49 46 38 39(37) 61

3、配置文件的修改

用户的配置不可控,可能会出现特殊后缀也被当成可解析执行的文件进行解析,例如在AddHandler、AddType中配置php3当做php进行解析,则上传2.php3也发生上传攻击。这种情况严格说起来,可算作用户配置不当造成的漏洞。

4、大小写变形

针对大小写不敏感的系统(例如windows),后缀改为2.PhP,用于绕过对后缀的限制,服务器侧编码一般类似下图:

大小写变形

5、空字节代码执行漏洞

在图片中嵌入PHP代码然后通过上传木马文件“2.jpg%00.php”,则木马文件会被当成php进行解析。需要注意的是要在关闭magic_quotes_gpc的情况下,服务器侧的编码一般如下图:

6、截断

因为IIS6不解析“;”后面的内容,因此上传木马文件“2.asp;.jpg”,就被解析为asp文件。

7、目录解析

在网站有文件夹的名字为 .asp、.asa 的文件夹,其目录内的任何扩展名的文件都被IIS6当作asp文件来解析并执行。这样如果有个目录为a.asp,那么把木马文件2.jpg上传到该目录下,则会被当成asp文件进行解析。

总结

上传webshell,本质是利用web服务器的解析漏洞、系统特性绕过各种防护措施达到上传可解析执行文件的目的,以上提到的7种上传绕过的情况,针对不同web服务器、系统还可能会有其他上传漏洞的存在,在此就不一一列举。随着Web服务器的不断更新迭代,旧的漏洞被弥补,但是也会产生新的漏洞,现在所言的漏洞,在未来不一定还有效,现在未说的,在未来也不一定不存在。当然,360网站云防护不仅支持防御以上提到的7种上传漏洞,还有更强大的漏洞防护能力等待您来亲自一探究竟~

漏洞永恒,锐意进取保护网络世界的安全一直是我们持之以恒的追求。作为网站安全的守护者,360网站安全云防护团队始终努力奋战在与黑暗势力做斗争的第一线,不断钻研探索最新的攻防技术,力求以更强的防护能力为广大站长提供更加优质的服务。360网站安全云防护,让网站安全、站长安心的不二选择!详情了解:http://wangzhan.360.com/webprotect/index

赞(1)
未经允许不得转载:木木资源博 » 网站安全-聊聊上传漏洞
分享到: 更多 (0)
##分享一个宝妈兼职项目,坚持半年,你也可以每月躺赚10000+#

评论 抢沙发

有人回复时邮件通知我


  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

木木网赚博客 分享网络营销技巧

关于本博博主自留地