Web安全之上传漏洞

上传漏洞

在这里插入图片描述

上传漏洞介绍

在现代互联网的web应用程序中,上传文件是一种常见的功能,因为它有助于提高业务效率,比如企业的OA系统,允许用户上传图片、视频、头像和许多其他类型的文件。然而向用户提供的功能越多,web应用受到攻击的风险就越大,如果web应用存在文件上传漏洞,那么恶意用户就可以利用文件上传漏洞将可执行脚本程序上传到服务器中,获取网站的权限,或者进一步危害服务器。

  • 为什么文件上传存在漏洞

上传文件时,如果服务器代码未对客户端上传的文件进行严格的验证和过滤,就容易造成可以上传任意文件的情况,包括上传脚本文件(asp、aspx、php、jsp等格式的文件)。

  • 危害

非法用户可以利用上传的恶意脚本文件控制整个网站,甚至控制服务器。这个恶意的脚本文件,又称之为webshell,也可将webshell脚本称为一种网页后门,webshell脚本具有强大的功能,比如查看服务器目录,服务器中的文件,执行系统命令等。

上传漏洞案列

1.js检测绕过攻击

JS检测绕过上传漏洞常见于用户选择文件上传的场景,如果上传文件的后缀不被允许,则会弹框告知,此时上传文件的数据包并没有发送到服务器端,只是在客户端。览器使用JavaScript对数据包进行检测。

这时有两种方法可以绕过客户端JavaScript的检测:

  • 使用浏览器的插件,删除检测文件后缀的JS代码,然后上传文件即可绕过。

  • 把需要上传文件的后缀改称允许上传的,如JPG,PNG等,绕过JS的检测,再抓包,把后缀名改成可执行文件的后缀即可上传成功。

2.文件后缀绕过攻击

文件后缀绕过攻击是服务器代码中限制了某些后缀的文件不允许上传,但是有些apache是允许其他文件后缀的,例如在http.conf中,如果配置有如下代码,则能够解析php和phtml文件AddType application/x-httpd-php .php .phtml。

所以可以上传一个后缀为phtml的webshell如 abc.php.phtml。

在apache的解析顺序中,是从右到左开始解析文件后缀的,如果最右侧的扩展名不识别,就继续往左判断,直到遇到可以解析的文件为止,所以如果上传的文件名类似abc.php.xxx,因为后缀xxx不可以解析,所以向左解析后缀php。

服务端处理上传文件的代码如下所示。通过函数pathinfo()获取文件后缀,将后缀,将后缀转换为小写之后,判断是不是“php”,如果上传文件的后缀是php,则不允许上传,所以此处可以通过利用apache解析顺序或上传phtml等后缀的文件绕过该代码限制。

3.文件类型绕过攻击

在客户端上传文件时,通过burp suite抓取数据包,当上传一个php格式的文件时,可以看到数据包中的Content-Type的值是application/octet-stream,而上传jpg格式的文件时,数据包中的content-Type的值是image/jpeg。

如果服务器端代码是通过content-type的值来判断文件的类型,那么就存在被绕过的可能,因为content-type的值是通过客户端传递的,是可以任意修改的。所以当上传一个php文件时,在burpsuite中将content-type修改为image/jpeg,就可以绕过服务端的检测。

4.文件截断绕过攻击

截断类型:PHP%00截断

截断原理:由于00代表结束符,所以会把00后面的所有字符删除。

截断条件:PHP版本小于5.3.4,PHP的magic_quotes_gpc为OFF状态。

在上传文件时,服务端将GET参数jieduan的内容作为上传后文件名的第一部分,然后将按照时间生成的图片文件名作为上传后文件名的第二部分。

修改参数jieduan为1.php%00.jpg,文件被保存到服务器时,%00会把”.jpg”和按时间生成的图片文件名全部截断,那么文件名就剩下1.php,因此成功上传了webshell脚本。

文件上传漏洞修复建议

针对文件上传的修复,建议:

  • 1.通过白名单的方式判断文件后缀是否合法,对文件格式限制,只允许某些格式上传。

  • 2.对上传后的文件进行重名名,例如rand(10,99).date(“YmdHis”).”.jpg”。

  • 3.对文件格式进行校验,前端跟服务器都要进行校验(前端校验扩展名,服务器校验扩展名、Content_Type等)。

  • 3.对文件格式进行校验,前端跟服务器都要进行校验(前端校验扩展名,服务器校验扩展名、Content_Type等)。

  • 4.将上传目录防止到项目工程目录之外,当做静态资源文件路径,并且对文件的权限进行设定,禁止文件下的执行权限。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值