01
漏洞原理
文件上传漏洞是指用户上传了一个可执行的脚本文件(php、jsp、xml、cer等文件),而WEB系统没有进行检测或逻辑做的不够安全。文件上传功能本身没有问题,问题在于上传后如何处理及解释文件。一般情况下,Web应用都会允许用户上传一些文件,如头像、附件等信息,如果Web应用没有对用户上传的文件进行有效的检查过滤,那么恶意用户就会上传一句话木马等Webshell,从而达到控制Web网站的目的。存在文件上传功能的地方都有可能存在文件上传漏洞,比如相册、头像上传,视频、照片分享。论坛发帖和邮箱等可以上传附件的地方也是上传漏的高危地带,另外像文件管理器这样的功能也有可能被攻击者所利用。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。
02
漏洞前提条件
-
目标具有文件上传功能
-
上传文件能够被Web服务器解析执行
-
知道文件上传到服务器后的存放路径和文件名,否则无法执行
-
目标文件可被用户访问
03
漏洞产生原因
文件上传漏洞的产原因在于程序员对于用户上传的文件内容控制不足或处理存在缺陷,从而导致的用户可以越过其本身权限向服务器上传可执行的脚本文件。
具体原因:
服务器配置不当。
开源编辑器上传漏洞 。
本地文件上传限制被绕过。
过滤不严格被绕过。
文件解析漏洞导致文件执行。
文件路径截断。
04
文件上传过程
05
目标会做哪些防护?
(一)客户端检测
客户端检测是指依靠浏览器,用JavaScript代码去检测。一般是在网页上写一段JavaScript脚本,用JavaScript去检测,在文件未尾上传时,检验文件的后缀名,检测的方式有白名单和黑名单两种。
如何判断是否是前端验证:
在浏览上传文件时弹出对话框,内容如:只允许上传.jpg/.jpeg/.png后缀名的文件,而此时并没有发送数据包,所以可以通过抓包来判断,如果弹出不准上传,但是没有抓到数据包,那么就是采用了前端验证。
如何绕过前端验证:
1、点检查,然后找到文件检测部分的JS代码,修改允许上传文件类型或者删除检测部分代码。
2、通过禁用JS代码绕过。
3、用burp抓个返回包然后把前端代码里面文件检测的部分代码删掉。
4、根据前端代码允许上传的类型,预先把木马文件后缀改成相应的后缀,通过前端代码的检测以后,会自动往服务器发包,然后通过burp去拦截这个包,把后缀名改回来。
(二)客户端检测
服务端检测是先将文件上传到服务器,然后服务器依靠后端代码去检测上传的文件是否合规。服务器脚本一般会检测文件的MIME类型、扩展名是否合法,甚至可能会去检测文件中是否嵌入恶意代码。
文件类型检测:
此类检测防护主要是从content-type进行检测,检验请求中content-type是否符合可接受的上传类型
文件头类型检测:
上个文件类型是检测content-type,比较好伪造,这个则是使用getimagesize()函数来获取文件的MIME类型,通过文件头进行判断文件类型
文件扩展名检测:
这种类型有基于黑名单检测和白名单检测。通常基于黑名单是很不安全的,黑名单机制:只拦截名单中出现的扩展后缀名,其余默认放行。这就取决于名单中的扩展后缀名覆盖能力范围了,很难把所有的考虑全面,就很容易造成漏洞。
文件内容检测:
比较厉害的防护检测,就是针对内容做检测,这种防护能力比较强,但也不是不能绕过。自始至终,攻防都是在对抗中螺旋演进的。这种检测防护基本都是从webshell具有的代表性敏感字符?或者危险敏感函数。
(三)黑名单、白名单
黑名单检测:
一般有个专门的文件,里面会包含常见的危险脚本文件。
黑名单绕过:
找黑名单扩展名的漏网之鱼
可能存在大小写绕过漏洞
单双重后缀名绕过
服务端 MIME 文件类型(Content-Type)绕过
文件后缀加空格或点绕过后缀名检测
::$DATA绕过
用.htaccess文件绕过
用.user.ini文件绕过
等...
白名单检测:
只允许某某类型的文件上传。
白名单绕过:
00截断和00截断
文件头内容检测绕过
配合web容器的解析漏洞
利用条件竞争绕过白名单
配合文件包含绕过
等...
那么如何判断目标是黑名单还是白名单:
上传一个不存在的后缀的文件,所以如果能上传成功,说明目标是黑名单检测,如果上传失败,则目标是白名单检测。
06
修复建议
-
文件大小的合理限制
-
白名单检查文件扩展名
-
确保文件名不包含任何可能被解释为目录或遍历序列 ( ../) 的子字符串
-
重命名上传的文件以避免可能导致现有文件被覆盖的冲突
-
隐藏上传文件路径
-
病毒扫描
-
上传文件的存储目录禁用执行权限
-
单独设置文件服务器
-
确保服务器环境安全
07
小结
文件上传的文件可以是木马、病毒、webshell等。这种攻击方式是最为直接和有效的,“文件上传”本身没有问题,有问题的是文件上传后,服务器如何处理和解释文件。如果处理逻辑不够安全,则可能导致严重的后果。
- End -
原文始发于微信公众号(希石安全团队):【漏洞浅谈】任意文件上传详解
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论