文件上传漏洞

概括

文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。这种漏洞通常发生在Web应用中,攻击者利用应用中的文件上传功能,上传恶意文件(如病毒、木马、WebShell等),进而控制服务器或执行恶意操作。

攻击原理

文件上传漏洞通常指的是Web应用程序在允许用户上传文件时,没有对用户上传的文件进行严格的验证和过滤,导致攻击者能够上传恶意文件,并利用这些文件对系统造成危害。

具体来说,当Web应用程序没有对上传文件的类型、大小、内容等进行有效的限制和检查,或者存在某些逻辑上的缺陷时,攻击者就可以构造恶意文件,如包含恶意代码的图片、脚本文件等,并通过文件上传功能将其上传到服务器上。一旦恶意文件被成功上传,攻击者就可以利用这些文件执行任意代码、获取敏感信息、进行拒绝服务攻击等,从而对系统造成严重的安全威胁。

攻击流程

文件上传位置

常见于头像处,一些可修改用户资料,系统自动上传资料,其他途径上传。总之,一句话概括就是存在文件上传的地方就可能存在漏洞

靶场复现

DVWA low级别

查看php源码,发现网站没有对上传文件做任何过滤,直接上传一个php一句话马即可。

在这里插入图片描述

上面提示了上传地址,我们可以在url中搜索,能搜索出来,但是发现没有内容,因为上传的是php文件,需要用到一些webshell连接工具。

在这里插入图片描述

这里我使用的是中国菜刀来连接webshell。地址栏中填文件路径,右上角填连接密码,选着php然后确定就好了。

在这里插入图片描述

成功连接,获得网站控制权。

在这里插入图片描述

DVWA 中级别

先查看网站php源码,发现他对文件上传的类型做了限制,只能上传image/jepg 或者image/png的图片,那我们就不能直接上传php文件的一句话木马了。直接建议采用BP抓包,修改限制的类型然后上传。

在这里插入图片描述

用bp抓包

在这里插入图片描述

改包并且放行

在这里插入图片描述

成功上传,剩下步骤如low级别一样

在这里插入图片描述

DVWA high级别

先看php源码,发现对后缀名限制,并且对上传的大小做出限制

在这里插入图片描述

这里直接说思路,考虑用图片码的方式绕过,意思就是说通过把php一句话木马藏入图片中来上传,绕过限制。

将一句话马直接藏入图片中,然后再提交

在这里插入图片描述

提交成功,剩下步骤就不重复演示了。

在这里插入图片描述

绕过思路总结

  1. 修改数据包或禁用JavaScript:通过直接修改上传的数据包或禁用JavaScript,攻击者可以绕过前端的验证机制,将恶意文件上传到服务器。
  2. content-type验证绕过:攻击者可以修改上传文件的content-type头部,使其看起来像是合法的文件类型,从而绕过基于content-type的验证。
  3. 黑名单检测绕过:黑名单检测是一种常见的上传验证方式,但攻击者可以通过混淆文件扩展名、使用特殊的扩展名或大小写变换等方式来绕过黑名单检测。
  4. 白名单检测绕过:虽然白名单检测的安全性更高,但仍存在绕过的方法。攻击者可以尝试截断上传文件的扩展名、利用解析漏洞或构造特殊的文件名来绕过白名单检测。
  5. 对危险扩展名POST检测的绕过:如果应用程序对上传文件的扩展名进行POST检测,攻击者可以通过控制上传路径或利用其他手段来绕过这种检测。
  6. 利用字符替换函数:一些应用程序使用字符替换函数(如str_replace)来处理文件名中的特定字符。攻击者可以构造特定的文件名后缀,如xxx.pphphp,来绕过这种处理。
  7. 文件路径可控的00截断:在某些情况下,如果文件路径可以由攻击者控制,攻击者可以利用00截断(在文件名中插入%00字符)来截断文件名,从而绕过一些验证机制。

如何防范

  1. 验证和过滤上传的文件
    • 类型检查:严格检查上传文件的类型,确保只允许预期的文件类型。推荐使用白名单方式,因为黑名单方式容易被绕过。
    • 内容检查:对于图片文件,可以使用图像处理库来重新生成图片,从而去除可能包含的恶意代码。对于其他类型的文件,也应检查其内容是否包含恶意代码或脚本。
    • 文件头校验:检查上传文件的文件头是否与其扩展名匹配,以防止攻击者通过修改文件扩展名来绕过检查。
  2. 限制文件大小和数量
    • 设置合理的文件大小限制,防止上传过大的文件,这可能会占用过多服务器资源或导致拒绝服务攻击。
    • 限制用户在一定时间内可以上传的文件数量,防止滥用。
  3. 随机化和隔离文件存储
    • 对上传的文件进行随机重命名,以防止攻击者通过猜测文件名来访问恶意文件。
    • 将上传的文件存储在Web根目录之外的地方,并通过专门的脚本或API来访问它们,这样可以防止直接通过URL访问上传的文件。
  4. 使用安全的文件处理库
    • 选择经过广泛测试和验证的、没有已知安全漏洞的文件处理库来处理上传的文件。
  5. 配置安全的服务器环境
    • 设置上传目录为不可执行,防止攻击者上传的恶意脚本被执行。
    • 如果可能,禁用服务器上的某些不必要的解释器或执行环境,以减少潜在的攻击面。
  6. 实施访问控制
    • 验证上传文件的用户身份和权限,确保只有授权用户才能上传文件。
    • 记录并监控所有文件上传活动,以便在出现问题时能够迅速响应。
  • 28
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值