Categorías
automatizacion Ciberinteligencia Hacking Hacking Python

Herramientas para Hacking y Pentesting integradas en Python

Desde el día de hoy se encuentra disponible el curso online de «Herramientas para Hacking y Pentesting integradas en Python» y, como te imaginarás, el objetivo es que aprendas a integrar las herramientas de Hacking más comunes en tus scripts desarrollados con Python.

Cuando hablamos de Hacking con Python, nos referimos a utilizar librerías para llevar a cabo rutinas de Hacking y pentesting habituales, pero, seguramente, ya sabes que hacer esto no es suficiente.

¿Por qué?
Por un motivo muy sencillo y es que estás reinventando la rueda.
Piénsalo.
¿Para qué quieres programar un escáner de puertos si ya tienes Nmap?
¿para qué vas a picarte un script que haga fuerza bruta sobre «X» servicio si ya tienes THC Hydra?
¿para qué vas a crear un programa que haga spidering sobre un sitio web si ya tienes Photon o el WGET mismamente?
Si ya tienes Metasploit Framework, Empire, Cobalt Strike y una infinidad de herramientas C2, ¿para qué te vas a picar otra herramienta de este tipo que, probablemente, no aportará nada nuevo?

En realidad, no tiene mucho sentido cuando se trata de llevar a buen término una auditoría o pentest y lo sabes.

No me malinterpretes, el Hacking con Python está muy bien para escribir programas potentes orientados a la ciberseguridad, pero esto solamente te va a servir si eres desarrollador y tienes una idea clara de generar una herramienta nueva que aporte valor o una prueba de concepto para detectar y explotar alguna vulnerabilidad.

No obstante, cuando haces una auditoría, no estás pensando en generar herramientas, no tienes tanto tiempo para ello. Usarás las utilidades que ya existen y te centrarás en hacer el trabajo que se te ha encomendado.

Entonces, ¿cuál es el mejor enfoque si eres pentester?

Pues integrar las herramientas que utilizas habitualmente en tus scripts. Así de simple y complejo.

Ahora bien, no me refiero simplemente a ejecutar un «os.system» o «subprocess».

No.

En este curso aprenderás las estrategias para integrar las herramientas con scripts en Python y, probablemente lo más importante, formatear los resultados de una forma que sea fácil de manejar y sin demasiado esfuerzo.

Para que te hagas una idea, esto es exactamente lo aprenderás en este curso:

BONUS: Introducción a Python

✅ Características fundamentales de Python
✅ Introducción a la programación estructurada y orientada a objetos en Python
✅ Instrucciones disponibles en Python y módulos del SDK
✅ Creación e importación de módulos
✅ Instalación y uso de librerías
✅ Cómo adaptar los scripts a los cambios de versiones en Python

Módulo 1: Hacking con Python

✅ Introducción al curso y librerías disponibles.
✅ Creación de rutinas para Hacking web con las librerías más potentes disponibles en Python
✅ Uso en profundidad de Scapy para análisis de redes
✅ Uso de librerías como Paramiko para administración de sistemas

Módulo 2: Python con herramientas de Ciberinteligencia

✅ Integración de Python con Wappalyzer
✅ Integración de Python con Shodan
✅ Integración de Python con escáneres de puertos online
✅ Integración de Python con Wayback Machine
✅ Integración de Python con GHDB
✅ Integración de Python con Spiderfoot

Módulo 3: Python con herramientas para Hacking en redes

✅ Integración de Python con Nmap
✅ Integración de Python con Wireshark
✅ Integración de Python con TOR
✅ Integración de Python con proxychains
✅ Integración de Python con MitmProxy

Módulo 4: Python con herramientas para Hacking web

✅ Integración de Python con Nuclei Framework
✅ Integración de Python con ZAP
✅ Integración de Python con BeEF
✅ Integración de Python con Burp Suite Community
✅ Integración de Python con Burp Suite PRO
✅ Integración de Python con SQLMap

Módulo 5: Python con herramientas de criptografía, hashing y cracking

✅ Integración de Python con Haipy
✅ Integración de Python con Hashcat
✅ Integración de Python con John The Ripper
✅ Integración de Python con THC Hydra

Módulo 6: Python con herramientas para Active Directory

✅ Integración de Python con Metasploit Framework
✅ Integración de Python con Empire Framework
✅ Integración de Python con Impacket
✅ Integración de Python con Bloodhound
✅ Integración de Python con CrackMapExec

 

Como ves, es una formación muy completa, pero, al margen de la cantidad de herramientas que aprenderás a manejar y automatizar con Python, te enseñaré las estrategias que puedes aplicar a la hora de automatizar cualquier otra utilidad que tengas en tu arsenal.

Si eres pentester y quieres aprender a automatizar las herramientas que usas habitualmente, sin que aquello sea un quebradero de cabeza, honestamente pienso que este curso te aportará la información que necesitas para conseguirlo.

Si realmente estás interesado, decirte que se encuentra en formato preventa hasta el día 17 de diciembre con precio especial, después de esa fecha volverá a su precio normal.

Y por último, decirte también que esta formación se mantendrá actualizada e iré incluyendo más integraciones con otras herramientas.

Es un curso vivo, en el que verás continuamente integraciones nuevas que no se encuentran en el temario original y que podrás aprovechar en tu trabajo. Claro, solo si te apuntas.

Si esto que te he contado te interesa, apúntate y nos vemos en la plataforma THW.

¡Un saludo y Happy Hack!
Adastra.

Categorías
automatizacion devsecops Hacking Services - Software

Lista de comandos útiles con «kubectl» para administrar un cluster de Kubernetes

Vídeo en YouTube

Cuando trabajas con Kubernetes, es habitual utilizar el comando kubectl para aplicar ficheros «manifest» o consultar información sobre el cluster y sus componentes, es por ese motivo que viene bien conocer los comandos más habituales para K8S con kubectl.
Kubernetes no es una tecnología sencilla, está lejos de serlo y, en mi opinión, la curva de aprendizaje es elevada. No obstante, en los últimos años se ha convertido en el orquestador por excelencia y si te dedicas al DevSecOps, es más que recomendable conocerlo y saber cómo funciona. Aunque es una tecnología moderna, en realidad se basa en conceptos que son ampliamente extendidos en redes desde hace varios años, tales como el balanceo de carga, routing meshing y el escalado de servicios.

A continuación, enumero algunos de los comandos más útiles para administrar un cluster de K8S.

  • kubectl cluster-info → Información del cluster
  • kubectl config view → Configuración utilizada actualmente en el cluster
  • kubectl api-resources → Listado de api-resources disponibles, útil para saber qué esquemas puedes usar en tus manifiestos de K8S
  • kubectl api-versions → Listado de las versiones de APIs disponibles en tu cluster
  • kubectl get all –all-namespaces → Obtener todos los objetos disponibles en el cluster, sin filtrar por namespaces. Aporta información abundante
  • kubectl create namespace “NOMBRE_NAMESPACE” → Te permite crear un namespace nuevo
  • kubectl get namespace “NOMBRE_NAMESPACE” → Lista los namespaces disponibles o información de un namespace concreto si se indica su nombre
  • kubectl get deployment → Listado de todos los deployments disponibles
  • kubectl describe deployment “NOMBRE_DEPLOYMENT” → Enseña información detallada sobre un deployment concreto
  • kubectl edit deployment “NOMBRE_DEPLOYMENT” → Permite modificar el manifiesto del deployment especificado
  • kubectl create deployment “NOMBRE_DEPLOYMENT” → Crear un nuevo deployment
  • kubectl delete deployment “NOMBRE_DEPLOYMENT” → Eliminar un deployment existente
  • kubectl rollout status deployment “NOMBRE_DEPLOYMENT” → Enseña el estado de rollout para un deployment concreto
  • kubectl get events → Lista los eventos que se han producido recientemente
  • kubectl top pod → Enseña los POD que consumen más recursos (memoria, CPU y almacenamiento)
  • kubectl logs –since=1h “NOMBRE_POD” → Enseña los logs producidos en la última hora para el POD especificado
  • kubectl top node → Enseña los nodos de tu cluster que consumen más recursos (CPU, memoria y almacenamiento)
  • kubectl cordon node “NOMBRE_NODO” → Marca el nodo especificado como “no planificable”. Dicho nodo no recibirá cargas de trabajo por parte del Control Plane de Kubernetes
  • kubectl uncordon node “NOMBRE_NODO” → Si el nodo especificado se encontraba en estado “no planificable”, este comando lo devuelve a su estado normal. Dicho nodo estará preparado para recibir cargas de trabajo por parte del Control Plane de Kubernetes
  • kubectl drain node “NOMBRE_NODO” → Marca el nodo especificado en estado de mantenimiento

Si administras un cluster de Kubernetes, te recomiendo que tengas esta lista a mano, son comandos útiles que vienen muy bien para consultar información o realizar actividades de gestión.

Por otro lado, si lo que has leído en este post te ha sonado a chino, pero quieres aprender, te recomiendo el curso de Introducción a Kubernetes aplicado al DevSecOps.
Es una formación en la que empiezas con los conceptos básicos y la instalación de un cluster desde cero y, poco a poco, vas avanzando hasta llegar a la parte de securización propiamente dicha. Es un curso muy completo, que estoy seguro te gustará si realmente estás interesado en esta tecnología.

 


 

Recuerda que puedes registrarte en la comunidad THW: https://comunidad.thehackerway.es/registro

En este sitio web recibirás anuncios sobre ofertas de trabajo y novedades del sector, además podrás participar en los foros y ganar premios por ello.
Puedes acceder a los cursos cortos y artículos con una suscripción: https://comunidad.thehackerway.es/suscripcion
Los contenidos a los que tendrás acceso te serán útiles para comprender por qué no consigues trabajo en el sector o mejoras profesionalmente y, por supuesto, proponerte ideas para mejorar esa situación.

Por otro lado, también tienes todas las formaciones y packs de The Hacker Way. Las mejores formaciones en castellano que podrás encontrar. Y no lo digo yo, puedes ver las reseñas en el sitio web. Más de 500 alumnos han aprovechado los cursos online en THW y tú también podrías ser uno de ellos: https://thehackerway.es/cursos

¡Un saludo y Happy Hack!
Adastra.

Categorías
automatizacion devsecops Hacking Networking Services - Software

5 plugins imprescindibles para administrar y securizar Kubernetes

Demostración en vídeo de este post:

En el post anterior sobre cómo administrar tu cluster de Kubernetes con Krew, he explicado el uso de este gestor de complementos en K8S y ahora, en este post, vamos a ver 5 plugins que considero imprescindibles para la administración y securización de un cluster.
Sin más preámbulos, son estos:

1- RBAC-Tool

Cuando se trata de la gestión de accesos mediante roles (Role-Based Access Control), contar con esta herramienta resulta fundamental. El motivo de esto, es que la gestión de estos objetos se puede complicar mucho en la medida en la que el cluster va creciendo. Gracias a este complemento, se simplifica muchísimo la creación y gestión de políticas RBAC en el cluster de K8S.
Con RBAC-Tool, se pueden realizar consultas sobre «quién puede» acceder a los recursos del entorno y verificar si estos accesos son correctos, además, cuenta con una opción para generar una imagen en formato PNG con todas las políticas de seguridad que se han aplicado en el entorno.

2- Access-Matrix

Se trata de otro complemento que se puede instalar fácilmente con Krew y que permite generar una matriz con los recursos a los que se puede acceder en un namespace. Genera una tabla que indica el nombre, clase, namespace y CRUD para el recurso indicado. De esta manera, es posible visualizar si el usuario con el que se ejecuta el comando tiene más permisos de los que debería. Se puede ejecutar sobre un namespace concreto y se puede filtrar por tipo de recurso y «verb», que es la operación que nos interesa consultar (create, get, list, watch, update, etc).

3- np-viewer

Es una herramienta que permite visualizar la topología red de un clúster de Kubernetes. Ejecutando este complemento se pueden ver las conexiones entre pods, servicios y otros recursos dentro de un clúster en un formato gráfico.

Dado que la información que enseña es muy concisa, ayuda a comprender y visualizar como se comunican los PODs dentro de un cluster, independiente del complemento CNI utilizado.
Un beneficio de seguridad del complemento np-viewer es que ayuda a solucionar problemas de red dentro de un clúster. Por ejemplo, si hay problemas de conectividad entre pods o servicios, este  complemento ayuda a detectar dichos problemas ya que enseña las conexiones existentes entre esos recursos y las políticas de red aplicadas.

4- ksniff y capture

Ksniff sirve para capturar y analizar el tráfico de red en un clúster de Kubernetes, funciona como cualquier otro sniffer de red como Wireshark o TCPDump, con la diferencia de que se ejecuta dentro del cluster. Se puede usar para solucionar problemas de red, detectar patrones de tráfico y realizar comprobaciones de seguridad.

Con este complemento es posible capturar y analizar el tráfico sin tener que acceder directamente a los nodos de un clúster, lo cual puede ser útil en situaciones en las que no se tiene acceso directo o no se quiere trabajar sobre dichas máquinas.
Con sniff se puede mejorar la seguridad de un clúster de Kubernetes ya que permite identificar problemas y vulnerabilidades relacionadas con la red, además, a diferencia de Wireshark o TCPDump, está diseñado para entornos K8S, en donde la comunicación se puede realizar entre servicios, PODs, despliegues, etc.

Se trata de un complemento interesante, desafortunadamente, en versiones superiores a Kubernetes 1.24 no funciona correctamente.

Dado que sniff es un complemento que no funciona correctamente en versiones actualizadas de K8S, la alternativa es el complemento «capture», el cual se encarga de capturar el tráfico durante un período de tiempo determinado y, cuando dicho tiempo finaliza, genera un fichero de captura que se puede abrir posteriormente con la herramienta sysdig-inspect. No obstante, hay que tener en cuenta que para ejecutar este complemento se deben tener privilegios altos en el cluster. Una se genera el fichero por parte del complemento en el sistema host, se puede analizar con la utilidad sysdig-inspect, lo cual se puede hacer fácilmente levantando un contenedor Docker de la siguiente forma

docker run -d -v /path/to/captures:/captures -p8080:3000 sysdig/sysdig-inspect:latest

5- Stern

Se trata de un complemento de kubectl que funciona de manera muy similar a ‘tail -f’ en Linux. A diferencia de kubectl log -f, que tiene algunas limitaciones, Stern permite filtrar por el ID del pod o del contenedor, además, soporta expresiones regulares.
Puede ser útil para operaciones de DevSecOps, ya que permite observar la actividad de cada uno de los componentes del cluster, como por ejemplo, los procesos de autenticación que se llevan a cabo en un tiempo determinado (por ejemplo, los últimos 20 minutos).

kubectl stern -t –since 20m auth

En el listado de complementos que se pueden instalar con Krew hay más de 200 a la fecha de redactar este post, por lo que hay bastantes más que son interesantes. En este artículo simplemente me he enfocado en aquellos que son muy útiles para las actividades de DevSecOps que se realizan sobre un cluster de Kuberntes.

Espero que te sea útil y, si conoces algún otro complemento que consideres importante o necesario para la administración de un cluster, por favor, indícalo en los comentarios.

Un saludo y Happy Hack!
Adastra.

Categorías
automatizacion devsecops Hacking

Cómo administrar tu cluster de Kubernetes con Krew

Demostración en vídeo de este post

Kubernetes no es una tecnología fácil de dominar, por ese motivo resulta conveniente primero, aprender muy bien los conceptos fundamentales y su arquitectura, y luego, las herramientas que giran entorno a su ecosistema. Si has tenido que gestionar un cluster de K8S, ya sea on-premise o en alguno de los tantos proveedores en la nube que se encuentran disponibles, lo más probable es que hayas tenido que trabajar con «kubectl», es la herramienta por excelencia para hacer cualquier tipo de operación en Kubernetes.

Aunque el comando kubectl funciona estupendamente y es fundamental aprender a usarlo, para ciertas operaciones se queda corto y es por ese motivo que en esta ocasión quiero hablaros de Krew.
En cualquier sistema basado en Linux has utilizado gestores de paquetes como «apt», «yum», «packman» o «apk», son utilidades que te permiten gestionar software. Krew funciona igual que estas utilidades pero para gestionar plugins de Kubernetes. Te permite instalar en tu cluster de Kubernetes cualquiera de los más de 200 plugins soportados, de forma simple y rápida.
El hecho de usar Krew no significa que tengas que olvidarte de kubectl, de hecho, Krew es en si mismo un plugin que funciona sobre kubectl.

¿Cómo instalo Krew en mi cluster de K8S?

Evidentemente, el primer requisito que debes cumplir es tener un cluster de Kubernetes en ejecución y tener instalada la herramienta kubectl, si tienes esto, lo cierto es que el procedimiento que sigue a continuación es muy sencillo, basta con seguir las instrucciones que se encuentran disponibles en el «quickstart» del proyecto, que puedes consultar aquí

En un sistema basado en Linux, basta con ejecutar el comando que ves en la siguiente imagen y luego, dependiendo de la distribución de Linux que utilices, añadir la ruta del binario en el fichero .bashrc o .zshrc

Si el proceso de instalación se ha llevado a cabo correctamente, verás en la terminal el siguiente mensaje, indicando que todo ha ido bien y que ahora puedes empezar a utilizar la herramienta por medio de kubectl

Ahora, puedes ejecutar el comando «kubectl krew» para las opciones que se encuentran disponibles en el complemento.

¿Cómo usar Krew y qué opciones se encuentran disponibles?

Su uso es muy intuitivo, basta con ejecutar  «kubectl krew» y el comando que quieres lanzar. Algunos de los más interesantes y que normalmente usarás, son los siguientes:

info: Te permite obtener información detallada de un plugin concreto
list: Te enseña los plugins instalados
update: Para actualizar la copia de complementos que se encuentra almacenada localmente. Si hay un complemento nuevo en el repositorio central, se actualiza la lista de complementos disponibles automáticamente.
upgrade: A diferencia del comando «update», con «upgrade» se realiza una actualización de todos los complementos instalados
search: Recibe como parámetro el nombre del complemento y enseña su estado (si está instalado o no).
index: Este comando permite añadir o eliminar repositorios de complementos para Kubernetes. Por defecto, la herramienta viene configurada con el indice oficial del proyecto.

Cuando usas esta herramienta, lo más habitual es listar los complementos y luego, seleccionar el que te interese para ver más detalles sobre su funcionamiento

Si ejecutas el comando «kubectl krew search» sin ningún argumento, aparecerá la lista completa de los complementos que se pueden instalar el cluster, lo cual viene bien para ver cuáles resultan interesantes en un momento dado y probarlos.

Finalmente, para instalar un complemento se ejecuta el comando «kubectl krew install <plugin>«, solamente hace falta indicar el nombre del complemento y la herramienta se encargará del resto.

Como se puede apreciar en la imagen anterior, se instala el complemento, se enseña su uso básico y a dónde dirigirse para obtener información detallada. Además, se enseña un mensaje importante, el cual indica que los complementos que se instalan desde el index oficial, son desarrollados por terceros y que el equipo de Krew no ha realizado ningún tipo de comprobación de seguridad sobre ellos, por lo que es recomendable saber exactamente qué se está instalando por motivos de seguridad. Aunque lo cierto es que muchos de los complementos disponibles en Krew son bastante conocidos y, las empresas o comunidades que los desarrollan, suelen tener precaución a la hora de crear estos componentes.
A partir de este punto, es necesario aprender a utilizar cada plugin, leer la documentación oficial y ver si realmente merece la pena tenerlo instado en nuestro cluster.
Precisamente, en el siguiente post hablaré de algunos de los complementos en K8S que son especialmente interesantes para seguridad y DevSecOps

Un saludo y Happy Hack!
Adastra.

Categorías
automatizacion Hacking Services - Software

Cómo realizar movimientos laterales con Socat – Parte 2 de 2

Demostración en vídeo del post.

Tal como he explicado en la primera parte de esta serie, es posible ejecutar Socat en sistemas Windows y Linux sin mayores dificultades. Es una herramienta potente y con muchas opciones que la hacen ideal para realizar movimientos laterales, entre otras cosas. En este artículo verás algunas otras aplicaciones que se pueden implementar con Socat.

Usa un proxy HTTP o SOCKS

En ocasiones necesitas que tus conexiones pasen por medio de un proxy, por ejemplo, cuando te conectas a la red de TOR y quieres consultar algún sitio en la darknet de dicha solución de anonimato. En estos casos, puedes usar Socat para facilitar la gestión de dicho servidor proxy. Concretamente, para poder utilizar un servidor proxy, se deben indicar las opciones SOCKS4A, SOCKS5 o PROXY. Todas ellas tienen una sintaxis común, así que se puede emplear una u otra dependiendo del tipo de servidor proxy por el que tenga que pasar el tráfico.

Como se puede observar, en la primera terminal se abre el puerto 4444 y todas las conexiones entrantes se enrutan por medio de un proxy SOCKS. El resultado en este caso, permitirá usar el proxy SOCKS de TOR en el puerto 9150 y acceder a la dirección ONION especificada. Luego, desde una segunda terminal, se puede establecer una conexión HTTP al puerto 4444 y tanto Socat como el proxy SOCKS de TOR se encargarán del resto.

Crea conexiones unidireccionales

Por defecto, las conexiones en Socat son bidireccionales entre cliente y servidor. Sin embargo, es posible que resulte conveniente cambiar este comportamiento y hacer que el tráfico viaje en un solo sentido.

En este caso, se reciben las conexiones en el puerto 3334, pero el proceso no envía ningún tipo de respuesta ya que se indicado la opción «-u».

Cifra las conexiones usando OpenSSL

Una de las características más potentes de Socat es que tiene integración con OpenSSL. Cuenta con varias opciones que permiten levantar un servidor SSL o establecer una conexión segura.

En primer lugar, es necesario generar una clave privada y su correspondiente certificado, tal como se enseña en la siguiente imagen.

A continuación, se puede usar Socat tanto para levantar un servidor SSL como para establecer una conexión segura. En ambos casos se debe usar el mismo certificado PEM.

En la primera terminal se levanta el servidor en el puerto 4443 y se indica, mediante la opción «cert», que se deben cifrar los datos con dicho certificado. Todas las conexiones entrantes, serán procesadas por el comando «/bin/bash», lo que da como resultado el comportamiento de una «bind shell».

Crea una pequeña VPN

Con Socat es posible crear un segmento de red virtual privado gracias a la opción «TUN». Si bien se trata de una opción sencilla y fácil de usar, no implementa todas las características que incorpora una VPN, aún así resulta una alternativa interesante que se encuentra disponible en Socat.

En la imagen anterior se puede apreciar el uso de la opción TUN. En la primera terminal, se levanta el puerto 7777 y se levanta la interfaz de red «9.9.9.1». En la segunda terminal, se establece la conexión a dicho puerto y se crea, en la máquina del cliente, una interfaz de red nueva con la IP «9.9.9.40». En este punto, ambas máquinas podrán establecer conexiones utilizando dichas direcciones IP, eso mientras la conexión con Socat se encuentre establecida y no se cierre la terminal.

Como has podido apreciar en estos dos artículos, esta herramienta ofrece muchas alternativas y es una buena idea conocerla en profundidad.

¿Conoces alguna otra opción o técnica interesante con Socat?
Te leo en los comentarios!

Un saludo y Happy Hack!
Adastra.

Categorías
automatizacion Hacking Services - Software

Cómo realizar movimientos laterales con Socat – Parte 1 de 2

Demostración en vídeo de este post

Socat es una herramienta muy potente que se encuentra disponible tanto en sistemas Windows como Linux. A diferencia de otras herramientas como Netcat, cuenta con muchas opciones que permiten gestionar las conexiones y, por supuesto, crear túneles y redirectores para llevar a cabo movimientos laterales.
En este post, explicaré algunos comandos útiles que te ayudarán a dominar esta herramienta y hacer un buen uso de ella.

Comandos básicos en Socat

Para empezar, es conveniente conocer algunas de las instrucciones más comunes en Socat, lo que te permitirá entender cómo funciona la herramienta.
Su sintaxis es simple, es necesario indicar dos posiciones, las cuales representan el origen y el destino, dicho de otro modo, el cliente y el servidor.

Partiendo de esta base, se pueden hacer muchas cosas, ya que la herramienta cuenta con un conjunto muy potente de opciones. Vamos a explorar a continuación, algunos comandos básicos.

Conexión desde la máquina local a un host remoto

El siguiente comando recibe texto en el flujo de entrada estándar y, a continuación, envía dicho texto al destino indicado.

Hay algunas opciones que se pueden establecer tanto en el origen como en el destino. Por ejemplo, se puede indicar un tiempo de timeout y el número de bytes que se deben leer y enviar al destino.

Crear un redirector simple

Socat permite abrir un puerto en la máquina local para que, todo el tráfico entrante en dicho puerto, sea enrutado a un destino distinto. Esto, como te imaginarás, permite crear túneles y facilita los movimientos laterales en la etapa de post-explotación. Con socat, esto se puede hacer con el siguiente comando

En el ejemplo anterior, se abre el puerto 4444 en la máquina local y, a continuación, todos los paquetes que reciba socat por dicho puerto serán enrutados al destino indicado con la opción «TCP4».

Aplica restricciones y opciones extra en los puertos

Con la opción «TCP4-Listen» es posible abrir un puerto, pero además, también se pueden indicar algunas restricciones para limitar las conexiones entrantes. Por ejemplo, se puede indicar la dirección IP o interfaz de red en la que se levantará el puerto, el usuario con el que proceso se ejecutará y si se debe hacer o no «fork» en el servidor.

En el ejemplo anterior, se abre el puerto 3000 y el proceso se ejecuta con los permisos del usuario «adastra». Además, se realiza un fork tras cada conexión, por lo que el servidor seguirá aceptando conexiones por parte de otros clientes. Finalmente, las conexiones entrantes simplemente se enrutan a «google.com».

Ejecuta comandos sobre la conexión TCP

Con Netcat es muy común utilizar la conexión TCP para ejecutar comandos en una «bind» o «reverse» shell. En Socat esto también es posible, para ello se debe usar la opción EXEC tal como se enseña en el siguiente ejemplo

El cliente simplemente establece una conexión y, cuando Socat la recibe, ejecuta el comando «/bin/bash». A partir de este punto, todas las instrucciones que envíe el cliente son interpretadas por bash y la salida se enseña en la terminal del cliente.

En este primer artículo has visto el uso básico de Socat, pero ofrece muchas más opciones interesantes que explicaré en el siguiente. Concretamente, verás cómo utilizar un proxy para tus conexiones, cifrar los datos del canal de comunicación con OpenSSL o crear una pequeña VPN. Son cosas que explicaré en la siguiente parte de esta serie.

Un saludo y Happy Hack!
Adastra.

Categorías
automatizacion Hacking Networking Services - Software

Identifica vulnerabilidades Active Directory Certificate Services (AD CS) con Certify y Certipy – Parte 2

Demostración en vídeo de este post

Certipy es una herramienta que permite enumerar las características de una instalación de AD CS (Active Directory Certificate Services). Cuenta con varias opciones y módulos, que entre otras cosas, permiten consultar las plantillas disponibles en dicho servicio y detectar vulnerabilidades. Para utilizar esta herramienta, a diferencia de Certify, es necesario instalar el programa en la máquina local del atacante y contar con un usuario de dominio. En el caso de Certify, es necesario subir el binario a la máquina comprometida y a continuación, ejecutar el programa. Esta forma de trabajar puede traer algunos problemas, especialmente en entornos muy controlados en donde se analiza todo lo que se escribe en disco y, evidentemente, al subir un binario como el de Certify, se pueden producir alertas y un AV detectaría el binario como una muestra maliciosa. Con Certipy, al ser una herramienta que se ejecuta desde la máquina del atacante, no hace falta subir nada a las estaciones de trabajo o controladores de dominio, solo se necesita un usuario válido.

El proceso de instalación es simple, se puede hacer directamente con PIP o realizando la instalación con el script «setup.py». Por otro lado, algunas de las opciones que soporta son las mismas que tienen los scripts en Impacket, esto se debe porque es una de las librerías que utiliza esta herramienta.

Las operaciones básicas que admite esta herramienta son: Find, Request Auth, Cert, Forge y PTT. Tiene otras opciones, pero estas son las más interesantes

Búsqueda de plantillas

El primer comando que se suele utilizar es «find», el cual permite enumerar las plantillas que se encuentran disponibles en el servicio de AD CS. Por defecto, es capaz de generar ficheros en formato TXT, JSON y ZIP, este último, compatible con BloodHound, de tal manera que es posible subirlo a dicha herramienta y visualizar sus contenidos de forma visual.

Peticiones de certificados

Si se ha conseguido un listado de plantillas, lo más común es solicitar certificados al servicio de AD CS. Con esta herramienta, es posible solicitar, recuperar y renovar certificados. Para ello, es necesario utilizar la opción «req» disponible en la herramienta.

A continuación, dicho certificado generado se puede emplear para llevar a cabo el proceso de autenticación.

Autenticación con un certificado PFX

Con la opción «req» se ha podido obtener un certificado, ahora puede usarse la opción «auth» para utilizar la extensión PKINIT de Kerberos o el protocolo Schannel para llevar a cabo el proceso de autenticación. En el caso de Kerberos, se podrá obtener un ticket TGT y el hash NT para el usuario con el que se ha generado el certificado, mientras que con Schannel, se abrirá una conexión con el servicio LDAPS para generar una shell interactiva con un conjunto de comandos LDAP limitados.

Generación de «Golden Certificates»

Es un ataque similar al de «Golden Ticket» para Kerberos, con la diferencia de que en este caso, un atacante cuenta con el certificado de la CA y su clave privada. Con estos elementos podrá crear certificados de autenticación para cualquier usuario del dominio. Si se tiene acceso a una cuenta con privilegios elevados, por ejemplo, la cuenta del administrador, será posible recibir el certificado y la clave privada de la CA de forma automática utilizando el parámetro «-backup».

Como se puede ver en la imagen anterior, se almacena todo, el certificado y la clave privada, en un fichero cuyo formato es PFX.

Con esto es suficiente para ejecutar nuevamente la herramienta con el parámetro «forge».

Como se puede apreciar, una vez generado el certificado para el usuario especificado, se puede realizar el proceso de autenticación y, en este caso, la herramienta devolverá el hash NT de la cuenta y un ticket TGT que podrá ser utilizado posteriormente.

Estas son las opciones más interesantes que se encuentran disponibles en la herramienta. En mi opinión, resulta más interesante que Certify dado que no tienes la necesidad de ejecutar nada en una estación del trabajo unida al dominio, solo necesitas tener conectividad con un DC y un usuario. Además, del mismo modo que Certify, Certipy soporta las técnicas de elevación de privilegios por medio de ADCS descritas en el paper «Certified Pre-Owned – Abusing Active Directory Certificate Services» de Will Schroeder y Lee Christensen.

Te invito a que pruebes esta herramienta en tu entorno, merece mucho la pena.

Un saludo y Happy Hack!
Adastra.

Categorías
automatizacion Hacking Hacking Python Services - Software

Cómo usar Shodan desde tus scripts en Python

Demostración en vídeo de este post

Como seguramente ya sabes, existen cientos de librerías en Python orientadas al pentesting y, casi todas ellas, son estupendas. En otras ocasiones te he hablado sobre cómo integrar Python con Nmap y otros posts relacionados con este lenguaje de programación. En esta ocasión, te enseñaré cómo puedes integrar toda la potencia de Shodan en tus scripts Python. En realidad, el procedimiento no es nada complicado, solamente necesitas tener instalado el SDK de Shodan para Python y una cuenta en dicha plataforma. Con eso, será suficiente para que puedas empezar a utilizar la API del SDK y realizar todo tipo de consultas. Para realizar búsquedas en Shodan, existen una serie de filtros que puedes utilizar desde la aplicación web o desde tus scripts. Algunos de dichos filtros son los siguientes

  • city: En los resultados de la búsqueda, solamente aparecerán aquellos que corresponden con la ciudad indicada.
  • country: En los resultados de la búsqueda, solamente aparecerán aquellos que corresponden con el país indicado.
  • geo: Permite encontrar los dispositivos que se encuentran en el radio definido por la latitud y longitud indicada.
  • hostname: En los resultados de la búsqueda, solamente aparecerán aquellos que corresponden con el nombre de dominio indicado.
  • net: Permite realizar búsquedas dirigidas a segmentos de red concretos.
  • os: Permite filtrar los resultados con un sistema operativo determinado.
  • port: Permite filtrar los resultados con un puerto determinado.

Son solamente algunos de los filtros más comunes, pero como siempre, lo mejor es leer la documentación https://www.shodan.io/search/filters 

Como se ha comentado antes, para utilizar la API es necesario tener una cuenta de usuario y de esta forma obtener una Developer Key. El uso de las características básicas de Shodan no supone ningún coste para un desarrollador, sin embargo existen add-ons que no son gratuitos pero que incorporan características muy interesantes, como por ejemplo la capacidad de realizar búsquedas específicas para servicios como Telnet o HTTPS, acceso a todos los filtros disponibles desde la API y acceso sin restricciones a los resultados de las consultas.
Se trata de características que no son nada despreciables y que pueden ser adquiridas por un precio razonable.

Para descargar e instalar la librería de Shodan para Python se sigue el mismo patrón que muchas de las librerías disponibles para este lenguaje. Es posible hacerlo utilizando easy_install, pip o directamente ejecutando el script setup.py con el argumento install. La librería se encuentra en el repositorio PYPI

Para usar la API de Shodan debes crear una instancia de la clase shodan.Shodan especificando como único argumento una Developer Key válida que se encuentra asociada a una cuenta de usuario.

En el siguiente script se puede apreciar el uso básico de Shodan, en donde se obtiene un objeto del tipo shodan.Shodan y con este, se realiza una búsqueda abierta con una palabra introducida por parte del usuario. Finalmente, el script enseña el número total de coincidencias con el filtro indicado y los 10 primeros registros en la terminal.

Lo cierto es que la librería, como tal, cuenta con pocas más opciones. Es sencilla y te permite realizar búsquedas en Shodan. En otras palabras, cumple con el objetivo para el que fue creada.

A partir de la información que te devuelve Shodan, puedes, por ejemplo, utilizar otras librerías y herramientas disponibles para Pentesting y Hacking en Python, las cuales te permitirán crear utilidades muy potentes y que te ayudarán a automatizar el trabajo.

Si te ha parecido interesante, te leo en los comentarios.

Un saludo y Happy Hack.
Adastra.

 

Categorías
automatizacion Ciberinteligencia Hacking Services - Software

Aprende a aplicar técnicas OSINT en Instagram con OSINTGram

Demostración en vídeo de este post:

Una de las cosas que más me piden, desafortunadamente, es sobre cómo «jakear» facebook, instagram, etc. Lo cierto es que muchas veces se trata de troles que quieren hacerte perder el tiempo, en mi caso no dedico ni un solo segundo en contestar a este tipo de solicitudes, simplemente paso completamente y dado que se aburren al no recibir respuesta, no vuelven a contactar. No obstante, sí que es cierto que cuando nos referimos a las técnicas de investigación OSINT sobre redes sociales estamos hablando de algo completamente distinto y por supuesto, mucho más interesante. Hace algún tiempo he explicado en un post sobre OSINT que gracias a las APIs disponibles en servicios como Twitter o Facebook, es posible automatizar la recolección de información y obtener detalles sobre cuentas concretas. Con este tipo de componentes, es posible llevar a cabo procesos de OSINT completos y precisamente por ese motivo, existen utilidades específicas que se aprovechan de la potencia de estos servicios para extraer toda la información posible de una cuenta. En este caso explicaré OSINTGram y cómo esta pequeña utilidad escrita en Python es capaz de sacar todo tipo de información de una cuenta en Instagram.

Instalación y uso de OSINTGram

En primer lugar, la herramienta se puede instalar manualmente descargando el contenido que hay en el repositorio y ejecutando el programa «main.py» o por medio de Docker. Cualquiera de las dos opciones es fácil y rápida, tal como se explica en la documentación disponible del proyecto.

Antes de empezar a usarlo, es necesario establecer un nombre de usuario y contraseña para una cuenta de Instagram. Esto es necesario ya que para usar los servicios disponibles en la API Rest de Instagram, el usuario debe estar autenticado. Dichos valores deben indicarse en el fichero de configuración ubicado en <OSINTGRAM_HOME>/config/credentials.ini en los campos correspondientes. Evidentemente, NO es recomendable dejar las credenciales en dicho fichero ya que supondría una fuga de información en tu sistema.

A continuación, se puede ejecutar la herramienta rápidamente sin ningún parámetro especial, simplemente indicando la cuenta de Instagram que pretendes analizar.

Como se puede ver en la imagen anterior, lo primero que hace la herramienta es utilizar las credenciales que se han indicado en el fichero «credentials.ini» para autenticarse y a continuación, enseña el identificador de la cuenta objetivo.

A partir de éste punto, se pueden ejecutar el comando «list» para enseñar todos los comandos disponibles en la herramienta.

Simplemente con leer la descripción de cada comando es suficiente para saber qué es lo que hace. Como se puede apreciar es muy intuitivo y fácil de utilizar. Algunos de los comandos disponibles permiten descargar información, como por ejemplo imágenes o «stories», toda esta información quedará almacenada en un directorio llamado «output». Si la instalación de la herramienta ha sido manual y se está ejecutando directamente el script Python, dicho directorio se encuentra ubicado en la misma ruta desde donde se ejecuta el script. Si la instalación se ha basado en un contenedor Docker, a la hora de crear dicho contenedor ha sido necesario indicar la ruta donde se encuentra el directorio de salida mediante un volumen Docker.

Algunos comandos que pueden ser especialmente interesantes para OSINT se listan a continuación:

addrs: Permite obtener las direcciones registradas en las fotos publicadas por el objetivo

info: Devuelve la información que se encuentra publicada en el perfil del usuario objetivo.

likes: Devuelve el número total de likes en los posts que se han publicado en la cuenta

wtagged y wcommented: Enseña las cuentas que han etiquetado o comentado alguna publicación de la cuenta objetivo

captions: Enseña en orden cronológico, las descripciones que se han puesto en cada una de las publicaciones de la cuenta objetivo

fwersemail, fwingsemail, fwersnumber, fwingsnumber: Por último, estos comandos son útiles en OSINT ya que permiten recolectar emails y los números de teléfono  de los seguidores y a los que sigue la cuenta utilizada para las consultas. Evidentemente, para obtener dicha información, es necesario que se encuentre disponible públicamente.

Sin duda OSINTGram destaca por su simplicidad de uso y la cantidad de información que puede aportar. ¿Qué tal te ha parecido, conoces alguna otra herramienta similar?, te leo en los comentarios 🙂

Un saludo y Happy Hack!
Adastra.

Categorías
automatizacion Hacking Networking Services - Software

Cómo utilizar Docker sin conocimientos previos – Parte 1 de 2

Demostración en vídeo de este post

Como seguramente ya sabes, Docker es una tecnología que se ha ido popularizando en los últimos años y actualmente, no es raro encontrarse con cientos de proyectos en GitHub que tienen ficheros Dockerfile para la creación rápida de imágenes. De hecho, hace pocos días has podido leer un post en éste blog sobre un proyecto llamado KrakenRDI, en dicho post te explicaba que es un proyecto que permite montar en cuestión de minutos, un entorno de pentesting personalizado sin tener que sacrificar varios gigas de disco duro y otros recursos del ordenador. Este es solo un ejemplo del poder que tiene Docker y el motivo por el que es una tecnología tan bien posicionada y valorada actualmente, especialmente cuando se habla de equipos de desarrollo, DevOps y DevSecOps.

No obstante, sois muchos los que me preguntáis sobre cómo utilizar Docker y por este motivo me he animado a compartir un par de posts en donde hablaré sobre lo mínimo que necesitas saber para utilizar esta tecnología eficazmente. Verás que no es muy complicado.

Imágenes y contenedores en Docker.

Si no tienes ni idea sobre cómo funciona Docker, creo que este sería el punto de partida adecuado. Las imágenes y contenedores constituyen el corazón de Docker y aunque son términos independientes, tienen una estrecha relación. Una imagen declara cada una de las características necesarias para que una aplicación o conjunto de aplicaciones funcionen correctamente, por ejemplo, se puede indicar sobre qué tipo de sistema se debe ejecutar, librerías necesarias, servicios, ficheros, etc. Como tal, la imagen representa «una plantilla», un elemento reutilizable en cualquier sistema que tenga una instalación de Docker. En este sentido, encontramos el servicio de Docker Hub, en donde miles de empresas, equipos e investigadores, publican sus propias imágenes para que puedan ser descargadas por cualquiera en Internet.

Ahora bien, la imagen no es suficiente. Como he mencionado antes, representa una plantilla pero para que haya «algo» que le dé sentido, es necesario crear una unidad de ejecución y es aquí en donde entra el concepto de contenedor.
Un contenedor no es más que un espacio en donde se incluyen todos los elementos declarados en la imagen, incluyendo software y todos los ficheros necesarios. Para que te hagas una idea, un contenedor es como una casa prefabricada, en donde solo tienes que «desplegar» los elementos que están definidos en la imagen y esto en Docker, es un proceso que se realiza muy rápidamente (cuestión de segundos normalmente).

Aquí ves un ejemplo de lo que es una imagen y la creación de un contenedor partiendo de ésta.
El comando «docker pull centos:latest» permite descarga la imagen indicada (centos:latest) del repositorio de imágenes configurado en el servicio de Dockerd, el cual por defecto es Docker Hub. A continuación, el comando «docker run –name containercentos –rm -it centos bash» permite crear un contenedor partiendo de dicha imagen llamado «containercentos» y además, se eliminará de forma automática cuando se deje de utilizar, es interactivo y se ejecuta el comando «bash» para poder entrar en el contenedor creado.

En este caso se parte de una imagen previamente existente en el repositorio de DockerHub, pero también puedes crear tus propias imágenes partiendo de un fichero «Dockerfile», en donde puedes declarar las instrucciones necesarias para el diseño de la imagen, aunque esto es algo que te contaré en otra ocasión.

En el siguiente post explicaré cómo funcionan las redes y volúmenes en Docker, así como algunos otros ejemplos para empezar a usar Docker rápidamente.

Un saludo y Happy Hack!
Adastra.