2022-03-29 22:32:02
文件上传漏洞是Web应用中常见的安全风险,攻击者可通过绕过前端或服务器端的限制上传恶意文件,进而控制服务器。以下是针对前端JS绕过和MIME类型绕过的详细解答:
一、前端JS绕过前端JS验证通常通过检查文件扩展名或类型实现,但仅在客户端生效,可通过以下方法绕过:
方法一:禁用浏览器JS步骤:
在浏览器设置中禁用JavaScript(如Chrome的设置 > 隐私和安全 > 网站设置 > JavaScript)。
刷新页面后直接上传.php等被禁止的文件,此时前端验证失效。
示例:

步骤:
上传一个允许的文件(如.jpg),拦截请求包。
修改请求中的文件名或扩展名(如将shell.jpg改为shell.php)。
转发请求,服务器可能因未校验后端而接收恶意文件。
关键点:
需确保服务器未对文件内容或后端MIME类型做校验。
示例操作:

服务器通过检查HTTP请求头中的Content-Type或文件扩展名限制上传类型,可通过以下方式绕过:
方法一:修改Content-Type步骤:
上传.php文件时,拦截请求包。
将Content-Type: application/octet-stream(默认二进制流)改为允许的类型(如image/jpeg或image/png)。
转发请求,服务器可能误判为图片文件。
示例:

步骤:
将文件命名为shell.php.jpg(本地显示为图片)。
上传时拦截请求,修改扩展名为.php。
若服务器仅检查初始扩展名,文件可能被当作PHP执行。
注意:
需服务器对扩展名解析存在漏洞(如Apache的mod_php配置)。
示例操作:

前端仅作用户体验优化,后端必须校验文件内容(如getimagesize()检测图片头)。
使用白名单(如仅允许.jpg, .png),避免黑名单(易被绕过)。
上传后随机生成文件名,避免执行恶意代码。
对比文件实际类型与Content-Type头(如PHP的finfo_file()函数)。
通过理解漏洞原理和防御措施,可有效降低文件上传风险。