文件上传漏洞笔记
个人总结
参考:https://portswigger.net/web-security/file-upload
- name: 个人总结
desc: 参考:https://portswigger.net/web-security/file-upload
bgColor: '#F0DFB1'
textColor: 'green'
1
2
3
4
2
3
4
# 文件上传漏洞笔记
# 1文件上传漏洞基本知识
# 1、什么是文件上传漏洞?
答案
文件上传漏洞是指 Web 服务器允许用户将文件上传到其文件系统,但没有充分验证其名称、类型、内容或大小等属性。如果没有对这些文件属性进行适当的限制,则可能意味着,即使是基本的图像上传功能,也可以被用于上传 任意具有潜在危险性 的文件。这甚至可能包括 支持远程代码执行 的服务器端脚本文件。
在某些情况下,上传文件的行为本身就足以造成损害。而对于其他某些攻击,则可能涉及对文件的后续 HTTP 请求,通常是为了触发服务器对其的执行。
(前者,如果上传一个文件之后,网站崩了,那么 “上传文件” 本身就足以造成危害。后者,如果上传一个 webshell ,则攻击者必需通过后续请求与该 webshell 进行交互,让服务器执行其中的代码,才能造成危害性)
# 2、影响文件上传漏洞危害的两个关键因素?
答案
文件上传漏洞的影响,通常取决于两个关键因素:
- 文件的哪些方面没有被网站正确验证,无论是其大小、类型、内容等。
- 成功上传文件后,文件会受到哪些限制。
# 3、文件上传漏洞会造成什么影响?
答案
- 在最坏的情况下,文件的类型没有被正确验证,并且服务器配置了 允许某些类型的文件(如
.php
和.jsp
)被作为代码执行。在这种情况下,攻击者可能会上传一个充当 web shell 的服务器端代码文件,从而有效的获得对服务器的完全控制权。 - 如果文件名未被正确验证,攻击者可以上传同名文件来覆盖关键文件。同时,如果服务器也容易受到目录遍历的攻击,则攻击者甚至能够将文件上传到意外的位置。
- 如果无法确保文件大小在预期阈值的范围内,还可能引发某种形式的拒绝服务(DoS)攻击,攻击者可能会填满可用的磁盘空间。
# 4、文件上传漏洞是如何产生的?
答案
- (未做限制)网站没有对 “用户允许上传哪些文件” 做任何限制。
- (可被绕过)更常见的是,开发人员认为他们实现的验证功能是安全的,但这些验证要么存在固有缺陷,要么很容易绕过。
- 尝试将危险的 文件类型 列入黑名单,但忽略了某些危险的模糊文件类型。(例如
.php
、.php3
、.php4
) - 尝试验证文件头 或 其它文件属性来检查文件类型,但攻击者可以自行添加这些合法属性。
- 尝试将危险的 文件类型 列入黑名单,但忽略了某些危险的模糊文件类型。(例如
- 即使是强大的验证措施,也可能在构成网站的主机和目录网络中,由于应用不一致而出现差异,导致这些差异可以被利用。
# 5、Web服务器如何处理对静态文件的请求?
# 2文件上传漏洞
# 1、利用文件上传漏洞
答案
# 3如何防范文件上传漏洞
# 1、防范措施
答案
- 使用 允许扩展名 的白名单
- 确保文件名不会出现
../
等路径遍历序列。 - 对用户上传的文件进行重命名。
- 在文件经过完全验证之前,不要将文件上传到服务器的永久文件系统中。
- 尽可能使用一个安全的框架来处理文件上传,而不是尝试编写自己的验证机制。
# 2、安全的文件上传流程
答案
- 白名单验证扩展名
- 检查文件名称中的不允许字符(例如路径遍历序列、空字符等)
- 将文件移动到临时目录,进行病毒查杀
- 通过以上验证后,对文件重命名,并移动到永久存储系统中
- 不管是临时目录,还是最终的存储目录,都应该禁止后端脚本的执行权限
编辑 (opens new window)