跳到主要内容

任意文件读取

任意文件读取利用的是文件下载/读取接口对路径参数的校验缺失:攻击者将路径穿越序列(../)注入文件名参数,使服务端读取并返回 Web 目录之外的系统文件。 这类漏洞常被低估,因为看起来只是"读文件",但读到数据库配置文件就等于获得了数据库直连凭据,读到 /etc/shadow 就有了密码哈希,链路延伸极快。

成立前提

应用存在文件下载/读取/预览功能,文件路径由用户参数控制,服务端未对路径做合法性校验(未过滤 ../、未限制根目录),且 web 进程有权限读取目标文件。

利用链路

基础路径穿越:文件名参数直接拼接到服务端文件路径,通过 ../ 逐级向上跳转:

原始请求:GET /download?file=help.pdf
穿越请求:GET /download?file=../../etc/passwd
GET /download?file=../../../WEB-INF/web.xml
GET /download?file=../../../../conf/tomcat-users.xml

每增加一层 ../ 就往上一级目录,直到触达系统根目录,之后路径保持在根目录。

高价值目标文件

文件获取的信息
/etc/passwd系统用户列表、shell 路径
/etc/shadow密码哈希(需 root 权限)
WEB-INF/web.xmlJava 应用路由配置、Servlet 映射、安全约束
WEB-INF/classes/配置文件数据库连接字符串、内网地址
conf/tomcat-users.xmlTomcat 管理员账号密码
../config/database.phpPHP 站点数据库配置
/root/.mysql_history历史 MySQL 命令(含密码)
/proc/net/arp内网 ARP 表,获取内网主机列表

链路延伸:读取数据库配置 → 直连数据库导出数据;读取管理员凭据 → 登录管理后台;读取 SSH 私钥 → 直接登录服务器。

历史样本

通用 CMS 批量影响:同一套 CMS 的下载接口(/download?filepath=/downLoadFile.action?filePath=)未过滤 ../,通过搜索引擎批量定位使用该 CMS 的地方银行、高校、政务站点,一个 PoC 批量验证数百个目标。

Tomcat 配置文件读取:Java Web 应用文件下载接口,读取 ../../conf/tomcat-users.xml 获取 Tomcat Manager 管理员账号,随后登录控制台部署 WAR 包,从文件读取漏洞一步到 getshell。

数据库备份直接下载:后台提供数据库备份功能,但备份后的 .sql 文件落在 Web 可访问路径,/admin/backup.aspx 生成后可直接通过 URL 下载整个数据库。

phpinfo 路径泄露辅助 LFI:任意文件读取接口配合 phpinfo 页面(泄露 PHP 临时文件路径),再通过竞争条件包含上传过程中的临时文件,将文件读取升级为代码执行。

目录遍历漏洞:部分站点不是只能读某一个文件,而是允许浏览整个目录树,攻击者通过列目录找到有价值的文件名后再进行定向读取。

WEB-INF/web.xml 暴露 Java 路由配置:Java Web 应用文件下载接口,读取 WEB-INF/web.xml 可获取 Servlet 映射、安全约束及部分内网地址,进一步定向请求被隐藏的管理接口。金融、政务等行业的 Java 系统中此类接口大量存在,且 WEB-INF 目录本身不可被浏览器直接访问,容易被开发者忽视校验。

图片/头像代理接口的路径穿越:前端调用服务端图片代理接口(如微信头像回源、CDN 图片加速)时,接口仅简单取 URL 末尾的文件名或路径片段,未区分本地路径与远程 URL,传入 file:// 协议或 ../ 序列即可读取服务端本地文件;进一步读取 /etc/hosts 可获取内网主机与域名映射,辅助横向渗透。

关键字白名单形同虚设:部分政务下载接口对路径参数做关键字检查(如验证是否包含 UserFiles),但未做路径规范化,可构造 UserFiles/../../../etc/passwd 绕过检查,关键字检查位于恶意序列之前即可满足条件。

Base64 编码参数代替路径过滤:部分站点将文件路径做 Base64 编码后传给接口,误以为编码即安全,实际服务端仍将解码结果直接拼接路径,攻击者只需对目标路径编码后传参,批量脚本可自动化枚举高价值文件。

通用培训/教务 CMS 批量影响:同一套 e-Learning 或教务系统的下载接口(如 fileServer/fileUpload/downloadFile.jsp)未过滤路径穿越,通过搜索引擎批量定位使用该系统的银行网络学院、企业培训平台、运营商内部系统,一个 PoC 可覆盖数十乃至上百个目标。

XXE 注入读取本地文件:企业级 Java 中间件(如用友 NC、Oracle WebLogic)对外暴露接受 XML 的 Web Service 端点,XML 解析器未禁用外部实体,攻击者在请求体中注入 <!DOCTYPE … SYSTEM "file:///etc/passwd"> 即可将服务端任意文件内容带出;配置文件、数据库密码、内网地址等高价值信息可通过同一手法逐一枚举。

Padding Oracle 伪造加密路径参数:部分系统将文件路径用对称加密(如 AES-CBC)或填充加密后作为 token 传给下载接口,误以为攻击者无法构造任意路径;若接口对解密错误返回不同响应(Padding Oracle),可通过逐字节爆破还原并篡改密文,将 token 中的合法路径替换为目标路径(如 ~/Web.config),绕过加密校验实现任意文件读取。

Resin 内置 resin-doc servlet 文件浏览:Resin 应用服务器默认部署 resin-doc 文档应用,其中内置用于手册浏览的 servlet 可在无需鉴权的情况下读取 Web 主目录内的任意文件;向 resin-doc/viewfile/ 端点传入 WEB-INF/web.xml 等路径即可直接获取配置,许多生产环境未删除该文档应用,批量扫描可发现大量存活目标。

file:// 协议直接注入下载接口:部分文件下载接口接受完整 URL 作为参数(如 fileURL=/etc/passwdinputFile=file:///home/user/.bash_history),服务端未区分本地协议与 HTTP,直接将参数传入文件读取函数;攻击者通过枚举 /home/ 下各账号的 .bash_history.ssh/id_rsa 等路径,可获取历史命令中的明文凭据及 SSH 私钥,进而直接登录服务器。

.bash_history 命令历史作为凭证跳板:任意文件读取接口读取 /home/<用户>/.bash_history/root/.bash_history,历史命令中往往明文记录了 SVN 检出命令(含用户名密码)、MySQL 登录命令(含 -p 密码参数)、SSH 登录脚本路径等;部分案例中命令历史还暴露了内网绝对路径,可作为后续定向读取配置文件的路径线索。

GlassFish 超长 UTF-8 编码绕过路径校验:GlassFish 应用服务器在默认开放的 4848 管理端口上,可通过对 .(点)字符使用超长 UTF-8 编码(%c0%ae)替代普通 ../,构造如 theme/META-INF/%c0%ae%c0%ae/…/etc/passwd 的请求绕过路径校验直接读取系统文件;该编码变体不在常规 ../ 过滤规则覆盖范围内,大量暴露 4848 端口的生产环境可批量验证。

默认数据库文件落在 Web 可访问路径:部分基于 Access 或 SQLite 的 CMS(如报名系统、旅行社管理系统)将数据库文件(.mdb.db)存放在 Web 根目录的固定子路径下(如 /date/date.mdb/datas/data.mdb),未加访问限制;通过搜索引擎批量定位使用同一套系统的目标,直接拼接默认路径即可下载整个数据库,无需任何路径穿越技巧。

数据源 XML 配置文件泄露 JDBC 凭证:Java 应用服务器(Resin、JBoss 等)常将数据库连接配置单独写入 dataSource.xmljdbc.xml 等文件,其中包含明文的数据库地址、用户名和密码;任意文件读取接口读取该类文件可直接获取数据库直连凭据,部分案例中凭据还兼用于内部邮件服务器或管理后台,横向影响面远超单一数据库。

接口参数直接拼接读取框架配置:Java Web 接口将 manualFileName 等业务参数不加过滤地拼入文件路径,攻击者读取 WEB-INF/web.xml 或 Struts 配置文件后,可获取 Action 路由映射和数据库连接串;该参数名语义上看似业务无关,开发者往往不将其纳入安全校验范围。

桌面软件内嵌 Web 服务监听外网接口:桌面客户端(如下载工具)附带的本地 Web 服务绑定到 0.0.0.0 而非 127.0.0.1,使局域网内任意主机均可访问;服务对 ../ 有过滤但对 …/(三点斜杠)未处理,通过该变体可穿越到任意路径读取本机文件,攻击面覆盖同一 Wi-Fi 下所有在线设备。

已知 CMS 文件读取漏洞读取数据库配置:主流 PHP CMS(如 PHPCMS)的特定版本存在已公开的文件读取路径,数据库配置文件位于固定相对路径;攻击者无需探测路径,直接使用公开 PoC 批量请求配置文件端点,获取电商或内容平台的数据库凭据。

企业 OA 系统 filePath 参数无校验读取内部文档:企业 OA 平台提供明确的 filePath 参数接受用户输入,服务端直接读取对应绝对路径并返回内容,未限制路径必须在附件目录内;OA 系统内部通常存储合同、财务报表、人事档案等高敏文档,文件读取可直接获取企业核心数据。

Web 服务器根目录错误映射到文件系统根目录:Web 服务器配置将站点根目录指向文件系统根目录,或存在路径穿越配置缺陷,导致外部请求可直接读取 /etc/shadow 等系统文件;攻击者获取密码哈希后可离线爆破,进而以系统账号登录服务器。

通用政务系统批量影响高敏感数据:同一套底层框架或组件的任意文件读取漏洞批量影响多个政务系统,政府平台存储公民身份、社保、税务等高度敏感数据,单一技术漏洞的实际危害远超普通商业系统。

框架路由参数被利用进行路径穿越:PHP 框架(如 Zend Framework)在特定路由配置下,框架自身的路由解析参数可被注入路径穿越序列;攻击者构造符合路由规则的请求同时嵌入 ../,绕过应用层校验直接读取框架根目录之外的文件。

XXE 错误响应直接回显文件内容:XML 解析接口未禁用外部实体,通过 file:// 协议注入读取本地文件;部分实现在解析失败或异常时将文件内容直接嵌入错误响应体返回,无需带外通道(OOB)即可获取文件内容,利用门槛显著降低。

SVN 版本控制目录泄露整站源码:Web 根目录未删除 .svn 目录,攻击者通过枚举 .svn/entries.svn/wc.db 等元数据文件可还原完整目录树,进而批量下载所有源码文件;源码中往往明文包含数据库连接串、API 密钥和内网地址,利用 svn_extractor 等工具可自动化完成。

通用考试平台 config 目录路径固定已知:行业通用的在线考试平台将数据库配置写入固定路径(如 system/config/ds.xml)、管理员账号写入 system/config/manauser.xml,攻击者无需路径探测,直接请求已知路径即可获取;同一套平台批量部署在银行、电力、运营商等行业,覆盖面极广。

登录跳转参数注入读取 WEB-INF 内容:部分 Java 应用在登录成功后将 _previous_url_ 等跳转参数值拼入文件读取逻辑,攻击者构造指向 WEB-INF/web.xml 或 Hibernate 映射文件的路径,无需额外接口即可通过正常登录流程获取内部配置和数据库凭据。

注册/简历上传流程中图片路径参数未校验:业务系统在头像或附件上传后将服务端路径以参数形式返回前端,前端再通过同一参数请求文件内容;攻击者将参数值替换为 /etc/passwd 等绝对路径即可读取,而业务逻辑仅校验了上传格式,未对后续读取接口的路径做限制。

rsync 配置文件与密钥通过任意文件读取泄露:服务端 rsync 以 root uid 运行并将配置文件与密钥文件(rsyncd.confrsyncd.secrets)落在 Web 可达路径或通过任意文件读取接口可访问的目录;攻击者读取密钥后可直接以 root 权限通过 rsync 协议同步服务器文件系统,危害等同于 root 级 shell。

通用教务系统 servlet 无需登录可读取任意文件:部分高校 URP 教务系统的特定 servlet 对访问鉴权存在缺陷,未登录状态可直接调用;通过该 servlet 可读取数据库连接配置文件获取数据库凭据,还可读取 /etc/shadow 获取系统密码哈希,搜索引擎可批量定位数百所高校的在用实例。

流媒体/IoT 管理平台 showFile 接口未鉴权:监控、流媒体等设备管理平台内置 showFile.phpdownFile.php 等维护接口,用于读取日志或配置,但这些接口完全不需要鉴权;攻击者直接访问即可遍历下载系统日志,进一步读取配置文件获取管理员账号密码,再通过后台接管整套设备管理系统。

JSP 通用下载接口(downloadFiles.jsp)作为漏洞跳板链式利用:部分 Java 系统残留用于文件传输的通用 JSP 下载接口,路径参数未过滤;利用该接口读取数据库 root 密码配置,再连接数据库导出备份,同时读取全站源码和 rsync 密钥,单个"鸡肋"文件读取点可串联为完整的数据泄露链路。

Java SSO 配置文件凭证 Base64 编码后仍可解码:统一认证系统(如 Sun Java System Access Manager)的配置文件将管理员账号密码以 Base64 编码存储,通过任意文件读取接口获取后直接解码即可还原明文;攻击者用还原出的凭据登录 SSO 后台后,可管理全校所有用户账号、重置任意用户密码,影响面覆盖整个身份认证体系。

Axis2 配置文件弱口令与任意文件下载组合利用:任意文件下载接口读取 Axis2 框架配置文件(axis2.xml)获取管理控制台默认弱口令,登录后通过 Axis2 Admin 部署恶意 AAR 包实现代码执行;此类利用链中文件读取仅是入口,弱口令配置文件是真正的跳板。

Web 配置文件读取意外暴露第三方服务凭证:.NET 站点下载接口读取 web.config,其中除数据库连接串外还包含短信网关、支付接口等第三方服务的 API 密钥;攻击者凭借获取的短信接口 ID 和密码直接调用短信发送接口,影响面从数据泄露扩展到业务滥用。

CuteEditor 第三方编辑器残留文件包含:数字化校园、政务等平台集成 CuteEditor 富文本编辑器,厂商删除了存在上传漏洞的文件但未删除 Load.ashx?type=image&file= 包含接口;通过该接口可跨目录读取 web.config,批量影响使用同一编辑器的数十个站点。

整站源码压缩包暴露在 Web 根目录:运维人员在服务器上直接打包备份源码,将 www.zipbackup.tar.gz 等压缩文件留在 Web 可访问目录;攻击者下载解压后从配置文件中获取数据库凭据,随后直接连接数据库添加管理员账号,整个过程无需任何路径穿越。

模板/打包功能参数篡改任意目录归档:电商或内容平台后台提供"模板导出"或"文件打包"功能,接受路径参数拼接后调用系统归档命令,未校验路径边界;注册试用账号后篡改路径参数可将服务端任意目录(含 /etc/root)打包成 ZIP 下载,一次请求即可批量获取大量文件。

SSRF 借助 curl 的 file:// 协议读取服务端文件:社交、内容平台将用户提交的 URL 传入 curl 等 HTTP 客户端做内容抓取(如分享预览、图片回源),未限制协议类型;传入 file:///etc/shadowfile:///proc/net/arp 即可读取服务端本地文件或内网拓扑,curl 默认支持 file:// 目录列表,可逐层枚举目录结构。

双重 Base64 编码绕过参数校验:部分政府通用系统将文件路径做两次 Base64 编码后作为参数传入,服务端对参数做单次解码后进行白名单匹配,攻击者对目标路径连续编码两次即可绕过校验;同一套系统批量部署在多个县市政务站点,单个 PoC 可覆盖大量目标。

教务系统 Action 路径无需鉴权直接列目录:金仕达 EAMS 等教务系统提供 file!list.action?path=/ 接口用于文件管理,该接口完全不需要登录即可访问;攻击者可递归列举服务器全部目录树,进而下载源码包、反编译后获取数据库连接串,全校学生信息随即暴露。

Oracle 连接配置文件读取后直连数据库:呼叫中心、企业级业务平台将 Oracle 数据库连接信息(TNS 地址、SID、账密)写入单独的属性文件;任意文件下载接口读取该文件后,攻击者用 Navicat 等工具直连 Oracle,在管理表中检索出平台管理员密码并登录后台,进而控制全国范围内的业务系统。

邮件配置文件泄露后横向进入企业邮箱:Java 应用将 SMTP 凭证单独写入 email.properties,任意文件读取接口可直接获取邮件服务器地址、账号和密码;攻击者登录企业邮箱后下载通讯录,再结合数据库中哈希碰撞得到的密码爆破其他员工邮箱,最终在收件箱中发现明文记录的业务系统登录凭据。

GlassFish 读取支付 SDK 配置与私钥证书:GlassFish 超长 UTF-8 编码路径穿越不仅可读取数据库凭证,还可定向读取应用目录下的支付 SDK 配置文件(如银联对接的 acp_sdk.properties)及证书目录中的私钥文件;攻击者获取私钥后可伪造签名请求,危害直接覆盖支付链路。

数据分析 BI 平台 resource 参数未限制目录:商业 BI 数据分析平台(如永洪 BI)提供 Viewer?resource= 参数用于加载资源文件,默认以 root 权限运行且未限制资源路径;传入 ../../../root/.bash_history 可获取管理员历史命令中的数据库密码,同一套平台被多个企业采购部署,通用漏洞影响面覆盖整个客户群。

FTP 鉴权配置文件通过任意读取获取凭据后直接上传:任意文件读取接口依次读取 /etc/vsftpd/vsftpd.conf 确认鉴权方式,再读取对应的 PAM 数据库文件获取 FTP 用户名密码;登录 FTP 后发现各目录与 nginx 虚拟主机一一对应,向对应目录上传 webshell 即可逐个控制该 IP 下所有域名的站点,文件读取成为批量 getshell 的跳板。

备份日志文件落在 Web 可达目录:系统定时将数据库查询日志、操作日志以日期命名后存入 Web 可访问的备份目录,未设置访问控制;日志内容包含大量用户身份证号、手机号、住址等信息,攻击者通过枚举日期参数批量下载,无需任何路径穿越技巧,单次操作即可获取数十万条公民数据。

IIS 短文件名枚举辅助定位隐藏下载路径:IIS 服务器开启短文件名功能,攻击者通过 8.3 格式枚举获取被混淆的备份文件名(如 BACKUP~1.SQL);结合任意文件下载接口将还原出的路径作为参数提交,绕过了依赖"路径不可猜测"的安全假设,将目录枚举与文件读取组合成完整利用链。

Joomla 第三方组件 LFD 读取 CMS 配置:Joomla 第三方模块(如物流、媒体类插件)对文件路径参数未做校验,可直接读取 CMS 根目录下的全局配置文件,其中以明文存储 FTP 凭据、数据库账号密码及管理员哈希;同一组件被大量站点安装,批量利用覆盖面极广。

Nginx vhost 配置文件读取暴露全站拓扑:服务端存在任意文件读取接口,读取 /etc/nginx/nginx.confvhost/ 目录下的虚拟主机配置,可获取服务器上所有域名与 Web 根目录的对应关系;攻击者据此枚举所有站点路径,逐一读取 PHP 配置文件或上传 webshell,单个漏洞横向覆盖同机所有域名。

Apache httpd.conf 读取暴露日志路径与内网结构:任意文件读取接口读取 /etc/httpd/conf/httpd.confhttpd.conf,其中 VirtualHost 段明文记录各域名的文档根目录、日志文件路径和内网 IP 地址;攻击者进一步读取访问日志可还原用户行为,读取日志目录下的 SQL 备份可直接获取数据库。

Weblogic path 参数直接拼接读取任意文件:企业级应用部署在 Weblogic 上,内置文档下载接口的 path 参数直接拼接到文件系统路径,未做目录边界校验;读取 passwd 或绝对路径下的应用配置文件后,攻击者可结合 Weblogic 管理端口进一步部署恶意包,从文件读取升级为代码执行。

企业 OA 安装/setup 目录配置文件泄露:部分 Java OA 系统在安装完成后未删除 setup/ 维护目录,其中存储了包含管理员初始密码哈希的安装配置文件;任意文件读取接口读取该配置后,攻击者直接登录 OA 管理后台,进而获取全量员工通讯录、合同及财务文档。

图片显示接口 Base64 路径参数未校验:政务、交通违章查询等公众服务站点将图片路径做 Base64 编码后作为查询参数传给展示接口,服务端解码后直接读取并返回文件内容,且接口无需登录即可访问;攻击者对目标文件路径编码后提交,即可读取 /etc/shadow 等系统文件,利用门槛极低。

Zimbra 文件包含读取邮件服务器敏感配置:Zimbra 邮件服务器存在已知文件包含漏洞,可读取 Zimbra 全局配置文件获取管理员账号哈希,以及 /etc/passwd 等系统文件;攻击者利用还原出的凭据登录 Zimbra 管理后台后,可新建管理员账号、查阅任意用户邮件,危害覆盖整个企业邮件系统。

用友 ERP-NC 通用文件包含批量影响大型企业:用友 NC 企业 ERP 系统特定版本存在通用文件包含漏洞,可遍历服务端任意目录;系统内置 datasource 等配置文件记录多组数据库连接串,攻击者可一次性获取企业所有业务数据库的凭据,同一套 ERP 被大量知名企业和高校采购部署,单个漏洞的实际影响面跨越数十个目标。

充值卡及业务凭证以明文存储在 Web 可访问路径:部分在线商城、积分平台将充值卡卡号与密码以明文写入数据库后同步导出到 Web 目录下的文本或数据库文件;攻击者通过目录遍历或固定路径直接下载该文件,无需任何路径穿越技巧即可批量获取有效充值凭证,直接造成业务经济损失。

SSRF 利用十进制 IP 绕过 URL 过滤:社交、内容平台将用户提交的 URL 传入服务端 HTTP 客户端做内容抓取,对 127.0.0.1、内网 IP 段做了字符串过滤,但未处理十进制或十六进制表示形式;攻击者将 127.0.0.1 转换为十进制整数形式传入,绕过过滤后服务端实际发起本地请求,进一步配合 file:// 协议读取服务端文件或探测内网端口。

安全接入/NAC 管理系统文件下载模块无边界校验:企业网络准入控制(NAC)或安全接入管理产品内置文件下载模块,对用户输入的路径参数未做合法性验证,允许读取磁盘任意位置的文件;此类产品通常以高权限运行并深度集成到内网,文件读取漏洞可直接获取内网账号凭据和设备配置,危害覆盖整个企业内网边界。

业务参数 fileurl 拼接到下载路径绕过后缀校验:Java Web 应用的文件下载接口同时接受 fileurlfiletype 两个参数,接口将两者拼接后读取文件;攻击者将 fileurl 设为 WEB-INF/web.xmlfiletype 设为合法后缀(如 .jsp),服务端后缀校验仅检查 filetype 参数而不校验 fileurl 实际内容,任意文件均可下载,框架配置和路由映射随即泄露。

XXE 带外通道借助 gopher 渗出文件内容:XML 接口存在 XXE 漏洞,但响应体不直接回显;攻击者在外部服务器托管远程恶意 XML,通过参数实体将目标文件内容拼入 gopher 请求 URL,服务端解析时主动向攻击者的监听端口发起请求,文件内容通过 HTTP 日志或 DNS 请求带出;此带外手法不依赖响应回显,可突破不返回任何内容的"盲 XXE"场景。

注册/业务接口接受 XML 并通过协议控制读取目标文件:Java Web 的注册或数据提交接口(如 reg_newuser_dowith.jsp)接受请求体中的 XML,解析时未禁用外部实体且支持 gopher、ftp 等协议;攻击者通过 Burp Suite 直接发送包含外部实体的请求体,借助 gopher 或 ftp 协议控制服务端读取本地文件;此类接口在政务、公共服务系统中大量存在,且通常不出现在公开的 API 文档中,难以被常规扫描发现。

任意文件下载获取门票/二维码凭证接管入场资格:活动管理、会议票务平台的文件下载接口未校验路径,存储他人门票二维码图片的路径规律可预测(如以票号为文件名);攻击者下载指定路径的门票文件即可获取他人的有效凭证,直接用于入场;此类业务凭证泄露的危害远超普通文件读取,实际损失覆盖线下活动访问控制。

.NET web.config 目录遍历暴露数据库凭据后跨站横向:非 Java 体系的 .NET 站点在目录遍历或文件读取接口下,web.config 以明文存储数据库连接串;攻击者拿到凭据后发现数据库端口对外开放,同时 3389 远程桌面无 IP 限制;利用数据库凭据破解应用层管理员密码后,以同密码直接登录服务器,整个链路从文件读取到主机控制无需额外漏洞。

监控/安防系统配置文件直接暴露摄像头实时访问权限:工业园区或运营商内网部署的安防管理平台将数据库配置文件置于 Web 可直接访问的路径,无需认证即可读取;攻击者用获取的凭据登录管理后台后,可查看实时监控视频、对已部署摄像头执行布防或撤防操作;此类漏洞危害从数据泄露直接延伸至物理安全失控。

DLL/JAR 反编译还原源码定向发现备份接口:服务端将业务逻辑封装在编译后的 DLL 或 JAR 包中,文件下载接口可直接下载这些二进制包;攻击者使用反编译工具(如 JD-GUI、dotPeek)还原源码后,发现其中存在无鉴权的数据库备份触发接口;触发备份后再通过下载接口获取备份文件,附加到本地数据库即可提取所有明文或哈希凭据;此类利用链中文件下载本身是入口,反编译是发现隐藏接口的关键步骤。

客户端逆向获取固定加密密钥绕过路径保护:部分平台(如游戏运营/商业 SaaS)将文件路径用固定密钥对称加密后作为 fid 参数传入下载接口,以为攻击者无法构造任意路径;攻击者通过反编译客户端程序或分析 DLL,提取硬编码的加密密钥和算法后,可自行加密任意目标路径(如 ~/web.config)并构造有效请求;同一套商业程序被数十乃至数百家企业采购,单次逆向的利用结果可批量复用于所有客户站点。

任意文件读取获取 Redis 配置后接管缓存服务器:任意文件读取接口读取 redis.conf 或应用配置文件中的 Redis 连接信息(地址、端口、requirepass);若 Redis 无密码或密码从配置中获取,攻击者直接连接 Redis 后,通过 config set dirconfig set dbfilename 将 RDB 文件写入 Web 目录或 SSH 授权文件目录,从文件读取升级为代码执行或 SSH 免密登录。

子站 SQL 备份泄露 → 邮件系统 → 第三方支付账号三级跳:子站目录遍历暴露数据库 SQL 备份文件,备份包含应用用户的邮箱地址与 MD5 哈希;攻击者破解部分哈希后,将邮箱与密码尝试登录企业内部邮件系统;进入邮箱后在收件箱中发现由运营人员转发的第三方支付账号登录密码或支付密码;此类三级跳利用链中,每一步的凭据都来自上一步,单个"无关痛痒"的备份文件可最终导致资金账户失控。

文件读取 → nginx 配置发现多域名映射 → FTP 上传结合解析漏洞批量 getshell:读取 nginx vhost 配置后获取服务器上所有域名与 Web 根目录的对应关系;进一步读取 FTP 配置文件获取各目录对应的 FTP 账号密码,登录后逐目录上传文件;若 nginx 存在路径解析漏洞,上传带特殊后缀名的文本文件即可触发 PHP 执行,同一台服务器上所有域名同时沦陷。

JSONP 回调接口意外暴露文件读取端点:部分前端通过 JSONP 方式调用服务端资源加载接口(如 readfile),接口将文件内容序列化包裹在回调函数中返回;攻击者通过抓包分析 JSONP 请求,将参数替换为目标文件路径即可读取服务端任意文件,而开发者往往认为该接口只供前端使用、不属于"下载接口",未将其纳入安全审计范围。

GlassFish 任意文件读取后下载 WAR 包反编译获取凭据再部署恶意包:GlassFish 超长 UTF-8 编码路径穿越可读取 /home/glassfish/domains/domain1/ 下的已部署 WAR 包,攻击者下载 WAR 后用反编译工具还原源码,从中提取数据库连接串;再读取 .bash_history 获取管理控制台密码,登录后台后部署恶意 WAR 包实现代码执行,整条利用链从文件读取出发,最终以 root 权限完成接管。

Windows 服务器任意文件读取获取密码哈希后远程桌面横向:部分 Java Web 应用部署在 Windows 服务器上,通过任意文件下载接口读取 Tomcat 管理员配置获取管理控制台凭据,上传 WAR 包部署 webshell 后执行内存转储获取系统账号 NTLM 哈希;将哈希在离线平台破解后以明文密码直接登录 3389 远程桌面,整个链路从文件读取漏洞延伸至服务器完全控制,无需任何额外漏洞。

数据库备份按日期命名并列于源码同一目录:部分系统将多套子站的源码压缩包与数据库 SQL 备份按固定命名规则(如系统名加日期)放在同一 Web 可访问目录,且每天定时生成新备份;攻击者枚举日期参数即可持续获取最新备份,源码中包含数据库 root 凭据,数据库转储包含全量用户数据,两类文件同时泄露时危害叠加。

企业 ERP/财务软件 filename 参数直接映射本地路径:金蝶、用友等企业软件特定版本将 filenamefilePath 参数不加验证地拼入本地文件读取函数,攻击者无需特殊编码即可直接读取 /root/.bash_history、数据库配置等文件;此类软件大量部署在企业内网且常以高权限运行,漏洞影响面覆盖全部客户实例,读取的命令历史中往往明文记录了服务器架设过程中使用的账号凭据。

客户端阅读器 SWF 反编译提取解密密钥绕过内容保护:付费内容平台(如电子书服务)将阅读逻辑封装在 SWF 文件中,内容以固定密钥加密存储;攻击者反编译 SWF 提取硬编码的加密密钥和算法,在本地重新实现解密逻辑后,可直接解密并读取服务端返回的加密内容文件,绕过付费限制批量获取全量内容;此类漏洞本质上是客户端逆向使"服务端只读"的文件保护形同虚设。

医院/集团多院区后台共用导致所有分支机构同时沦陷:部分医院集团或连锁企业将多个院区/门店的管理系统接入同一套后台,通过总院链接可管理所有分院;任意文件下载或目录遍历漏洞存在于总院系统时,所有分院的文件目录、用户数据和管理权限同时暴露,单个漏洞的实际影响面覆盖全部下属机构。

数据目录未设访问控制致 SQL 备份可直接按路径下载:部分 Web 站点将数据库 SQL 备份放在 data/table/ 等子目录下,目录本身未设置访问限制;攻击者无需任何路径穿越技巧,直接浏览该目录或拼接已知文件名即可下载完整数据库备份;备份中包含用户哈希后,结合字典爆破可登录管理后台,最终从一次偶然的路径发现演变为完整的后台控制。

POST 请求体 fileName 参数接受 file:// 协议读取本地文件:部分平台文件处理接口通过 POST 请求体接受 fileName 参数,服务端将其传入底层文件读取函数而未过滤协议前缀;传入 file:///etc/passwd 或本地绝对路径时服务端直接返回文件内容,此类漏洞隐藏在 POST 请求中,常规 URL 扫描工具难以发现,人工抓包分析是主要检测手段。

医疗体检报告目录遍历导致患者健康数据批量下载:体检中心或医疗机构将体检报告图片存放在固定子目录下,目录索引未关闭;攻击者通过目录遍历列出所有报告文件名后逐一下载,可获取包含患者姓名、身份证号、体检项目及检查结果的完整体检报告;医疗健康数据的敏感等级远高于普通业务数据,单次遍历可涉及数万人的隐私信息。

企业内部网盘/协作系统文件下载接口无鉴权:部分企业或教育机构部署的内部网盘系统(如校园文件共享平台)的下载接口完全不需要登录即可访问,且文件共享链接 URL 规律可预测;攻击者通过搜索引擎定位特定系统实例,枚举文件 ID 或路径后可批量下载内部文档、学籍管理表格、合同等敏感文件;此类系统往往未对外宣传,管理员误以为"默默无闻即安全"而长期不做鉴权加固。

搜索引擎关键词一键定位同款网盘系统:部分内部网盘或文件共享系统的 URL 特征固定,用搜索引擎以 inurl:特征路径 一次查询即可批量枚举所有使用该系统的站点;这些系统往往未做访问控制,攻击者无需关心每个目标的具体域名,一个查询词覆盖所有在线实例,教育机构的学籍表、内部通知等文件直接暴露在公开索引中。

目录遍历暴露实时业务数据:部分企业(如航空公司)将实时业务数据文件(航班动态、运营日志)存放于 Web 可访问目录,目录索引未关闭;攻击者通过遍历目录不仅可下载历史数据,还能持续获取最新业务状态,配合同目录下的 FTP/FXP 配置文件(其中包含明文账号密码),可进一步登录文件服务器传输任意文件。

PHP CMS 将 GET 参数直接拼接 siteRoot 路径:部分 PHP CMS 文件下载功能将请求参数拼接到站点根目录路径变量后直接传入读取函数,未过滤 ../ 或绝对路径;攻击者可读取 Web 根目录内任意源码文件,再通过源码定位 phpMyAdmin 配置文件获取数据库凭据,连接数据库后添加管理员账号即可完全接管站点。

upload/backup 目录遍历暴露工程敏感资料:工程管理、基础设施平台(如电信基站工程系统)将施工图、设备配置文件、数据库备份等材料存放在 upload/backup/ 子目录,目录索引未关闭;攻击者通过列目录获取全部文件列表后批量下载,其中数据库备份包含系统账号凭据,施工资料涉及内网拓扑,危害超出单纯数据泄露范畴。

PHP 配置文件读取获取 UCenter key 后 getshell:基于 UCenter 架构的 PHP 论坛或社区系统将 UC_KEY 等通信密钥写入明文配置文件;任意文件读取接口读取该配置后,攻击者利用泄露的密钥通过 UCenter 接口写入可执行代码,从配置文件读取直接升级为远程代码执行,整个过程无需数据库凭据。

Google Dork 结合文件遍历推断上传路径:部分系统上传文件后不直接返回路径,但已上传文件被搜索引擎收录;攻击者通过 site:目标域名 filetype:doc 等 Dork 获取已公开的上传文件 URL,从中提取上传目录规律,再将已知路径与文件遍历接口结合,无需暴力猜测即可精确定位 webshell 存放路径或敏感附件目录。

数据库端口对外开放与文件读取协同利用:部分系统数据库端口直接暴露在公网,仅依赖账号密码保护;任意文件读取接口读取应用配置文件获取数据库凭据后,攻击者直接用客户端工具外连数据库,无需绕过 Web 层防护,直接增删改查所有业务数据或添加管理员账号,危害等同于数据库服务器完全失控。

DedeCMS 系统通用漏洞路径已知可批量利用:DedeCMS 特定版本存在已公开的文件读取路径,数据库配置文件位于固定位置;大量个人站点、政府机关、教育机构使用该 CMS,且长期不更新;攻击者用通用 PoC 批量探测,结合后台弱口令(如默认 admin/admin888)即可无需额外路径探测直接进入管理后台,单个 CMS 漏洞批量影响规模远超自研系统。

工业控制/OT 系统配置文件通过文件读取暴露设备控制权:工控 SCADA 或监控平台将 PLC 配置、设备通信参数写入 XML 或属性文件;任意文件读取接口读取这些文件后,攻击者获取工业协议地址和认证参数,可与生产网络中的设备直接通信,危害从数据泄露延伸至物理生产过程失控,影响面超出 IT 系统范畴。

Java 应用 classPath 资源文件通过任意读取暴露:Java Web 应用将敏感配置(加密密钥、第三方接口凭证)打包进 classpath 目录下的 .properties 文件;文件读取接口在读取 WEB-INF/classes/ 目录时可直接获取这些资源文件,而开发者往往认为 classpath 内的文件不会被 Web 接口访问,疏于审计;一份 classpath 配置往往同时包含多个系统的凭据,单次读取可横向影响多个关联平台。

前端 JS 文件泄露内部接口路径辅助定向读取:攻击者通过任意文件读取接口获取前端 JS 文件(尤其是打包后的 bundle)后,在源码中搜索 api/downloadconfig 等关键字,发现未在文档中公开的内部接口路径;将这些隐藏路径作为下一轮文件读取的目标,可触达正常扫描工具无法发现的接口,整个利用链以文件读取为起点,以隐藏接口探测为延伸。

绕过方式

绕过类别手法
URL 编码%2e%2e%2f../ 的 URL 编码)
双重 URL 编码%252e%252e%252f(绕过一次解码的过滤)
路径分隔符变体Windows 系统可用 ..\\;混用 /\\
....// 变形部分过滤只删除 ../ 而不循环替换,....// 删除后还原为 ../
绝对路径部分实现允许直接传入绝对路径如 /etc/passwd
NULL 字节截断PHP < 5.3.4:../../../etc/passwd%00.pdf(截断后缀名校验)

防御控制点

  • 白名单校验文件名:只允许字母数字和特定扩展名,完全拒绝 ./\ 字符
  • 限制在根目录内:计算最终路径的规范化形式(realpath()),验证其前缀必须在允许的目录内
  • 存储与访问分离:用户上传/下载的文件通过随机 ID 索引,服务端维护 ID→路径的映射,不将真实路径暴露给用户
  • 最小权限:web 进程运行账号不赋予读取 /etc/shadow、系统配置文件的权限
  • 禁止目录索引:web 服务器关闭目录列表(autoindex off