前言

在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的结果导出为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文件。
- 若存在上传点,尝试包含上传的图片马。
- 检查返回的报错信息,获取路径线索。
第五部分:安全加固建议(“知其攻,更要知其守”)
结语
渗透测试是一门高度依赖上下文环境的实践科学。本文整合了从信息收集、工具联动,到文件上传与文件包含漏洞深度利用的全链路知识。希望这份指南能帮助你构建更清晰、更系统的渗透测试思维,在实战中游刃有余。





