Hola hacketones! Bienvenidos a un nuevo CTF hoy veremos: TryHackMe CompTIA Pentest+ Python for Pentesters
Python para pentesters
Python es probablemente el lenguaje de scripting más utilizado y práctico en ciberseguridad. Esta sala presenta ejemplos reales de scripts de Python, incluyendo descifrado de hashes, registro de pulsaciones de teclas, enumeración y escaneo.
Python puede ser la herramienta más poderosa de tu arsenal, ya que se puede usar para crear prácticamente cualquier otra herramienta de pruebas de penetración. El alcance de este módulo no nos permite profundizar demasiado en Python. Sin embargo, cubriremos varias áreas clave que te serán útiles durante las pruebas y te ayudarán a comprender mejor Python.
Completa la sala » Conceptos básicos de Python » antes de continuar, ya que esta sala no abarca el uso básico ni las características de programación del lenguaje Python.
No estamos aprendiendo a ser desarrolladores; nuestro objetivo es convertirnos en pentesters. Esta sala les brindará pautas para que puedan desarrollar y mejorar. Se presentan ejemplos de cada tipo, y ningún código debe considerarse como la única forma correcta de llegar a una solución. Nuestro objetivo es crear herramientas rápidas y efectivas que nos ayuden en nuestras tareas diarias.
A lo largo de esta sala, verá cómo:
- Utilice Python para enumerar el subdominio del objetivo.
- Construye uno simpleregistrador de pulsaciones
- Escanee la red para encontrar sistemas objetivo.
- Escanee cualquier objetivo para encontrar los puertos abiertos.
- Descargar archivos de internet
- Hachís de crack
Cualquier código que encuentre en esta sección se puede compilar utilizando herramientas sencillas como PyInstaller y enviarse al sistema de destino.
Aviso : Una lista de palabras que será útil para completar las tareas relacionadas con el sistema objetivo asociado a esta sala se adjunta a la siguiente tarea. La lista de palabras también se agregó a AttackBox y se encuentra en la siguiente ruta : /usr/share/wordlists/PythonForPentesters/wordlist2.txt
Para acceder a la máquina que inicie en esta tarea, deberá:
- Utilice OpenVPN: acceda a la página de acceso y conéctese a nuestra red mediante OpenVPN. Es importante realizar este paso antes de poder acceder al equipo.
- Utilice AttackBox (recomendado): inicie AttackBox (botón azul en la parte superior de la página) y escriba sus scripts de Python a través del navegador.
Responda las siguientes preguntas
¿Qué otra herramienta se puede utilizar para convertir scripts de Python en ejecutables de Windows?
Py2exe
Tarea 2 Enumeración de subdominios
Python nos ofrece una forma sencilla de automatizar tareas durante una prueba de penetración. Cualquier tarea que debamos realizar con regularidad merece ser automatizada. Si bien el proceso de automatización requiere un periodo de aprendizaje, los beneficios a medio y largo plazo compensan con creces.
Encontrar subdominios utilizados por la organización objetivo es una forma eficaz de aumentar la superficie de ataque y descubrir más vulnerabilidades.
El script utilizará una lista de posibles subdominios y los añadirá al nombre de dominio proporcionado mediante un argumento de línea de comandos.
A continuación, el script intenta conectarse a los subdominios y da por sentado que existen aquellos que aceptan la conexión.

Como puede ver, el script buscará un archivo llamado «subdomains.txt». La forma más sencilla es usar una lista de palabras ubicada en el mismo directorio que el script de Python, pero se puede usar cualquier lista de palabras. La lista de palabras debe contener los posibles subdominios, uno por línea, como se muestra a continuación:

No es necesario descargar la lista de palabras adjunta a esta tarea si está utilizando AttackBox, ya que se encuentra en: /usr/share/wordlists/PythonForPentesters/wordlist2.txt
Responda las siguientes preguntas
¿Qué otro protocolo podría utilizarse para la enumeración de subdominios?
DNS
¿Qué función utiliza Python para obtener la entrada desde la línea de comandos?
sys.argv
Tarea 3 Enumeración de directorio
Como suele señalarse, el reconocimiento es uno de los pasos más importantes para el éxito de una prueba de penetración. Una vez descubiertos los subdominios, el siguiente paso sería encontrar los directorios.
El siguiente código creará una herramienta sencilla para enumerar directorios.

A primera vista, sin duda notará las similitudes con el script de enumeración de subdominios. Este script utiliza un bucle for y procesa todas las respuestas «404».
.

Asegúrese de haber descargado el archivo de lista de palabras de la Tarea 2 antes de continuar con las siguientes preguntas. La lista de palabras también se agregó a AttackBox y se encuentra en la siguiente ruta : /usr/share/wordlists/PythonForPentesters/wordlist2.txt
Responda las siguientes preguntas
¿Cuántos directorios puede identificar tu script en el sistema de destino? (las extensiones son .html)
4
¿Dónde se encuentra la página de inicio de sesión?
private.html
¿Dónde encontraste un hash críptico?
apollo.html
¿Dónde se encuentran los nombres de usuario?
surfer.html
¿Cuál es la contraseña asignada a Rabbit?
LOUSYRABBO

Tarea 4 Escáner de red
Python se puede utilizar para construir un escáner ICMP (Protocolo de mensajes de control de Internet) simple para identificar posibles objetivos en la red. Sin embargo, los paquetes ICMP se pueden monitorear o bloquear, ya que la organización objetivo no esperaría que un usuario común hiciera «ping a un servidor». Por otro lado, los sistemas se pueden configurar para que no respondan a las solicitudes ICMP. Estas son las principales razones por las que se utiliza elARPEl protocolo de resolución de direcciones (ADRP) para identificar objetivos en la red local es más efectivo.
El código:


Si está utilizando AttackBox, primero deberá instalar Scapy. Esto se puede hacer fácilmente utilizando el apt install python3-scapycomando » «.

Responda las siguientes preguntas
¿Qué módulo se utilizó para crear los paquetes de solicitud ARP?
scapy
¿Qué variable tendrías que cambiar según tu bloque de IP local?
ip_range
¿Qué variable modificarías para ejecutar este código en un sistema con la interfaz de red denominada ens33?
interface
Tarea 5 Escáner de puerto
En esta tarea, analizaremos un script para crear un escáner de puertos sencillo.
El código:

Para comprender mejor el proceso de escaneo de puertos, podemos dividir el código en varias secciones:
Importación de módulos que ayudarán a que el código se ejecute:
importsys
importsocket
Los módulos también podrían importarse con una sola línea usando
importsocket,sys
Especificar el objetivo:
ip =’192.168.1.6′
Un array vacío llamado “open_ports” que se rellenará posteriormente con los puertos abiertos detectados:
open_ports =[]
Puertos que serán analizados:
ports =range(1,65535)
Para este ejemplo, hemos optado por escanear todos los puertos TCP utilizando la función range(). Sin embargo, si busca un servicio específico o desea ahorrar tiempo escaneando algunos puertos comunes, el código podría modificarse de la siguiente manera:
ports ={21,22,23,53,80,135,443,445}
La lista anterior es relativamente corta. Dado que buscamos mantener un perfil bajo, la hemos limitado a puertos que probablemente utilicen sistemas conectados a una red corporativa.
Se obtiene la dirección IP del dominio especificado como destino. El código también funciona si el usuario proporciona directamente la dirección IP.
ip =socket.gethostbyname(host)
Intenta conectarse al puerto:

Este código va seguido de un bucle for que itera a través de la lista de puertos especificada:

A continuación se muestran los resultados del script de escaneo de puertos ejecutado contra un objetivo aleatorio.

Por supuesto, admito que el banner con arte ASCII era un poco excesivo. Para usarlo, es necesario importar Pyfiglet. Si usas AttackBox, puedes instalar Pyfiglet fácilmente con el comando «apt install python3-pyfiglet».

Si desea eliminar el banner, simplemente borre las siguientes líneas:
ascii_banner =pyfiglet.figlet_format(«TryHackMe \n Python 4 Pentesters \nPort Scanner»)
print(ascii_banner)
Responda las siguientes preguntas
¿Qué protocolo probablemente utilizará el puerto TCP 22?
ssh
¿Qué módulo importamos para poder usar sockets?
socket
¿Qué función es probable que falle si no importamos sys?
sys.stdout.flush
¿Cuántos puertos están abiertos en la máquina de destino?
3
¿Cuál es el número de puerto más alto abierto en el sistema de destino?
2100

Tarea 6 Descargador de archivos
Wget enLinuxLos sistemas o Certutil en Windows son herramientas útiles para descargar archivos.
Python también se puede utilizar para el mismo propósito.
El código:

Este breve fragmento de código se puede adaptar fácilmente para recuperar cualquier otro tipo de archivo, como se muestra a continuación:

PSexec permite a los administradores de sistemas ejecutar comandos en sistemas Windows remotos. Vemos que PSexec también se utiliza en ciberataques, ya que generalmente no es detectado por el software antivirus. Puede obtener más información sobre PSexec aquí.(Se abre en una pestaña nueva)y lee esto(Se abre en una pestaña nueva)Entrada de blog sobre su uso por parte de los atacantes.
Responda las siguientes preguntas
¿Qué función se utiliza para conectarse al sitio web de destino?
requests.get()
¿En qué paso de la Cadena Unificada de Eliminación Cibernética se puede utilizar PSexec?
Lateral Movement
Tarea 7 Cracker de hash
Un hash se usa frecuentemente para proteger contraseñas y otros datos importantes. Como probador de penetración, es posible que necesites encontrar el valor en texto plano de varios hashes diferentes. La biblioteca Hash en Python te permite crear herramientas para descifrar hashes según tus necesidades de forma rápida.
Hashlib es un módulo potente que admite una amplia gama de algoritmos.

Dejando de lado algunos de los algoritmos más exóticos que verá en la lista anterior, hashlib será compatible con la mayoría de los algoritmos de hash de uso común.
Cracker de hash

Este script requerirá dos entradas: la ubicación de la lista de palabras y el valor hash.
Como probablemente ya sepa, los valores hash no se pueden descifrar, ya que no contienen el valor en texto plano. A diferencia de los valores cifrados, que se pueden «revertir» (es decir, descifrar), los valores en texto plano de los hashes solo se pueden encontrar a partir de una lista de posibles valores en texto plano. A continuación se muestra un proceso simplificado:
- Usted recupera el valor hash «eccbc87e4b5ce2fe28308fd9f2a7baf3» de una base de datos, y sospecha que es el hash de un número entre 1 y 5.
- Se crea un archivo con posibles valores en texto plano (números del 1 al 5).
- Se genera una lista de hashes para los valores de la lista de texto plano (valores hash para números entre 1 y 5).
- Comparas el hash generado con el valor hash que tienes a mano (coincide con el valor hash del número 3).
Obviamente, se puede diseñar un proceso más eficaz, pero el principio fundamental seguirá siendo el mismo.
El siguiente script sigue un enfoque similar al descrito anteriormente;
- Solicita la ubicación de una lista de palabras.
- Solicita que se descifre el hash.
- Lee los valores de la lista de palabras (uno por línea).
- Convierte valores de texto plano aMD5valores hash
- Compara el generadoMD5valor hash con el valor introducido por el usuario
Abajo: ElMD5Guion genial, incluyendo el banner de arte ASCII, totalmente opcional y de mal gusto.

Responda las siguientes preguntas
¿Cuál es el hash que encontraste durante la enumeración del directorio?
cd13b6a6af66fb774faa589a9d18f906
¿Cuál es el valor en texto plano de este hash?
rainbow
Modifica el script para que funcione con hashes SHA256.
Utilizando el script modificado, encuentre el valor en texto plano para 5030c5bd002de8713fef5daebd597620f5e8bcea31c603dccdfcdf502a57cc60
redwings



Tarea 8 registradores de pulsaciones de teclas
Los módulos nos permiten resolver problemas relativamente difíciles de forma sencilla.
Un buen ejemplo es el módulo «keyboard», que nos permite interactuar con el teclado.
Si el módulo «keyboard» no está disponible en tu sistema, podemos usar pip3 para instalarlo.
pip3 install keyboard
Usando el módulo «keyboard», las siguientes tres líneas de código serían suficientes para grabar y reproducir las teclas pulsadas:

“keyboard.record” grabará las teclas pulsadas hasta que se pulse la tecla ENTER, y “keyboard.play” las reproducirá. Dado que este script registra las pulsaciones de teclas, también se verá cualquier edición realizada con la tecla de retroceso.
Responda las siguientes preguntas
¿Qué instalador de paquetes se utilizó?
pip3
¿Qué línea de este código modificarías para evitar que el resultado se imprima en la pantalla?
keyboard.play(keys)
}
Tarea 9 Ataque de fuerza bruta SSH
El potente lenguaje Python cuenta con el respaldo de varios módulos que amplían fácilmente sus capacidades. Paramiko es una implementación de SSHv2 que será útil para construirSSHclientes y servidores.
El siguiente ejemplo muestra una forma de construir unSSHScript de ataque de fuerza bruta para contraseñas. Como suele ocurrir en programación, rara vez existe una única respuesta correcta para este tipo de aplicaciones. Como probador de penetración, tu uso de los lenguajes de programación será diferente al de los desarrolladores. Si bien ellos pueden preocuparse por las mejores prácticas y la higiene del código, tu objetivo será, con mayor frecuencia, obtener un código que funcione como deseas.
A estas alturas, ya deberías estar familiarizado con la sintaxis de «try» y «except». Este script incluye una nueva función: «def». «Def» nos permite crear funciones personalizadas, como se muestra a continuación. La función «ssh_connect» no es nativa de Python, sino que se creó utilizando Paramiko y la función «paramiko.SSHClient()».

Al leer el código, notará varios componentes distintos.
Importaciones: Importamos los módulos que utilizaremos dentro del script. Como se mencionó anteriormente, necesitaremos Paramiko para interactuar con elSSHservidor en el sistema de destino. «Sys» y «sistema operativo»nos proporcionará las funcionalidades básicas necesarias para leer un archivo del sistema operativo (nuestra lista de contraseñas en este caso). Como estamos utilizando Paramiko para comunicarnos con elSSHservidor, no necesitamos importar «socket».

Entradas: Este bloque solicitará información al usuario. Una forma alternativa de hacerlo sería aceptar la entrada del usuario directamente desde la línea de comandos como un argumento usando «sys.argv[]».

SSHConexión: Esta sección creará la función «ssh_connect». Una autenticación exitosa devolverá el código 0, y una autenticación fallida devolverá el código 1.

Lista de contraseñas: A continuación, abrimos el archivo de contraseñas proporcionado previamente por el usuario y tomamos cada línea como una contraseña para probar.

Respuestas: El script intenta conectarse a laSSHservidor y decide una salida en función del código de respuesta. Tenga en cuenta que el código de respuesta aquí es el generado por Paramiko y no unHTTPCódigo de respuesta. El script finaliza una vez que encuentra una contraseña válida.

Como verás, los scripts se ejecutan más lento de lo esperado. Para mejorar la velocidad, te recomendamos que consideres la posibilidad de usar hilos para este proceso.
Asegúrese de haber descargado el archivo de lista de palabras de la Tarea 2 antes de continuar con las siguientes preguntas. La lista de palabras también se agregó a AttackBox y se encuentra en la siguiente ruta : /usr/share/wordlists/PythonForPentesters/wordlist2.txt
Responda las siguientes preguntas
¿Qué nombre de usuario que empieza con la letra «t» encontraste antes?
tiffany
¿Cuál es la contraseña SSH de este usuario?
trustno1
¿Cuál es el contenido del archivo flag.txt?
THM-737390028
Tarea 10 Desafíos adicionales
Basándonos en lo que hemos tratado en esta sala, aquí tienes algunas sugerencias sobre cómo podrías ampliar estas herramientas o empezar a crear las tuyas propias utilizando Python:
- UsarDNSsolicitudes para enumerar posibles subdominios
- Construir elregistrador de pulsacionespara enviar las pulsaciones de teclas capturadas a un servidor que hayas construido usando Python
- Toma el banner de servicios que se ejecutan en puertos abiertos
- Rastrea el sitio web de destino para descargar los archivos de biblioteca .js incluidos.
- Intenta crear un ejecutable de Windows para cada uno y comprueba si funcionan como aplicaciones independientes en un sistema Windows.
- Implementa el uso de subprocesos en los scripts de enumeración y fuerza bruta para que se ejecuten más rápido.



Sigan entrenando, Hacketones, Nos vemos en el próximo laboratorio!!!