欢迎光临
我们一直在努力

Web安全-文件上传&文件包含

前言

在Web安全领域,文件上传漏洞与文件包含漏洞堪称两大“高危”漏洞,它们往往能直接导致服务器被控制。同时,一份高效的渗透测试离不开前期的信息收集与工具联动。

本文将系统性地整合这三部分知识,从信息收集、子域名挖掘,到文件上传与包含漏洞的深度利用,形成一套完整的攻防实战指南,希望能为你的安全测试工作提供有价值的参考。


第一部分:信息收集与工具联动(“粮草先行”)

信息收集的质量直接决定了后续渗透测试的深度和广度。在实战中,我们通常会组合使用多种工具,构建高效的工作流。

1.1 核心工具及其角色定位
  • OneForAll:子域名收集的“重器”。它是一款功能强大的子域名集成工具,通过调用多源API和爆破字典,能全面收集目标主站的子域名资产。
    • 基本用法:python3 oneforall.py –target example.com run
    • 结果导出:支持csv、json等格式,python3 oneforall.py –target example.com run –fmt csv
  • ENScan_GO:企业公开信息的“挖掘机”。不同于主动扫描,它专注于从爱企查、天眼查等公开渠道,自动化收集目标企业的ICP备案、APP、小程序、微信公众号及股权架构等,是前期踩点的重要工具。
  • Fscan:内网安全的“侦察兵”。一款内网综合扫描工具,用于在获得授权后,快速探测内网存活主机、开放端口(如22, 445, 3306)、弱口令以及高危漏洞(如“永恒之蓝”)。
  • Dirsearch:Web目录的“翻找者”。基于字典的Web路径暴力枚举工具,常用于发现网站的后台、备份文件、未授权访问的API接口等隐藏路径。
  • Goby 与 Xray:漏洞扫描的“黄金搭档”。Goby擅长资产管理和漏洞验证,Xray则专注于Web漏洞的深度扫描。两者可通过插件实现联动,实现从资产发现到漏洞扫描的无缝衔接。
1.2 构建自动化工作流

典型的渗透测试流程可以这样串联工具:

  • 资产收集:使用OneForAll收集子域名,用ENScan_GO梳理企业股权结构。
  • 存活探测:利用httpx等工具,从子域名列表中筛选出存活的Web服务。
  • 指纹识别:通过EHole等工具识别目标使用的CMS、中间件等信息。
  • 漏洞扫描:
      • 方式一(文件导入):将OneForAll的结果导出为CSV,然后导入到Goby或Xray中进行扫描。Xray支持–target-file参数直接加载目标列表。
      • 方式二(高效联动):在Goby中安装Xray插件,配置好路径后,可直接在Goby界面对选中的资产一键启动Xray扫描。

    第二部分:文件上传漏洞全解(“突破口”)

    文件上传漏洞的本质是对用户输入的文件缺乏足够的过滤与限制,导致攻击者能上传并执行恶意脚本。

    2.1 核心原理与防御绕过

    核心思路:层层突破目标在前端到后端设下的验证关卡。

    验证层面

    验证方式

    绕过技巧

    前端JS验证

    客户端检查后缀或类型

    禁用浏览器JS、直接使用Burp抓包改包。

    MIME验证

    检查Content-Type头

    抓包修改Content-Type为image/jpeg等白名单值。

    文件头验证

    检查文件幻数(Magic Number)

    制作图片马,在脚本前添加GIF89a等合法文件头。

    后缀黑名单

    禁止.php、.asp等后缀

    利用解析特性(.php5, .phtml)、大小写(.PhP)、双写(.pphphp)绕过;或上传.htaccess重写解析规则。

    后缀白名单

    仅允许.jpg、.png等

    寻找文件包含漏洞配合图片马执行;利用中间件解析漏洞(如IIS 6.0的test.asp;.jpg)。

    内容校验

    二次渲染、严格图像校验

    对比渲染前后差异,在未改变区域插入代码;或利用条件竞争,在上传和删除间隙访问文件。

    WAF/IPS

    基于规则的流量检测

    使用编码、分块传输、混淆等方式绕过。

    2.2 服务器解析漏洞(“四两拨千斤”)

    中间件

    解析漏洞/特性

    利用方式

    Apache

    多后缀解析、.htaccess配置

    上传shell.php.jpg;或上传.htaccess文件,将.png解析为PHP。

    Nginx

    路径解析漏洞(配置不当)

    上传图片马,访问/upload/xxx.jpg/任意.php。

    IIS 6.0

    目录解析、文件解析

    创建test.asp目录,其下所有文件被解析为ASP;上传test.asp;.jpg。

    Tomcat

    某些版本JSP解析特性

    上传JSP马到/upload/test.jsp/目录下。

    2.3 高级利用场景
    • JS接口隐藏上传:通过分析前端JS代码(搜索new FormData、upload等),发现隐藏的上传API接口。
    • 第三方编辑器漏洞:如UEditor、CKEditor、KindEditor等历史版本的已知漏洞,常存在未授权或过滤不严的上传点。
    • OSS对象存储绕过:即使存储桶不支持脚本执行,也可能因配置不当(如公共读写)导致可上传钓鱼HTML文件或进行资源劫持。

    第三部分:文件包含漏洞深度利用(“升华之路”)

    当文件上传漏洞遇到文件包含漏洞,攻击面将发生质的飞跃。文件包含漏洞的核心是应用程序动态包含文件时,用户可控了包含路径。

    3.1 两种类型
    • 本地文件包含:包含服务器本地的文件,如/etc/passwd。
    • 远程文件包含:包含远程服务器上的恶意文件,前提是PHP配置了allow_url_include=On。
    3.2 挖掘思路
    • 白盒审计:在代码中搜索include、require、file_get_contents等函数,并追踪其参数是否用户可控。
    • 黑盒测试:在URL参数中寻找?file=、?page=、?path=、?lang=等特征点进行模糊测试。
    3.3 利用技巧与实战手法
    • 读取敏感文件:利用file://协议或../../../../etc/passwd进行目录遍历。
    • 读取源码:使用php://filter/read=convert.base64-encode/resource=index.php获取文件Base64编码内容。
    • 直接执行代码:
      • data://协议:?file=data://text/plain,<?php phpinfo();?>
      • php://input协议:在POST请求体中直接提交PHP代码。
    • 日志包含:修改User-Agent为<?php system('id');?>,然后包含Web服务器日志文件(如/var/log/nginx/access.log)来执行代码。
    • Session包含:利用PHP_SESSION_UPLOAD_PROGRESS在上传过程中创建恶意Session文件,并通过条件竞争包含它。
    • 与文件上传联动:上传一个图片马,然后通过LFI去包含它,从而触发恶意代码执行。
    3.4 实战案例复盘:kkFileView任意文件读取

    知名开源项目kkFileView曾存在路径遍历漏洞,通过urlPath参数即可实现任意文件读取。
    漏洞利用数据包示例:

    GET /getCorsFile?urlPath=file:///etc/passwd HTTP/1.1
    Host: target.com

    此案例说明,对于文件预览、转换等功能,需格外注意其处理的url、path等参数。


    第四部分:实战指南与自查清单

    4.1 文件上传漏洞测试清单
    • 梳理所有上传点(头像、文章、附件、导入、编辑器等)。
    • 测试普通文件与脚本文件的上传,观察拦截情况。
    • 依次尝试前端绕过、MIME绕过、文件头绕过、后缀变形。
    • 探测服务器中间件版本,测试解析漏洞。
    • 分析JS代码,寻找隐藏上传接口。
    • 识别第三方编辑器及其版本,搜索历史漏洞。
    • 尝试条件竞争上传。
    • 上传.htaccess或web.config,尝试重写解析规则。
    4.2 文件包含漏洞测试清单
    • 搜集所有包含文件操作的参数(file, path, page等)。
    • 尝试读取敏感文件(/etc/passwd, .env, config.php)。
    • 测试php://filter、data://等伪协议。
    • 尝试包含Web日志或Session文件。
    • 若存在上传点,尝试包含上传的图片马。
    • 检查返回的报错信息,获取路径线索。

    第五部分:安全加固建议(“知其攻,更要知其守”)

  • 严格白名单:对上传文件类型、文件包含的路径均采用白名单策略。
  • 重命名文件:上传文件使用随机字符串重命名,阻断用户对文件名的控制。
  • 限制执行权限:确保上传目录无脚本执行权限(如设置php_flag engine off)。
  • 内容深度检测:对图片进行二次渲染,清除恶意代码。
  • 安全配置:关闭PHP危险配置(如allow_url_include),禁用不安全的协议(如php://filter、data://)在生产环境的使用。
  • 及时更新:升级第三方编辑器、框架及中间件至最新安全版本。
  • 结语

    渗透测试是一门高度依赖上下文环境的实践科学。本文整合了从信息收集、工具联动,到文件上传与文件包含漏洞深度利用的全链路知识。希望这份指南能帮助你构建更清晰、更系统的渗透测试思维,在实战中游刃有余。

    赞(0)
    未经允许不得转载:171主机测评 » Web安全-文件上传&文件包含
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址