山东大学软件学院项目实训-创新实训-山大软院网络攻防靶场实验平台(十一)


前言:

在完成前面的几个漏洞环境的代码编写搭建的基础上,接下来准备构造实现一个文件上传漏洞的靶场环境。本篇博客记录一下关于文件上传漏洞的基础知识,以及基本的漏洞出现点、利用方式、以及如何防护等,在此基础上思考如何构造一个文件上传漏洞靶场。


1、文件上传漏洞简介

1.1、简介

文件上传漏洞是 web 安全中经常用到的一种漏洞形式。是对数据与代码分离原则的一种攻击。上传漏洞顾名思义,就是攻击者上传了一个可执行文件如木马,病毒,恶意脚本,WebShell 等到服务器执行,并最终获得网站控制权限的高危漏洞。
在这里插入图片描述

原理:

大部分的网站和应用系统都有上传功能,而程序员在开发任意文件上传功能时,并未考虑文件格式后缀的合法性校验或者是否只在前端通过 js 进行后缀检验(很容易绕过)。这时攻击者可以上传一个与网站脚本语言相对应的恶意代码动态脚本,例如(jsp、asp、php、aspx 文件后缀)到服务器上,从而访问这些恶意脚本中包含的恶意代码,进行动态解析最终达到执行恶意代码的效果,进一步影响服务器安全。


导致文件上传漏洞的原因较多,主要包括以下几类:

  1. 未过滤或Web前端过滤被绕过

  2. *文件内容检测被绕过

  3. *中间件解析

  4. 不完善的黑名单扩展名

  5. *文件路径截断

  6. HTTP不安全方法(PUT协议)

加星号是比较重要的

文件名后缀就一个%00字节,可以截断某些函数对文件名的判断。在许多语言函数中,处理字符串的函数中0x00被认为是终止符



1.2、危害

文件上传漏洞与 SQL 注入或 XSS 相比 , 其风险更大 , 如果 Web 应用程序存在上传漏洞 , 攻击者上传的文件是 Web 脚本语言,服务器的 Web 容器解释并执行了用户上传的脚本,导致代码执行。如果上传的文件是 Flash 的策略文件 crossdomain.xml,黑客用以控制 Flash 在该域下的行为。如果上传的文件是病毒、木马文件,黑客用以诱骗用户或者管理员下载执行。如果上传的文件是钓鱼图片或为包含了脚本的图片,在某些版本的浏览器中会被作为脚本执行,被用于钓鱼和欺诈。甚至攻击者可以直接上传一个 webshell 到服务器上 完全控制系统或致使系统瘫痪。

文件上传漏洞一般是配合解析漏洞一起利用。



1.3、利用

漏洞利用就是首先找到一个文件上传点,然后根据服务器能解析执行的文件类型,上传对应的文件木马,可以是图片马或者其他一句话马等等。

如果没有任何防护的网站,文件上传漏洞的利用是比较简单的,但是现在大部分网站的安全防范意识较高,可能会有相应的防御过滤,但是也有很多的绕过方法。

一般来说文件上传过程中检测部分由客户端javascript检测、服务端Content-Type类型检测、服务端path参数检测、服务端文件扩展名检测、服务端内容检测组成。但这些检测并不完善,且都有绕过方法。

  • 客户端检测绕过(js检测):

    利用 firebug 禁用 js 或使用 burp 代理工具可轻易突破。

  • 服务端MIME检测绕过(Content-Type检测):

    使用burp代理,修改Content-Type的参数

  • 服务端扩展名检测绕过:

    1. 文件名大小写绕过,例如Php,AsP等类似的文件名

    2. 后缀名字双写嵌套,例如pphphp,asaspp等

    3. 可以利用系统会对一些特殊文件名做默认修改的系统特性绕过

    4. 可以利用asp程序中的漏洞,使用截断字符绕过

    5. 可以利用不再黑名单列表中却能够成功执行的同义后缀名绕过黑名单的限制

    6. 可以利用解析/包含漏洞配合上传一个代码注入过的白名单文件绕过

  • 服务端内容检测绕过:

    通过在文件中添加正常文件的标识或其他关键字符绕过

  • 文件加载检测绕过,针对渲染加载测试

  • 代码注入绕过,针对二次渲染测试



1.4、防范

  • 系统运行时的防御:

    1. 文件上传的目录设置为不可执行。只要web容器无法解析该目录下面的文件,即使攻击者上传了脚本文件,服务器本身也不会受到影响,因此这一点至关重要。

    2. 判断文件类型。在判断文件类型时,可以结合使用 MIME Type、后缀检查等方式。在文件类型检查中,强烈推荐白名单方式,黑名单的方式已经无数次被证明是不可靠的。此外,对于图片的处理,可以使用压缩函数或者resize函数,在处理图片的同时破坏图片中可能包含的HTML代码。

    3. 使用随机数改写文件名和文件路径。文件上传如果要执行代码,则需要用户能够访问到这个文件。在某些环境中,用户能上传,但不能访问。如果应用了随机数改写了文件名和路径,将极大地增加攻击的成本。再来就是像shell.php.rar.rar和crossdomain.xml这种文件,都将因为重命名而无法攻击。

    4. 单独设置文件服务器的域名。由于浏览器同源策略的关系,一系列客户端攻击将失效,比如上传crossdomain.xml、上传包含Javascript的XSS利用等问题将得到解决。

    5. 使用安全设备防御。文件上传攻击的本质就是将恶意文件或者脚本上传到服务器,专业的安全设备防御此类漏洞主要是通过对漏洞的上传利用行为和恶意文件的上传过程进行检测。恶意文件千变万化,隐藏手法也不断推陈出新,对普通的系统管理员来说可以通过部署安全设备来帮助防御。

  • 系统开发阶段的防御

    1. 系统开发人员应有较强的安全意识,尤其是采用PHP语言开发系统。在系统开发阶段应充分考虑系统的安全性。

    2. 对文件上传漏洞来说,最好能在客户端和服务器端对用户上传的文件名和文件路径等项目分别进行严格的检查。客户端的检查虽然对技术较好的攻击者来说可以借助工具绕过,但是这也可以阻挡一些基本的试探。服务器端的检查最好使用白名单过滤的方法,这样能防止大小写等方式的绕过,同时还需对%00截断符进行检测,对HTTP包头的content-type也和上传文件的大小也需要进行检查。

  • 系统维护阶段的防御

    1. 系统上线后运维人员应有较强的安全意识,积极使用多个安全检测工具对系统进行安全扫描,及时发现潜在漏洞并修复。

    2. 定时查看系统日志,web服务器日志以发现入侵痕迹。定时关注系统所使用到的第三方插件的更新情况,如有新版本发布建议及时更新,如果第三方插件被爆有安全漏洞更应立即进行修补。

    3. 对于整个网站都是使用的开源代码或者使用网上的框架搭建的网站来说,尤其要注意漏洞的自查和软件版本及补丁的更新,上传功能非必选可以直接删除。除对系统自生的维护外,服务器应进行合理配置,非必选一般的目录都应去掉执行权限,上传目录可配置为只读。



下一篇博客记录文件上传漏洞靶场的实现过程与重点代码部分。

猜你喜欢

转载自blog.csdn.net/m0_47470899/article/details/124099940