实战LFI+文件上传组合拳拿RCE
字数 1280 2025-08-26 22:11:45
实战LFI+文件上传组合拳实现RCE教学文档
漏洞概述
本案例展示如何通过结合本地文件包含(LFI)漏洞和任意文件上传漏洞,实现远程代码执行(RCE)。这种组合攻击方式在实际渗透测试中非常有效,特别是在目标系统存在不安全的访问控制措施时。
漏洞发现与分析
1. 路径遍历(Path Traversal)漏洞
目标站点存在一个关键端点:
/se/v92711/generic/gn_deaultframe/2.0/defaultframe_toolbar_load.php
关键参数:
frameManagerPath:用于加载JS文件的参数,内容经过base64编码
利用步骤:
- 发现POST请求中的
frameManagerPath参数包含base64编码的相对路径 - 解码示例:
L2V0Yy9wYXNzd2Q=→/etc/passwd - 通过修改此参数,可以读取服务器上的任意文件
2. 任意文件上传漏洞
发现点:
- 站点存在一个不受限制的文件上传功能
- 上传后返回文件的相对路径(如
/wwwroot/path:/)
限制:
- 上传的文件无法通过外部直接访问(路径受限)
- 单独利用价值有限
组合攻击实现RCE
攻击流程
-
上传Webshell:
- 上传一个包含恶意代码的文件(如PHP webshell)
- 获取服务器返回的文件存储路径
-
路径处理:
- 对获得的文件路径进行base64编码
- 示例:
rant/blog/pathversal/image05.png→cmFudC9ibG9nL3BhdGh0cmF2ZXJzYWwvaW1hZ2UwNS5wbmc=
-
LFI触发执行:
- 通过之前发现的路径遍历漏洞,包含上传的恶意文件
- 构造请求将base64编码的路径作为
frameManagerPath参数值
-
实现RCE:
- 服务器解析并执行上传的恶意文件
- 获得远程代码执行能力
关键技术点
-
路径编码:
- 所有路径操作都需要进行base64编码
- 确保特殊字符不会破坏请求结构
-
文件上传技巧:
- 尝试上传不同扩展名的文件(如.php、.png、.jpg等)
- 观察服务器对文件内容的处理方式
-
LFI利用:
- 测试不同的路径遍历技巧(如
../、..\、编码后的路径等) - 尝试包含系统日志、环境变量等常见LFI目标
- 测试不同的路径遍历技巧(如
防御建议
-
文件上传防护:
- 实施严格的文件类型验证(白名单方式)
- 对上传文件进行内容检查
- 随机化上传文件的存储路径和名称
- 设置适当的文件权限,防止执行
-
LFI防护:
- 禁用危险函数如
include、require等 - 实施严格的路径验证
- 使用绝对路径而非相对路径
- 对用户输入进行规范化处理
- 禁用危险函数如
-
系统加固:
- 保持系统和应用软件更新
- 实施最小权限原则
- 禁用不必要的PHP功能
总结
本案例展示了如何通过组合利用两个看似独立的漏洞(LFI和文件上传)实现严重的RCE攻击。在实际渗透测试中,这种"组合拳"攻击方式往往能绕过单一漏洞的限制,达到更高的攻击效果。防御方需要全面考虑系统各层面的安全性,不能只防护单一漏洞类型。