2014-08-28 31 views
16

Sto modificando un xml di un lavoro Jenkins. C'è un campo che è una password. Quando ottengo l'xml, dov'era la password grezza ora c'è un hash.Quale crittografia password sta usando Jenkins?

Quello che mi serve è sapere come creare questo hash dal valore di password non elaborato.

<scm class="com.deluan.jenkins.plugins.rtc.JazzSCM"> 
    <username>user</username> 
    <password>zlvnUMF1/hXwe3PLoitMpQ6BuQHBJ1FnpH7vmMmQ2qk=</password> 
    </scm> 

Ho letto Jenkins source code e credo che il HudsonPrivateSecurityRealm.java classe è coinvolta, ma io non sono sicuro circa il parametro sale.

PS: Questo non è per la password di Jenkins è per un plug-in che nella configurazione del lavoro ha un campo password.

+0

Se si conosce la password di testo non crittografato, è possibile provare alcuni algoritmi di hashing comuni. –

+0

In un commento della classe HudsonPrivateSecurityRealm si afferma che PasswordEncoder è basato su SHA-256 e generazione salt casuale. Quindi il problema è come ottenere il sale usato da Jenkins o come generare lo stesso sale, giusto? –

+0

I sali vengono generati durante la crittografia della password e [inclusi nell'output] (https://github.com/jenkinsci/jenkins/blob/0cc333faf285d587a87dee8a5ea54a4f75a2c758/core/src/main/java/hudson/security/HudsonPrivateSecurityRealm.java#L602 -L603). Dato che l'hash non si adatta al formato, potrebbe non essere generato da questo codice: è stato configurato da un plugin, dopotutto. – Blaisorblade

risposta

28

Infatti, non è un hash ma piuttosto una password crittografata. Immagino che le chiavi di crittografia siano memorizzate nel nodo principale. Ciò significa che è possibile ripristinare la password eseguendo seguente script Groovy su console sceneggiatura del maestro

import hudson.util.Secret 

def secret = Secret.fromString("zlvnUMF1/hXwe3PLoitMpQ6BuQHBJ1FnpH7vmMmQ2qk=") 
println(secret.getPlainText()) 

e se si desidera cifrare la password, quindi

import hudson.util.Secret 

def secret = Secret.fromString("your password") 
println(secret.getEncryptedValue()) 

significa anche che una password crittografata in una il computer può essere decodificato solo su quel particolare computer poiché le chiavi sono generate casualmente e ovviamente su macchine diverse le chiavi sono diverse.

Partenza core/src/main/java/hudson/util/Secret.java per maggiori dettagli

10

Un'altra possibilità sarebbe quella di eseguire uno script Groovy via console Jenkins Groovy (si può raggiungere attraverso JENKINS_URL/script):

println(hudson.util.Secret.decrypt("zlvnUMF1/hXwe3PLoitMpQ6BuQHBJ1FnpH7vmMmQ2qk=")) 

Alcuni altri modi sarebbe possibile con pitone:

https://github.com/tweksteen/jenkins-decrypt
https://gist.github.com/menski/8f9980999ed43246b9b2

+0

Fresco. A male non ho i diritti corretti lì ... xxxx manca l'autorizzazione Overall/RunScripts – Cagy79

1

Jenkins utilizza AES-128-ECB per tutte le sue crittografie. In pratica utilizza il file master.key per crittografare la chiave memorizzata nel file hudson.util.Secret. Questa chiave viene quindi utilizzata per crittografare la password in credentials.xml.

Per decrittografare la password di Jenkins, è necessario l'accesso ai file hudson.util.Secret e master.key. È possibile verificare esattamente come Jenkins crittografa la password esaminando la classe hudson.utils.Secret e il suo metodo fromString. Fondamentalmente la password è concatenata con una magia prima di essere crittografata usando KEY.

Per ulteriori dettagli, si prega di controllare: Credentials storage in Jenkins.


per decriptare la password, attenersi alla seguente procedura:

  1. Mentre loggato come amministratore a Jenkins, vai a: /script pagina.
  2. Eseguire il seguente comando:

    println(hudson.util.Secret.decrypt("{XXX=}")) 
    

    o:

    println(hudson.util.Secret.fromString("{XXX=}").getPlainText()) 
    

    dove {XXX=} è la password cifrata. Questo stamperà la password semplice.

    Per fare fronte, eseguire:

    println(hudson.util.Secret.fromString("some_text").getEncryptedValue()) 
    

Fonte: gist at tuxfight3r/jenkins-decrypt.groovy.


controllare In alternativa i seguenti script: tweksteen/jenkins-decrypt, menski/jenkins-decrypt.py.

Problemi correlati