PowerShell Uso para Revelar Contraseñas
PowerShell Uso para Revelar Contraseñas

PowerShell: Cómo Puedes usarlo para Revelar Contraseñas

Los scripts de PowerShell se utilizan a menudo como herramienta para realizar tareas administrativas en bloque. Si estás ejecutando un script de forma interactiva, entonces el script puede simplemente operar bajo tu contexto de seguridad. Del mismo modo, el script puede simplemente solicitarle un conjunto de credenciales.

Sin embargo, algunos scripts de PowerShell están diseñados específicamente para ejecutarse de forma automatizada sin intervención administrativa. Estos scripts suelen recibir los permisos necesarios extrayendo las credenciales de un archivo cifrado. La pregunta es: ¿se puede descifrar este tipo de archivo de contraseñas, revelando la contraseña administrativa en texto claro?

Concepto de uso de PowerShell
Concepto de uso de PowerShell

En este artículo, te mostraré cómo podría funcionar tal descifrado. Empecemos por entender cómo crear un archivo de contraseñas encriptado (cifrado).

Creación de un Archivo de Contraseñas Encriptado

Si estás autorizando un script de PowerShell que quieres ejecutar en modo desatendido, entonces vas a necesitar un archivo de contraseñas del que el script pueda recuperar un conjunto de credenciales administrativas. El truco, sin embargo, es que este archivo no existe por defecto. Depende de ti crear el archivo. Afortunadamente, es relativamente fácil de hacer. Puede utilizar los siguientes comandos para crear un archivo de contraseñas:

$Password = Read-Host "Introduce tu contraseña" -AsSecureString | ConvertFrom-SecureString
$Password | Out-File "C:\Datos\Password.txt"

¿Ves lo sencillo que es?

El primer comando crea una variable llamada $Password. Esa línea también mostrará el aviso "Introduce tu contraseña". Lo que introduzcas se escribirá en la variable $Password. Si te estás gustando el uso de PowerShell, puedes comenzar con esta guía básica de inicio.

Además, notarás que estoy usando el parámetro -AsSecureString. Esto hace que la entrada sea enmascarada con asteriscos. Finalmente, estoy usando la variable ConvertFrom-SecureString para forzar que la contraseña se almacene dentro de la variable en un formato utilizable.

Para mostrarte cómo se ve esto en la práctica, echa un vistazo a la captura de pantalla de abajo. Introduje la primera línea de código y luego se me pidió una contraseña. La contraseña que introduje (que está enmascarada en la captura de pantalla) fue 35g33k5. Para la demostración, entonces escribí $Password para mostrar lo que contiene.

Crear un archivo de contraseñas cifrado en PowerShell
Crear un archivo de contraseñas cifrado en PowerShell

¡Así es como se puede crear un archivo de contraseña encriptada!

Para aclarar, la segunda línea de código listada arriba usa el cmdlet Out-File para tomar el contenido de la variable $Password (la contraseña encriptada) y escribirla en un archivo de texto. En este caso, el archivo de texto es C:\Datos\Password.txt. La captura de pantalla muestra cómo he utilizado el cmdlet Get-Content para mostrar el contenido de este archivo. A su vez, se puede ver que coincide con la variable $Password.

Get-Content "C:\Datos\Password.txt"

A continuación, pasaré a hablar de cómo descifrar un archivo de contraseñas utilizando PowerShell.

Descifrando un Archivo de Contraseña

Ahora que te he mostrado cómo crear un archivo de contraseña encriptado, veamos si podemos desencriptarlo. Recuerda que la contraseña en texto claro es igual a 35g33k5 en este caso.

Lo primero que hay que hacer es leer el archivo de contraseñas en una variable utilizando el cmdlet Get-Content. En este caso, sólo estoy reutilizando la variable $Password en aras de la claridad. Sin embargo, he borrado la variable.

El comando utilizado para leer el archivo de contraseñas en la variable es:

$Password = Get-Content "C:\Datos\Password.txt"
Contenido de la variable Password
Contenido de la variable Password

He leído el archivo de la contraseña en una variable.

En la captura de pantalla anterior, realicé el paso extra de mostrar el contenido de la variable como una forma de probar que la variable $Password contiene efectivamente la contraseña encriptada.

Ahora es el momento de descifrar la contraseña. Aquí están los comandos utilizados para hacerlo:

$SSPassword= $Password | ConvertTo-SecureString
$Decrypted=[Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($SSPassword))
$Decrypted

El primer comando crea una nueva variable llamada $SSPassword. Aquí, estoy convirtiendo el contenido de la variable $Password en una cadena segura y escribiéndola en esta nueva variable.

El segundo comando es el que realiza el descifrado real. PowerShell no puede hacer el descifrado por sí mismo, así que estoy aprovechando .NET. A su vez, PowerShell ejecuta las instrucciones contra la variable $SSPassword. Los resultados se escriben en una nueva variable que llamo $Decrypted. La última línea de código muestra el contenido de la variable $Decrypted, que es la contraseña en texto claro.

Descifrar archivo de contraseña a texto plano con PowerShell
Descifrar archivo de contraseña a texto plano con PowerShell

PowerShell muestra ahora la contraseña en texto claro.

Y ahí lo tienes. Como puedes ver, es relativamente fácil aprender a descifrar un archivo de contraseñas usando PowerShell.

En Resumen

En resumen, el cifrado seguro de cadenas no es tan seguro como parece. Esto se debe a que hay una manera de descifrar la cadena, revelando la contraseña en texto claro. Esta falta de seguridad significa que es extremadamente importante proteger los archivos de contraseñas guardándolos en ubicaciones seguras donde es poco probable que el archivo se vea comprometido.

En cualquier caso, espero que este artículo te haya ayudado a enseñar cómo descifrar un archivo de contraseñas utilizando PowerShell. No dudes en volver a consultar este breve y sencillo artículo en el futuro si alguna vez necesitas un repaso rápido.

Mi Carro Close (×)

Tu carrito está vacío
Ver tienda