java - desencriptar - ¿Qué cifrado de contraseña usa Jenkins?
desencriptar md5 php (3)
Estoy modificando un xml de un trabajo de Jenkins. Hay un campo que es una contraseña. Cuando obtengo el xml, donde estaba la contraseña en bruto ahora hay un hash.
Lo que necesito es saber cómo crear este hash a partir del valor de la contraseña en bruto.
<scm class="com.deluan.jenkins.plugins.rtc.JazzSCM">
<username>user</username>
<password>zlvnUMF1/hXwe3PLoitMpQ6BuQHBJ1FnpH7vmMmQ2qk=</password>
</scm>
He estado leyendo el código fuente de Jenkins y creo que la clase HudsonPrivateSecurityRealm.java está involucrada, pero no estoy seguro acerca del parámetro salt.
PD: Esto no es para que la contraseña de Jenkins sea para un complemento que, en la configuración del trabajo, tenga un campo de contraseña.
De hecho, no es un hash sino una contraseña encriptada. Supongo que las claves de cifrado se almacenan en el nodo maestro. En realidad, puede descifrar la contraseña ejecutando el siguiente script maravilloso en la consola del script del maestro
import hudson.util.Secret
def secret = Secret.fromString("zlvnUMF1/hXwe3PLoitMpQ6BuQHBJ1FnpH7vmMmQ2qk=")
println(secret.getPlainText())
y si quieres cifrar la contraseña, entonces
import hudson.util.Secret
def secret = Secret.fromString("your password")
println(secret.getEncryptedValue())
Una contraseña encriptada en una computadora puede ser desencriptada solo en esa computadora en particular ya que las claves se generan aleatoriamente y obviamente en diferentes máquinas las claves son diferentes.
Echa un vistazo a core/src/main/java/hudson/util/Secret.java para más detalles
Jenkins utiliza AES-128-ECB para todos sus cifrados. Básicamente, utiliza el archivo master.key
para cifrar la clave almacenada en el archivo hudson.util.Secret
. Esta clave se usa para cifrar la contraseña en credentials.xml
.
Así que para descifrar la contraseña de Jenkins, básicamente necesita acceder a los archivos hudson.util.Secret
y master.key
. Puede verificar exactamente cómo Jenkins cifra la contraseña mirando la clase hudson.utils.Secret
y su método fromString
. Básicamente, la contraseña se concatena con una magia antes de cifrarse con KEY.
Para más detalles, consulte: Almacenamiento de credenciales en Jenkins .
Para descifrar la contraseña, siga estos pasos:
- Una vez que haya iniciado sesión como administrador en Jenkins, vaya a:
/script
page. Ejecuta el siguiente comando:
println(hudson.util.Secret.decrypt("{XXX=}"))
o:
println(hudson.util.Secret.fromString("{XXX=}").getPlainText())
donde
{XXX=}
es su contraseña cifrada. Esto imprimirá la contraseña simple.Para hacer lo contrario, ejecute:
println(hudson.util.Secret.fromString("some_text").getEncryptedValue())
Fuente: tuxfight3r/jenkins-decrypt.groovy
at tuxfight3r/jenkins-decrypt.groovy
.
También puede consultar los siguientes scripts: https://github.com/tweksteen/jenkins-decrypt https://gist.github.com/menski/8f9980999ed43246b9b2 , https://gist.github.com/menski/8f9980999ed43246b9b2 .
Otra posibilidad sería ejecutar un script Groovy a través de la consola Jenkins Groovy (puede acceder a él a través de JENKINS_URL / script ):
println(hudson.util.Secret.decrypt("zlvnUMF1/hXwe3PLoitMpQ6BuQHBJ1FnpH7vmMmQ2qk="))
Algunas otras formas serían posibles con python:
https://github.com/tweksteen/jenkins-decrypt
https://gist.github.com/menski/8f9980999ed43246b9b2