一、什么是文件上传漏洞?
文件上传是WEB开发中的一个基本功能,是指将本地的文档、视频、音频、图片等文件上传到服务器,以便自己或其他用户下载或浏览的过程。比如上传功能用在论坛,微信好友,微博等等。
文件上传漏洞是指在WEB应用中,程序员利用客户端上传功能进行控制、检测和处理的不足。通过上传特定的可执行文件(如木马、WEBshell、病毒、恶意脚本等。)到web服务器,程序员可以获取关键数据来操纵主机。
文件上传漏洞的危害
在实现文件上传功能的过程中,如果WEB应用开发者没有严格检查文件格式和后缀,WEB中就存在文件上传漏洞。攻击者可能直接上传病毒、木马、钓鱼图片、包含脚本的图片、恶意脚本文件、WebShell等。利用这个漏洞。通过访问这些恶意脚本中的恶意代码,最终可能导致用户信息被泄露、被钓鱼、被欺骗。甚至攻击者可以直接将WebShell上传到服务器,然后获取想要的信息和权限,最终实现数据库执行、服务器文件管理、服务器命令执行等恶意操作,甚至完全控制服务器系统,在服务器系统中为所欲为。
二、文件上传漏洞检测技术分析
目前,针对文件上传漏洞的WEB开发和服务,管理者也加入了文件上传检测机制,包括客户端脚本检测、服务器文件扩展名检测、服务器内容检测、服务器内容类型检测、服务器路径参数检测等。
1.客户端脚本检测
这种检测通常会在上传页面中添加特定的代码来检测上传文件的扩展名。通过判断扩展名是否合法,客户端可以检测和控制上传文件的安全性。但对于这种检测方式,专业攻击者可以通过将需要上传的恶意代码文件类型改为允许上传的类型,轻松规避文件上传的检测。例如,将hack.php更改为hack.jpg进行上传,配置BurpSuite代理来捕获数据包,然后将文件名hack.jpg更改为hack.php。
2.服务器端文件扩展名检测
在服务器端检测文件扩展名就是设置一个黑名单或者白名单[6,7],即黑名单禁止上传特定扩展名的文件,而白名单只允许上传指定扩展名的文件。服务器端检测包括内容类型检测、黑名单检测、白名单检测等。
内容类型检测是在用户提交时验证上传的文件是否是所需的文件类型。允许的就允许,不允许的就禁止。通过抓取数据包来修改Http开头的Content-Type,可以很容易地绕过这种检测方法。
服务器的黑名单检测往往会将常见的危险文件的扩展名放在一个文件中(如execombatdlljsvbphphtmla***spcer等。).当客户端上传文件时,它会过滤上传文件的扩展名。如果上传文件的扩展名在黑名单中,则不允许上传。这种检测方式在防止危险文件上传方面看似有效,但限制不够全面(比如IIS默认支持解析aspcdxasacer等文件类型)。攻击者通常也可以使用扩展的情况(如上传。Php)、特殊文件名(如"。exe空 case”),并列表绕过(如上传扩展名不在黑名单中的文件)完成攻击。
白名单检测是在服务器端指定上传文件的扩展名。如果上传文件的扩展名在规定范围内,则允许上传,否则禁止上传。显然,白名单检测比黑名单过滤更安全。在白名单检测中,攻击者可以使用%00、0x00、0x0a等截断。绕过白名单检测(例如,上传photo.php、BurpSuite抓取数据包、将文件名更改为photo.php%00.jpg、选择%00和urldecode),或者使用双写扩展绕过白名单检测(例如photo.php.jpg)。
3.服务器端文件内容检测
服务器端文件内容检测是指服务器接收到用户上传的文件时,通过检测文件功能、文件相关信息、文件渲染等来验证文件的合法性。如果合法,允许上传,否则禁止上传[8,9]。对于文件内容检测,攻击者可以通过制作图片马来绕过它(copy1.jpg/b+2.php/a3.jpg或者burp?suit改变了包,或者生成了图片马,或者直接使用了别人制作的图片马)。
4.服务器解析漏洞
(1)IIS解析漏洞
IIS7.0之后,修复了之前版本的漏洞。但是,在IIS7.0之后,Fast-CGI状态在服务中打开,当服务器解析URL地址时,它会将xxx.jpg/xxx.php解析为PHP文件。这也将允许攻击者绕过服务器的检测。同时,在Windows操作系统中,文件名不能以空开头,也不能以“.”结尾。当文件以空或“.”开头或结尾时,即空和“.”开头和结尾会自动删除。使用该功能还可能导致“文件解析漏洞”。
(2)Apache解析漏洞
Apache文件解析的规则是从右向左判断解析。如果有无法识别的文件后缀,Apache解析会再次判断向左。比如:hack.php.cde.abc,后缀”。cde“和”。abc”在解析时不被apache识别,apache在解析时会把hack.php.cde.abc解析成hack.php。
Apache解析漏洞(CVE-2017-15715)。Apache 2 . 4 . 0到2.4.29版配置文件中的php解析表达式存在换行漏洞,可以匹配字符串的结尾。攻击者可以利用”% 0A & # 8221绕过上传黑名单上传文件。
(3)nginx解析漏洞
Nginx8.03以下版本也存在与IIS7相同的漏洞。默认情况下,nginx支持通过CGI进行PHP解析。当服务器解析URL地址时,它会将xxx.jpg/xxx.php解析成一个PHP文件。另一种方法是上传一个名为hello.jpg的文件,内容为:
三、文件上传漏洞防御策略
针对以上可能存在的文件上传漏洞,应从WEB应用开发、WEB容器、服务平台配置管理、WEB服务器运维、网络安全设备运维等方面构建立体化的文件上传漏洞防御体系,如图1所示。
1.WEB应用程序开发阶段防御
在WEB应用开发过程中,虽然客户端上传文件的JS检测很容易被专业攻击者突破,但对于一般攻击者来说,仍然可以起到一定的基础探查防御作用。在服务器端,可以使用MIMEType、后缀检查等方法检查文件类型。在查的过程中,强烈建议使用白名单进行过滤,黑名单已经被无数次证明不靠谱。同时,检查%00截断字符、HTTP头的内容类型和上传文件的大小。
另外,对于图像处理,可以使用resize函数或者压缩函数对图像进行预处理,在处理图像的过程中销毁图像中可能包含的恶意代码。当服务器收到文件时,它会用随机数覆盖文件名和文件路径。攻击者要么执行上传文件中的代码。首先,他必须拿到文件。通过使用随机数改变上传的文件名和路径,攻击者找不到上传的文件,无法攻击。
2.WEB服务器端防御
WEB服务器上上传文件的目录应该设置为不可执行。通过在WEB容器上设置不可执行权限,即使攻击者恶意上传脚本文件,也因为无法解析执行而无法发起攻击。在WEB服务器端为文件服务器单独设置域名。由于浏览器的同源策略,一系列的客户端攻击都会失败,比如上传crossdo***in.xml,上传包含Javascript的XSS利用等等。在服务器端添加一个安全设备WAF。WAF是一款专门的WEB应用安全设备,可以对WEB应用客户端的各种请求内容进行检测和验证,确保其安全性和合法性,实时拦截非法请求,通过检测漏洞的上传和利用以及恶意文件的上传过程,达到有效防御的目的。
3.WEB运维人员防御
随着技术的不断进步,隐藏的攻击手段不断推出,恶意文件也在不断变化。WEB服务运行后,网站的运维人员变得尤为重要。运维人员要有很强的安全意识。在正常的运维过程中,他们经常使用安全检测工具对WEB系统进行扫描,发现潜在的漏洞并及时修复。定期检查系统日志,通过检查WEB服务器日志,找到入侵痕迹。
定期关注WEB系统使用的第三方插件的更新,如有新版本发布,建议及时更新。如果第三方插件存在安全漏洞,应立即修复。定期关注WEB服务平台的版本和补丁的更新,尤其是漏洞修复的补丁,要尽快更新和修复。
文件上传漏洞的危害性无需赘述。对于攻击者而言,文件上传漏洞一直是攻击WEB甚至服务器的重要手段。随着技术的不断更新,WEB开发人员和WEB运维人员只有不断学习和透彻理解漏洞相关知识,才能更加从容地应对此类攻击。
本文来自少年我念你投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/479103.html