Loading ...
文件上传漏洞面试题

1. 文件上传漏洞的原理是什么?

文件上传漏洞是指网站允许用户上传文件时,因未对上传文件的类型、内容、路径等进行严格验证和控制,导致恶意文件(如 Webshell)被成功上传至服务器,且能被服务器解析执行,从而被攻击者利用以获取服务器权限的漏洞。

2. 文件上传漏洞产生的原因是什么?

  • 验证逻辑缺陷:仅依赖前端验证(可被绕过)、仅校验文件扩展名或 MIME 类型(易篡改);

  • 文件处理不当:上传路径可控(攻击者可指定路径)、未对文件重命名(保留恶意文件名);

  • 服务器配置问题:存在文件解析漏洞(如 Apache 的.htaccess 解析、IIS 的目录解析)、上传目录权限过高(可执行);

  • 开发疏忽:未过滤文件内容(如未检测图片马中的恶意代码)、未限制文件大小(导致 DOS 攻击)。

3. 文件上传漏洞的危害有哪些?

  • 攻击者可上传 Webshell,直接获取服务器操作权限(执行命令、读写文件);

  • 窃取服务器敏感数据(数据库信息、用户数据、配置文件);

  • 篡改网站内容(挂马、植入广告、删除页面);

  • 利用服务器作为跳板,进一步渗透内网;

  • 导致服务器被纳入僵尸网络,参与 DDOS 攻击等。

4. 什么是 Webshell?(含介绍)

Webshell 是一种通过 Web 接口控制服务器的恶意脚本,通常体积小、隐蔽性强,可被攻击者用于远程操控服务器。

  • 作用:执行系统命令、读写文件、数据库操作、内网渗透等;

  • 分类:按功能可分为 “一句话木马”(极简,依赖客户端连接)和 “大马”(功能齐全,含管理界面);

  • 特点:通过 HTTP/HTTPS 协议与攻击者交互,无需直接登录服务器,隐蔽性高。

5. 常见的一句话木马有哪些?

  • PHP<?php @eval($_POST['cmd']);?>(通过 POST 参数cmd执行命令)

  • ASP<%eval request("cmd")%>(通过request获取参数执行)

  • ASPX<%@ Page Language="C#" %><%Response.Write(System.Diagnostics.Process.Start(Request["cmd"]).StandardOutput.ReadToEnd());%>

  • JSP<% Runtime.getRuntime().exec(request.getParameter("cmd")); %>

6. PHP 中的 $_FILES 函数详解

$_FILES 是 PHP 的超级全局变量,用于获取客户端上传文件的信息,结构为二维数组(假设表单上传字段名为file):

  • $_FILES['file']['name']:客户端上传的原始文件名(含扩展名);

  • $_FILES['file']['type']:客户端提交的 MIME 类型(如image/jpeg,可被篡改);

  • $_FILES['file']['tmp_name']:文件上传至服务器后的临时存储路径(需通过move_uploaded_file()移动);

  • $_FILES['file']['error']:上传错误代码(0 = 成功,1 = 超 php.ini 大小限制,2 = 超表单大小限制,3 = 文件部分上传,4 = 无文件上传,6 = 临时目录缺失,7 = 写入失败);

  • $_FILES['file']['size']:上传文件的字节大小。

7. 你会如何检测文件上传漏洞?

  1. 信息收集:确定上传点(如表单、API)、查看页面源码获取验证逻辑(前端 JS);

  2. 功能测试:上传合法文件(验证是否正常存储)、上传恶意文件(观察是否被拦截);

  3. 绕过尝试:针对扩展名、MIME、内容的验证逻辑,分别用大小写、特殊后缀、图片马等测试;

  4. 服务器配置检测:测试是否存在解析漏洞(如上传.htaccess配合图片马);

  5. 工具辅助:用 Burp Suite 抓包修改参数(如文件名、Content-Type),用漏洞扫描工具(如 AWVS)辅助检测。

8. 文件上传的绕过方式有哪些?(含姿势)

  • 前端验证绕过:禁用浏览器 JS、删除表单onchange验证事件、修改accept属性允许所有类型;

  • 扩展名绕过

    • 大小写:.Php.Jpg(服务器大小写不敏感时);

    • 特殊后缀:.php5.phtml(若服务器支持 PHP 解析);

    • 双写:.pphphp(过滤php时被替换为php);

    • 空格 / 点:shell.php.shell.php (Windows 下会忽略末尾空格 / 点);

  • MIME 类型绕过:抓包修改Content-Typeimage/jpeg(对应图片)、application/pdf(对应 PDF);

  • 内容验证绕过:制作图片马(保留图片头FFD8FF)、伪造文件头(如在脚本前加GIF89a);

  • 路径绕过:00 截断(shell.php%00.jpg,PHP 需magic_quotes_gpc=Off)、路径穿越(../shell.php);

  • 条件竞争:利用服务器先存储后验证的逻辑,在删除前访问临时文件执行命令。

9. 什么是 00 截断?如何利用它绕过扩展名检测?

  • 00 截断:指 ASCII 码中的0x00字符,在 C 语言等字符串处理中被视为 “结束符”。若服务器用此类语言处理文件名,会忽略0x00后的内容。

  • 利用方式:若服务器限制 “仅允许.jpg”,则构造文件名shell.php%00.jpg(URL 编码为shell.php%20.jpg),服务器解析时会将%00当作结束符,实际保存为shell.php,从而绕过.jpg限制。

  • 注意:需满足服务器环境(如 PHP < 5.3.4,且magic_quotes_gpc=Off)。

10. 文件上传漏洞:如何绕过 “仅允许.jpg 文件” 的限制?

  1. 扩展名绕过:用.JPG(大小写)、shell.jpg.php(若仅校验末尾扩展名,需配合解析漏洞);

  2. 00 截断:上传shell.php%00.jpg,服务器解析为shell.php

  3. MIME 绕过:抓包将Content-Type改为image/jpeg

  4. 内容绕过:制作图片马(含FFD8FF图片头),上传后通过文件包含调用;

  5. 前端绕过:删除表单中限制.jpg的 JS 验证逻辑;

  6. 特殊后缀:若服务器支持,上传shell.jpg.php5(解析为 PHP)。

11. 目标站无防护,上传图片可以正常访问,上传脚本格式访问则 403,如何处理?

  • 推测服务器对脚本文件(如.php)设置了访问限制(如mod_rewrite规则);

  • 解决方案:

    • 上传特殊后缀脚本(如.php5.phtml,若服务器支持解析);

    • 利用解析漏洞:上传.htaccess文件(内容AddType application/x-httpd-php .jpg),使.jpg被解析为 PHP,再上传图片马;

    • 结合文件包含漏洞:上传图片马,通过?file=图片马路径调用执行。

12. 如何制作图片码?

图片码(图片马)是包含恶意脚本的图片文件,制作步骤:

  1. 准备一张正常图片(如1.jpg)和一句话木马(如shell.php,内容<?php @eval($_POST['cmd']);?>);

  2. 在 Windows 命令行执行:copy /b 1.jpg + shell.php webshell.jpg/b表示二进制合并);

  3. 验证:用文本编辑器打开webshell.jpg,尾部可见shell.php内容,且能正常显示为图片;

  4. 用途:上传后通过文件包含或服务器解析漏洞执行脚本。

13. 文件上传漏洞的防护措施有哪些?

  • 验证层面

    • 前端 + 后端双重验证(前端仅作提示,后端严格校验);

    • 校验文件内容(如图片用getimagesize()检查宽高,或校验文件头FFD8FF);

  • 文件处理

    • 重命名文件(用随机字符串 + 时间戳,如a1b2c3.jpg,避免路径可控);

    • 限制文件大小(结合php.ini和业务需求);

  • 服务器配置

    • 上传目录设置为不可执行(如chmod 644);

    • 关闭不必要的解析(如 Apache 禁用.htaccess,IIS 关闭目录解析);

    • 上传文件存储在非 Web 根目录或独立域名;

  • 其他:日志审计(记录上传行为)、使用云存储(如 OSS,避免本地存储风险)。

暂无评论

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇