Como de costumbre en The Hacker Way, es una formación 100% práctica y didáctica, repleta de ejemplos reales y ejercicios. A lo largo del contenido aprenderás a:
👉 Mi recomendación es que aproveches esta oferta antes de que finalice.
Ah, además, en el precio están incluidas todas las actualizaciones que se irán publicando, las cuales incluirán ejercicios prácticos, uso de herramientas y técnicas modernas.
La formación está compuesta por vídeos y recursos descargables.
En total, tendrás acceso a aproximadamente 10 horas de vídeo, a las que estimamos que deberás dedicarle aproximadamente 40 horas para realizar las prácticas y ejemplos que se enseñan en las lecciones.
Además de este curso de OSINT para analistas e investigadores, también tenéis disponible el curso de Técnicas de Investigación con OSINT si buscas algo más introductorio y no tan avanzado sobre este tema.
Nuestros amigos de DSDSec nos han hecho llegar un libro muy interesante sobre seguridad SSH, titulado SSH Hardening & Offensive Mastery. Su autor, Diego Ruiz de Bucesta y Álvarez, lo ha puesto a disposición del público de forma gratuita.
Qué podemos encontrar en SSH Hardening & Offensive Mastery
Esta obra comienza con una visión defensiva orientada a la fortificación del protocolo y continúa con una perspectiva ofensiva, mostrando escenarios prácticos explicados paso a paso. El libro muestra distintos laboratorios detallados y reproducibles, incluyendo al final de cada uno propuestas de mitigación, lo cual lo convierte en una lectura de enorme interés tanto para equipos Blue como Red, sysadmins y cualquier profesional o amante de la ciberseguridad.
La publicación cuenta además con un prólogo escrito por Manuel Luis Ruiz de Bucesta, presidente del Instituto de Estudios Históricos Bances y Valdés, y con un prefacio a cargo de Ariel Ruiz Mateos, miembro de DSDSec y colaborador habitual de la revista @rroba, así como de otras publicaciones especializadas como USERS.CODE y Hackin9.
Entre los temas que se tratan en SSH Hardening & Offensive Mastery se incluyen:
Configuración segura de SSH y mecanismos de autenticación como 2FA
Detección y mitigación de ataques mediante Fail2Ban y Suricata (IDS/IPS)
Túneles SSH en sus distintas variantes (local, remoto, dinámico, UDP)
Evasión de restricciones y secuestro de sesiones SSH (agent hijacking)
Propagación de malware mediante túneles dinámicos (ej. Metasploit + BlueKeep)
Análisis y explotación de vulnerabilidades como CVE-2018-15473 y Terrapin (CVE-2023-48795)
Uso de técnicas de explotación de variables de entorno (LD_PRELOAD)
Desarrollo de scripts a medida y herramientas en Tcl/Expect y Perl
Se trata de un recurso 100% recomendable para todos aquellos que deseen profundizar en la seguridad de este protocolo con un enfoque práctico, técnico y riguroso.
En esta ocasión os vamos a enseñar cómo crear Rainbow Tables con Python para cualquier algoritmo de hashing que esté soportado por la librería hashlib.
Pero, por si alguno aún no lo sabe…
¿Qué son las Rainbow Tables?
Se conoce como Rainbow Tables a tablas de hashes donde podemos encontrar equivalencias de contraseñas hasheadas. Realmente, esto recibe el nombre de Complete Lookup Tables.
Las Rainbow Tables son tablas con una función muy similar, pero que se usan principalmente para las contraseñas largas, ya que el coste computacional de encontrar esas contraseñas mediante ataques de fuerza bruta o ataques de diccionario puede ser demasiado elevado.
Por eso, en esta publicación, usaré el término Rainbow Tables como sinónimo de Complete Lookup Tables.
Es decir, por poner un ejemplo, si usamos la función de hashing MD5 para cifrar la contraseña «password», obtendremos el hash «5f4dcc3b5aa765d61d8327deb882cf99».
Las funciones de hashing, como muchos sabréis, no son reversibles, por lo que no es como convertir una cadena a base64, que se puede deshacer con una simple función.
Para descubrir la equivalencia de un hash con una contraseña, hemos de comparar el hash que tenemos con el hash generado a partir de esa contraseña. Y ahí es donde entran las Rainbow Tables.
Además, en algunas funciones de hashing se puede añadir lo que se conoce como «salt», que no es otra cosa que una palabra de cifrado que ayuda a dificultar aún más la posibilidad de descifrar la contraseña.
En este caso nos centraremos en hashes sin salt, es decir, hashes que han sido creados a partir de la contraseña directamente, y con los que se ha creado una tabla para un diccionario de palabras concreto.
En nuestro ejemplo usaremos el algoritmo MD5 y el diccionario rockyou.txt, de sobras conocido por la gran mayoría de hackers. Cabe decir que se puede editar el código que encontraréis a continuación para elegir otro algoritmo, y el diccionario a utilizar puede ser cualquier archivo de texto plano «txt» con una lista de palabras.
Es momento de enseñaros cómo crear esas rainbow tables con python y desgranar el algoritmo de la herramienta en cuestión, creada por DamonCDB y la cual podéis encontrar en su GitHub.
Rainbow Tables con Python línea a línea
Lo primero que debemos hacer es importar la librería hashlib que es la que contiene las distintas funciones de hashing que utilizaremos para crear las rainbow tables con Python. Para ello, la primera línea del código debe ser la siguiente:
import hashlib
De esta forma tenemos disponibles las funciones incluidas en hashlib que nos ayudarán a crear las rainbow tables según la función de hashing que elijamos (MD5, SHA-256, etc.)
A continuación hacemos que el programa nos pida el hash que queremos buscar en la tabla:
hash = input("Introduce el hash a buscar en el diccionario: ").strip()
Con esta línea de código nos aseguramos de que se elimine cualquier espacio al final o al principio del hash, por si lo copiamos con algún espacio y no nos damos cuenta (algo que puede pasarnos si vamos demasiado deprisa).
Después hemos de indicarle a la herramienta la ruta del diccionario de contraseñas que queremos usar. Para ello usamos la siguiente línea de código:
dict_path = input("Introduce la ruta del archivo del diccionario de contrasenyas: ").strip()
La herramienta ya está preparada para pedirnos el hash y el diccionario que queremos usar, pero no es suficiente para que lea el contenido del diccionario. Para ello le decimos a la herramienta que lea la lista de palabras:
f = open(dict_path, "r", encoding='latin-1')
Una vez abierto al archivo del diccionario en modo lectura e introducido el hash, lo que queda es que la herramienta compruebe si dicho hash pertenece a alguna de las palabras del diccionario que le hemos indicado.
Para ello lo que haremos es, línea por línea, crear el hash de cada palabra con la función seleccionada (en nuestro caso MD5, pero como ya se ha dicho, se puede cambiar el código para que use otra función de hash incluida en hashlib).
Después de eso se comparará el hash creado con el introducido por el usuario, y si coinciden, nos devolverá la contraseña a la que pertenece dicho hash y la herramienta se cerrará. En caso de no coincidir, pasará a la siguiente línea, y así continuamente hasta llegar a la última. Si la herramienta no devuelve un resultado, significa que no ha encontrado ninguna palabra cuya conversión con esa función coincida con el hash introducido.
En el supuesto caso en que el archivo que le hemos introducido como ruta del diccionario no exista, nos avisará de que no puede abrir el archivo indicado.
Todo esto se hará mediante una sentencia try – except de Python:
try:
for line in f:
password = line.strip()
hash_md5 = hashlib.md5(password.encode('utf-8')).hexdigest()
if hash == hash_md5:
print("El hash " + hash + " pertenece al password " + password)
break
except FileNotFoundError:
print("No se pudo abrir el archivo. Verifica la ruta.")
Y eso es todo. Como veis es bastante sencillo crear una herramienta de este tipo para tener nuestras propias rainbow tables con Python.
Para ofrecer las mejores experiencias, utilizamos tecnologías como las cookies para almacenar y/o acceder a la información del dispositivo. El consentimiento de estas tecnologías nos permitirá procesar datos como el comportamiento de navegación o las identificaciones únicas en este sitio. No consentir o retirar el consentimiento, puede afectar negativamente a ciertas características y funciones.
Funcional
Siempre activo
El almacenamiento o acceso técnico es estrictamente necesario para el propósito legítimo de permitir el uso de un servicio específico explícitamente solicitado por el abonado o usuario, o con el único propósito de llevar a cabo la transmisión de una comunicación a través de una red de comunicaciones electrónicas.
Preferencias
El almacenamiento o acceso técnico es necesario para la finalidad legítima de almacenar preferencias no solicitadas por el abonado o usuario.
Estadísticas
El almacenamiento o acceso técnico que es utilizado exclusivamente con fines estadísticos.El almacenamiento o acceso técnico que se utiliza exclusivamente con fines estadísticos anónimos. Sin un requerimiento, el cumplimiento voluntario por parte de tu Proveedor de servicios de Internet, o los registros adicionales de un tercero, la información almacenada o recuperada sólo para este propósito no se puede utilizar para identificarte.
Marketing
El almacenamiento o acceso técnico es necesario para crear perfiles de usuario para enviar publicidad, o para rastrear al usuario en una web o en varias web con fines de marketing similares.