Categorías
Ciberinteligencia Hacking Hacking Python Networking Services - Software

10 Herramientas para OSINT y Ciberinteligencia que te podrían interesar

Demostración en vídeo de este post

En el post anterior se ha hablado sobre Spiderfoot y los beneficios que aporta, sin duda es una herramienta a tener en cuenta en el mundo de OSINT y la ciberinteligencia, sin embargo no es la única y existen otras muy interesantes para llevar a cabo procesos de investigación, los cuales como ya sabéis, son vitales en las primeras etapas de una campaña de Red Team. En este post voy a mencionar 10 de estas herramientas.

1. OsintFramework: https://osintframework.com/

No se trata de una herramienta como tal, sino de una colección muy completa de recursos que son empleados para actividades de ciberinteligencia y OSINT. Lo mejor de todo es que cada servicio y herramienta que se encuentra registrada en OSINTFramework, se enseña de forma ordenada, por medio de una estructura en forma de árbol.

2. Maltego: https://www.maltego.com/

Es probablemente la herramienta más conocida en el mundo de la ciberinteligencia y OSINT. Es capaz de recolectar información en fuentes abiertas a partir de elementos básicos como dominios, direcciones IP, emails, entre muchas otras cosas. Sobre cada uno de estos elementos se pueden ejecutar transformaciones, que son rutinas que permiten su análisis. Precisamente, la potencia de esta herramienta viene dada por las transformaciones que se pueden instalar, ya que ellas permiten recolectar tanta información como sea posible partiendo de un tipo de dato concreto. Además, es una herramienta que enseña los resultados de forma visual y permite ver las relaciones entre los diferentes items de información recolectados. Cuenta con una versión comunitaria y otras versiones que son comerciales y que están orientadas a casos de uso concretos.

3. iKy:  https://github.com/kennbroorg/iKy

La descripción del proyecto en GitHub  indica en pocas palabras lo que hace exactamente esta herramienta. Partiendo de un correo electrónico, se encarga de recolectar información en fuentes abiertas y enseña los resultados en una interfaz grafica. Cuenta con varios componentes que se deben instalar de forma separada, entre los que se incluyen algunas dependencias de Python, redis y nodejs, no obstante en el repositorio hay un docker-compose que se puede emplear para levantar los contenedores necesarios y utilizar la herramienta rápidamente.

4. TheHarvester: https://github.com/laramies/theHarvester

Es una herramienta clásica y ampliamente difundida para actividades de OSINT. Permite recolectar información de un dominio concreto partiendo de lo que se puede extraer de búsquedas en servicios como Google, Yahoo, Bing, entre otros. La información se puede visualizar en la terminal o guardarla en un fichero.

5. Recon-NG: https://github.com/lanmaster53/recon-ng

Esta herramienta recuerda a otras como Metasploit Framework en donde se puede interactuar con un interprete de comandos, cargar módulos y ejecutarlos con una serie de opciones. Actualmente cuenta con cientos de módulos para realizar todo tipo de operaciones de reconocimiento sobre fuentes abiertas de forma pasiva, semi-pasiva o activa.

 

6. Dmitry: https://github.com/jaygreig86/dmitry

Es una utilidad bastante sencilla que sirve para recolectar información WHOIS, DNS y realizar consultas a buscadores como Google de forma rápida. Puede ser conveniente utilizarla para obtener información preliminar de un objetivo antes de utilizar otras herramientas más potentes como las que se han mencionado anteriormente.

7. Photon: https://github.com/s0md3v/Photon

Es común tener que analizar sitios web que en ocasiones, están compuestos por cientos de páginas web. Photon funciona como crawler muy liviano que realiza el proceso completo de búsqueda y extracción de información de las páginas web (web scraping)

8. OSRFramework: https://github.com/i3visio/osrframework

Este proyecto incluye un conjunto de scripts desarrollados en Python para OSINT, con la ventaja de que se pueden ejecutar de forma separada para una mejor comprensión de la información capturada que aportan.

9. Sherlock: https://github.com/sherlock-project/sherlock

Aunque es una herramienta sencilla, en ocasiones puede ser útil. Sherlock se encarga de buscar nombres de usuario en redes sociales y enseña en la terminal los resultados de forma rápida y con un sistema de colores que facilita la lectura.

10. GHDB: https://www.exploit-db.com/google-hacking-database

Google Hacking Database es un servicio que se encuentra disponible en el sitio de exploit-db.com y cuenta con un buen conjunto de patrones de búsqueda basados en dorks de Google para encontrar información. En el sitio web es posible seleccionar diferentes categorías como servidores vulnerables, fugas de información sensible, ficheros vulnerables, mensajes de error específicos, etc.

Es un listado corto ya que existen muchas más utilidades que no están incluidas y que son estupendas, pero creo que es una buena referencia para aquellas personas que quieren empezar en el mundo de la ciberinteligencia y practicar OSINT. En otros posts hablaré en detalle sobre estas y algunas otras utilidades.

Un saludo y Happy Hack!
Adastra.

 

Categorías
Ciberinteligencia Hacking Hacking Python

Spiderfoot: Una herramienta completa para OSINT y Ciberinteligencia

Demostración en vídeo de este post

 

Si bien es cierto que existen muchas utilidades en el campo de la ciberinteligencia y OSINT, Spiderfoot sobresale por lo sencilla y completa que es. Si no la conoces, echale un vistazo al repositorio de Github y fijate en la cantidad de integraciones y complementos que tiene disponibles.

Este proyecto se encuentra desarrollado en Python y aunque se puede usar como una herramienta desde línea de comandos, la forma más cómoda de trabajar consiste en levantar un servidor web que permite realizar procesos de investigación completos. Esta herramienta es fácil de instalar, tal como se indica en la documentación oficial, solamente basta con ejecutar las siguientes instrucciones:

git clone https://github.com/smicallef/spiderfoot.git
cd spiderfoot
pip3 install -r requirements.txt
python3 ./sf.py -l 127.0.0.1:5001

No obstante, si utilizas una distribución como Kali Linux, la herramienta ya se encuentra instalada.

Una vez que se encuentra levantada, basta con abrir un navegador web y dirigirse al puerto que se ha indicado y cómo se puede apreciar en la siguiente imagen, el menú principal sólo cuenta con 3 secciones: New Scan, Scans y Settings.

 

En la sección de Settings se configuran las integraciones con plataformas de terceros, entre las que se encuentran viejos conocidos como Shodan, Hunter.io, Havebeenipwned, ipinfo.io, phishtank, Robtex, entre muchos otros. Cuenta con más de 200 integraciones con servicios disponibles en internet, algunos requieren una API key y no son gratuitos, pero también tiene otros servicios que son completamente abiertos y no requieren una cuenta para poder utilizarlos.

Dado que son muchos los servicios que se pueden integrar en una instancia de Spiderfoot, es posible importar y exportar API Keys, de esta manera si por ejemplo se tiene una instalación de la herramienta con múltiples servicios configurados y APIs establecidas, se puede exportar dicha configuración e importarla en otra instalación de Spiderfoot, así no se pierde tiempo volviendo a configurar estas integraciones.

Una vez se aplican las configuraciones que interesan para el objetivo en cuestión, el siguiente paso consiste simplemente en lanzar un escaneo y para ello, hay que dirigirse a la sección «New Scan».

El objetivo del escaneo puede ser cualquier cosa, desde un nombre dominio, una dirección IP, un email o un nombre de usuario. Además, se puede configurar el tipo de escaneo, que puede ser por caso de uso, por datos requeridos o por módulo. Lo más habitual es marcar alguna de las opciones que aparecen en «By Use Case», ya que cargan los módulos necesarios para hacer diferentes tipos de investigaciones:

  • All: Habilita todos los módulos e integraciones configuradas en Spiderfoot. Esto significa que se puede obtener mucha más información del objetivo, pero también que será un proceso lento y probablemente intrusivo.
  • Footprint: Este tipo de investigación carga aquellos módulos que permiten obtener información sobre el objetivo utilizando motores de búsqueda, procesos de crawling, identidades de usuarios, entre otras cosas. Es un tipo de investigación adecuado para obtener información sobre el entorno de red del objetivo.
  • Investigate: En este caso no se realizan tantas comprobaciones como en las anteriores, en este tipo de investigación se pretende determinar si el objetivo es una entidad maliciosa, por lo tanto busca en servicios relacionados con listas negras, sitios conocidos de distribución de malware, etc.
  • Passive: Este es el tipo de investigación más liviano de todos, está pensado para ser poco intrusivo y solamente carga  módulos para recolección de información que en condiciones normales no generan alertas en el objetivo.

Una vez seleccionado el target y el tipo de investigación que se pretende lanzar, basta con iniciar el escaneo y esperar a que Spiderfoot haga su trabajo. Los resultados se irán visualizando en la pestaña de «Scans» en donde aparece el estado de cada escaneo y se puede acceder a él con el fin de comprobar que detalles ha podido sacar.

Sin duda es una de las herramientas opensource más interesantes que existen actualmente para ciberinteligencia y OSINT, por supuesto no es la única y es una buena práctica tener conocimientos de múltiples herramientas para poder comparar resultados y hacer investigaciones mucho más completas.

En otro post mencionaré 10 herramientas de ciberinteligencia que merece la pena conocer y tener en cuenta, pero antes de eso ¿qué otras herramientas conoces que consideres que pueden estar incluidas en ese listado? puedes escribir un comentario!

Un saludo y Happy Hack!
Adastra.

Categorías
automatizacion Hacking Hacking Python Programacion

Python y Scanless: Escaneos automáticos usando servicios online

Demostración en vídeo de este post:

Una alternativa a la hora de automatizar los escaneos con Nmap es por medio de la integración entre Python y Nmap usando librerías como python-nmap, sin embargo, existen otras alternativas que también pueden ser interesantes. En este post vamos a hablar de Scanless.

Tal como se describe en el proyecto de Github, se trata de una herramienta que se puede ejecutar desde una terminal o como una librería para Python y utiliza servicios en Internet para ejecutar escaneos. Esto significa que se puede obtener información sobre los puertos abiertos en un objetivo concreto sin interactuar directamente con él, serían actividades semipasivas y que pueden encajar en lo que conocemos como técnicas OSINT.

A la fecha de redactar este post soporta los siguientes servicios online:

Tanto el uso de la librería como de la utilidad por línea de comandos es muy simple, en primer lugar se debe instalar con el comando «pip install scanless» y a continuación, se puede lanzar el comando «scanless» desde la terminal.

Cuenta con pocas opciones, las suficientes para poder lanzar escaneos con el servicio adecuado. Concretamente con «-l» se listan los servicios que soporta, con «-s» se puede indicar el nombre de uno de dichos servicios y con «-t» el objetivo que se pretende analizar.

Esto es todo, se ha ejecutado un escaneo utilizando la plataforma de un tercero. Además de esto, tal como se mencionada antes, scanless también cuenta con una API para Python muy simple que permite automatizar este proceso.

Como se puede apreciar, en primer lugar se importa el módulo «scanless», a continuación se crea un objeto del tipo «Scanless» y partiendo de dicho objeto, se ejecuta un escaneo con el servicio y objetivo indicados en el método «scan». El resultado es una estructura del tipo «dict», la cual permite acceder de forma ordenada a cada uno de los resultados del escaneo. Finalmente, como ocurre con todos los objetos dict en Python, se puede convertir a una estructura en formato JSON y si es necesario, enviar estos contenidos a un servicio Rest o guardarlos en una base de datos no relacional, lo importante es que ya se cuenta con la información y se puede procesar como resulte conveniente desde un script en Python.

Es una librería sencilla que ayuda en las primeras etapas de un pentest y que sin duda, se debería tener muy en cuenta en las primeras etapas de una auditoría externa. No te va a costar mucho, así que animate a probarla si no la conoces 🙂

Un saludo y Happy Hack!
Adastra.

Categorías
automatizacion Hacking

Formación de DevSecOps en THW

El mes de Julio se publicará en THW un curso sobre DevSecOps en el cual, aprenderás los fundamentos de este nuevo concepto que últimamente se está imponiendo en los procesos de construcción de software y el SDLC.
Es una formación completamente práctica en la que verás cómo encaja la seguridad en la cultura de DevOps.
Ahora mismo la formación se encuentra disponible en preventa y con un descuento de 40 euros con respecto a su valor original, solamente durante el mes de Mayo.

El DevSecOps representa la integración de la seguridad en cada una de las etapas del SDLC (Software Development Life Cicle) y a lo largo de las lecciones aprenderás los pilares del DevOps, los motivos por los que ahora se habla de DevSecOps y cómo adaptar este modelo en un equipo de desarrollo.

Algunos de los temas que se encuentran incluidos en el temario son los siguientes

  • Conceptos básicos del DevOps y DevSecOps.
  • Cómo realizar un modelado de amenazas con STRIDE y DREAD
  • Análisis de seguridad en entornos basados en contenedores
  • Configuración de Jenkins
  • Múltiples herramientas para análisis SAST
  • Múltiples herramientas para análisis DAST
  • Conceptos básicos de CI/CD
  • Análisis de vulnerabilidades en las etapas de release y deploy
  • Estrategias para la creación de pipelines seguros en Jenkins
  • Automátización de SAST por medio de pipelines en Jenkins
  • Automátización de DAST por medio de pipelines en Jenkins

Y solo por mencionar algunos de los contenidos que pueden resultar más interesantes. Es una formación compuesta por más de 9 horas de vídeo, completamente actualizada y en la que además de tener acceso a las grabaciones, también tendrás otros recursos como documentos en formato PDF y una VM con todo preparado para que puedas hacer prácticas rápidamente.
Honestamente considero que es una formación que te aportará valor profesional, especialmente si trabajas como desarrollador o administrador de sistemas. Como seguramente has podido apreciar, la cultura de DevOps en las organizaciones está evolucionando a DevSecOps (o SecDevOps, como lo quieras llamar) por lo tanto es un buen momento para entender algunas de las herramientas y técnicas que entran en juego en el DevSecOps para mejorar tus habilidades.

Un saludo y Happy Hack!
Adastra.

Categorías
Hacking Hacking Python Programacion

Integración de Python con Nmap

Demostración en vídeo de este post:

Me atrevería a afirmar que Nmap es la herramienta más difundida en el mundo del pentesting y el Hacking, gracias al tiempo que lleva en desarrollo, cuenta con funcionalidades que son ideales para las primeras etapas de una auditoría de seguridad y por lo tanto, es fundamental conocerla en profundidad. No obstante, en ocasiones resulta interesante crear scripts y rutinas que permitan automatizar la ejecución de ésta y otras herramientas y una buena forma de hacerlo es con Python que gracias al amplio conjunto de librerías existente, facilita mucho esta tarea.

En primer lugar, hay tener en cuenta que existen muchas formas de integrar un lenguaje de programación como Python (o cualquier otro) con una utilidad como Nmap, por ejemplo se podría ejecutar la herramienta desde un script con la función os.system o con Popen y luego «parsear» la salida incluida en el flujo de STDOUT, pero este enfoque puede que no sea el más limpio u optimo. Es mejor utilizar alguna librería que ya incluya estas rutinas en lugar de «reinventar la rueda» y en este sentido, tenemos python-nmap.

Uso de Python-nmap

Se puede instalar con el comando «pip install python-nmap» y a continuación, es posible utilizar su API en un script o desde el interprete de Python. Por ejemplo:

La clase PortScanner se encarga de ejecutar el comando «nmap», por lo tanto la herramienta se debe encontrar instalada en el sistema y su directorio de instalación, ubicado en la variable de entorno PATH.
Por otro lado, cuando el escaneo finaliza los resultados se almacenan en un objeto del tipo «dict» lo que facilita trabajar con los datos al encontrarse estos en una estructura ordenada. Además, un objeto del tipo PortScanner cuenta con varios métodos que ayudan a obtener información sobre el escaneo que se ha realizado

Aunque la clase PortScanner es la que se suele utilizar con más frecuencia, también es posible ejecutar el escaneo en un segundo plano mientras el script realiza otras actividades, esto se consigue con la clase PortScannerAsync

Además de las clases PortScanner y PortScannerAsync, hay otro elemento que permite ejecutar escaneos con Nmap, en este caso de forma progresiva. La clase PortScannerYield se encarga de ejecutar el escaneo con Nmap y devolver cada resultado que la herramienta va generando. Esto es especialmente útil cuando se analiza un entorno de red completo y no se quiere esperar a ver resultados hasta que el escaneo termine sino de forma progresiva en la medida en la que Nmap va generando información.

Finalmente, para acceder a los resultados del escaneo es necesario recorrer la estructura, que como se ha mencionado anteriormente, es un objeto del tipo «dict». En este punto, es necesario consultar las claves de cada sección de la estructura e ir extrayendo la información que se necesita.

Como has podido comprobar, se trata de una librería sencilla y que permite ejecutar Nmap desde cualquier script en Python, aunque python-nmap es una buena alternativa, no es la única librería que hace esto, conviene revisar el Pypi para ver otras alternativas que pueden resultar igualmente interesantes.

Un saludo y Happy Hack!
Adastra.

Categorías
Hacking Hacking Python Programacion

PyScript: Ejecuta scripts en Python en tu navegador web – Parte 2 de 2

Demostración en vídeo de este post

En el post anterior que puedes leer en el siguiente enlace, se han explicado las características de PyScript y los motivos por los que resulta un proyecto interesante, aunque aún en desarrollo y habría que ver cómo evoluciona en los próximos meses. Una de las limitaciones que tiene es que no parece contar con rutinas que permitan la carga de otras librerías diferentes a las que ya se encuentran definidas en el proyecto, algo que a la fecha de redactar este post no se encuentra documentado en ningún sitio en el proyecto. No obstante, el «core» de Python puede ser suficiente para las operaciones que se ejecutarían en el contexto de un navegador web. Precisamente con el core del lenguaje se pueden hacer muchas cosas, como por ejemplo realizar peticiones HTTP a sitios web o establecer conexiones TCP. Se trata de operaciones que habitualmente se llevan a cabo en procesos de pentesting con Python y por supuesto, se pueden probar con PyScript.

Peticiones a sitios remotos desde PyScript

En este caso, no se cuenta con librerías como requests, pero se puede utilizar el módulo «urllib» y aunque son bien conocidas sus limitaciones puede valer para hacer las pruebas. El siguiente bloque de código se incluye en la etiqueta <py-script> para comprobar si efectivamente, es posible establecer una conexión.

Como cualquier petición HTTP, requiere el establecimiento de una conexión TCP con el host destino, en el caso de la imagen anterior es httbin.org. Al intentar ejecutar este código con PyScript, ocurre lo mismo que con un runtime de Pyodide en cualquier navegador web, es decir, el navegador impide el establecimiento de la conexión tal como se enseña en la siguiente imagen.

Esto ocurre al intentar ejecutar una petición HTTP pero, ¿qué pasa si se intenta establecer una conexión TCP directa? pues más o menos lo mismo como se verá a continuación.

Reverse y bind shells desde PyScript

Se utiliza el siguiente código, el cual corresponde al establecimiento de una bindshell con Python. Es una rutina sencilla que funciona sobre cualquier sistema operativo que tenga Python instalado y en dicho escenario, el puerto indicado se abrirá sin problema, pero en este caso es el navegador web es el que debe realizar dicha operación.

Aunque el código indicado anteriormente es correcto, la operación no se puede llevar a cabo debido a las restricciones que impone el navegador web sobre el runtime de Pyodide, es decir, que no será posible abrir el puerto aunque el usuario con el que se está ejecutando el proceso del navegador tenga permisos para hacerlo.

¿Con una reverse shell ocurre lo mismo? con la explicación anterior se puede deducir que sí, pero como siempre, se debe probar por si «hay suerte» y se consigue algún resultado positivo. El siguiente código representa el payload de una reverse shell en Python muy simple, utilizando unicamente los elementos disponibles en la librería estándar de Python.

Antes de ejecutar este script en la página HTML, sería necesario levantar el puerto 4444 en la máquina local, usar Netcat será suficiente y lo más sencillo. A continuación, tal como se puede comprobar en la siguiente imagen, se produce un error ya que en este caso, aunque se establece una conexión HTTP, el runtime de pyodide se encarga de realizar una petición  WS (Web Sockets) al destino y evidentemente, Netcat no está preparado para tratar adecuadamente dicha petición, simplemente enseña por la terminal la petición HTTP y sus correspondientes cabeceras.

En este punto parece claro que si se desea establecer una reverse shell es necesario crear un servidor que admita peticiones con WebSockets y un cliente personalizado, algo que por supuesto, es posible hacer en Python con la librería «websockets». En el lado del servidor sería tan simple como instalar con «pip install websockets» y junto con el módulo «asyncio» levantar el handler correspondiente, sin embargo, también habría que crear el cliente, algo que con Javascript se puede hacer sin ningún problema ya que está preparado para ello, pero en este caso concreto la API core de Python no cuenta con librerías especificas para crear este cliente, es necesario instalar el paquete «websockets» y como ya se ha mencionado anteriormente, de momento PyScript no permite la instalación de otros módulos distintos a los que ya vienen incluidos en el propio proyecto.
En conclusión, aunque puede parecer se contará con todo el poder de Python al navegador web y será posible ejecutar rutinas complejas, con simplemente un fichero HTML, en la práctica no resulta tan sencillo.  En este post se han enumerado algunas de las pruebas realizadas, sin embargo en el vídeo que tienes justo al inicio de este post también se explican algunas otras pruebas que han dado resultados muy parecidos. Como decía antes, hay que ver cómo evoluciona el proyecto y la aceptación que tiene por parte de los desarrolladores de Python, es posible que nos encontremos ante una alternativa interesante, pero desde luego aún es pronto para saberlo.

Un saludo y Happy Hack!
Adastra.

Categorías
Hacking Hacking Python Programacion

PyScript: Ejecuta scripts en Python en tu navegador web – Parte 1 de 2

Demostración en vídeo de este post.

Hace unos días, Anaconda ha publicado en la PyCON2022 un proyecto en el que han estado trabajando últimamente y que finalmente, está publicado en su repositorio de GitHub, se trata de PyScript.
A grandes rasgos, es un proyecto que pretende la ejecución de código Python en el navegador, simplemente con una página HTML, de la misma manera que lo hace Javascript. Aunque la idea es interesante, de hecho no es novedosa. Se basa en otras tecnologías existentes como Pyodide y WASM (Web Assembly) pero aún así, ha sido uno de los proyectos más sonados en dicho evento, algo que ha despertado mi curiosidad y he querido documentarme un poco más para probarlo.

Observaciones sobre el funcionamiento de PyScript.

Después de fijarme un poco en código y leer la documentación que se encuentra actualmente disponible, da a entender que es posible llevar los scripts que se pueden ejecutar en una terminal con Python al navegador web, lo cual no es del todo cierto. En primer lugar, como se ha dicho anteriormente, depende de otras tecnologías como Pyodide que ya tiene sus limitaciones, además, si se pensaba que con este proyecto se puede sustituir a Javascript, nada más lejos: PyScript se basa en Javascript. De hecho, para poder utilizar la etiqueta <py-script> e incluir código Python es necesario descargar un fichero JS y opcionalmente una hoja de estilos CSS.
Si bien es cierto que hay muchas rutinas en Python que son compatibles y que se pueden ejecutar, hay otras que simplemente no tienen cabida cuando se lanzan en un navegador web, en primer lugar porque es el propio navegador el que se encarga de limitar lo que pueden hacer los scripts en su entorno, lo que tradicionalmente se conoce como «sandboxing» y que es ampliamente conocido por los desarrolladores de Javascript y en segundo lugar, porque el ecosistema de Python es simplemente enorme y hay librerías que no se podrán usar con PyScript dada su infraestructura.

Ejemplos prácticos de su uso.

En primer lugar, para entender cómo funciona este proyecto se observan las peticiones HTTP y los recursos que descarga PyScript cuando se ejecuta en el navegador web. Como era de esperarse, una de las primeras cosas que hace consiste en crear un runtime de pyodide, algo que durante las pruebas realizadas, ha tardado cerca de unos 3 segundos, lo cual para ser un entorno local puede parecer bastante y de hecho, se aprecia que la ejecución de instrucciones Python sencillas, sin ninguna complejidad y completamente inocuas, tardan en torno a los 4.5 segundos en ejecutarse y enseñar la salida correspondiente en el navegador. En la siguiente imagen se puede apreciar cada una de las peticiones HTTP que ejecuta la librería

Como se puede ver, el script descarga pyodide_py.tar, descomprime y ejecuta pyodide.asm.js. A continuación, descarga el fichero distutils.tar que contiene los WHL necesarios que ayudarán a tener un entorno de ejecución mínimo.

Durante las pruebas, se puede apreciar que su instalación no tiene ninguna dificultad, basta simplemente con descargar el script pyscript.js en el servidor web local o utilizar la versión que se encuentra disponible en GitHub y a continuación, solo hace falta utilizar la tag <script> en la página HTML. Se pueden incluir dichos elementos en un servidor web Apache o Nginx, por ejemplo, y funciona sin prácticamente ninguna configuración especial. 

Esta página HTML se enseñará cuando se cargue el script de la imagen anterior y aunque en la documentación disponible del proyecto se indica que las pruebas solo se han realizado sobre Chrome, también funciona sobre Firefox sin problema.

El módulo «OS» en Python se encuentra disponible en diferentes versiones del lenguaje, tanto en la rama 2.7 como en la 3.x, por lo tanto tiene sentido que se ejecute con normalidad. Merece la pena comprobar qué error se produce si se intenta cargar una librería que no se encuentra disponible en el SDK de Python por defecto

Como se esperaba, se produce un error. Sin embargo en este punto es necesario preguntarse: ¿cómo puedo importar librerías en el entorno en cuanto se carga la página HTML? Bien, de momento lo que se encuentra disponible en la documentación oficial y los ejemplos disponibles, no aparece ninguna referencia a la instalación de librerías externas, como por ejemplo Scapy.

Es cierto que el proyecto incluye librerías habituales en el mundo de Data Science como es el caso de Numpy, Pandas o Matploitlib, las cuales se pueden cargar con la tag <py-env> pero no se aprecia ninguna referencia a la posibilidad de importar otras librerías externas.

Ahora, como cualquier pentester, una de las primeras cosas que se piensa es: ¿cómo se puede utilizar esta tecnología para conseguir algún tipo de «ventaja» desde el punto de vista de la seguridad ofensiva?. Lo primero que hay que tener en cuenta es que seguimos con el modelo cliente-servidor. Aunque Python sea muy potente, no deja de ser un entorno que depende de una plataforma base, ya sea el sistema operativo del servidor o el navegador de un cliente y por lo tanto, no tiene más remedio que «cumplir» con lo que dicta el entorno. Dicho esto, ya nos hacemos una idea de las fuertes restricciones que pueden haber en el contexto de ejecución de un navegador, lo mismo que ocurre con Javascript, sin embargo es algo que se analizará con más detenimiento en la segunda parte de este post.

Un saludo y Happy Hack!
Adastra.

 

Categorías
Hacking

Sorteo de 2 entradas para el evento OSINTomático

Osintomático en La Nave de Madrid

Los días 20 y 21 de Mayo se celebra la primera edición del evento «OSINTomático» https://osintomatico.com/, un evento presencial en Madrid y cuya temática es la aplicación de técnicas OSINT e ingeniería social. En esta ocasión contamos con 2 entradas que puedes obtener si participas en un sorteo que hemos preparado. El proceso es muy simple, puedes escribir un mensaje a info@thehackerway.com indicando que quieres participar en el sorteo y contestando a la siguiente pregunta:

¿Cuál crees que es la herramienta, utilidad o técnica que no le puede faltar a un especialista OSINT?

Se eligen las dos mejores respuestas y dichas personas se llevan las entradas. Así de simple. Si te interesa de la ingeniería social, OSINT, ciberinteligencia y quieres llevarte una entrada para asistir al evento, completamente gratuita, no dudes en participar. Anunciaremos a los ganadores por Twitter, LinkedIn y Telegram

Un saludo y Happy Hack!
Adastra.

Categorías
Explotación de Software Hacking Services - Software

Spring4Shell: Vulnerabilidad de RCE en Spring Framework

Demostración en vídeo de este post

 

La vulnerabilidad conocida como Spring4Shell ha aparecido hace algunas semanas y según su descripción, le permite a un atacante ejecutar código Java arbitrario en una aplicación que utilice alguna de las versiones afectadas de Spring Framework. Su CVE es el CVE-2022-22963 y tiene asignado un score de 9.8 y aunque ya se encuentra parcheada a partir de la versión 5.3.18 de Spring Framework (core) y la versión de 2.6.6 de Spring Boot, es probable que afecte a aplicaciones Java/J2EE que aún no han actualizado las dependencias de sus ficheros Gradle o POM. Lo más curioso de esta vulnerabilidad es que no es nueva, se trata de un bypass de las medidas de seguridad que se implementaron en su día para mitigar otra vulnerabilidad que apareció en el año 2010 con el identificador CVE-2010-1622.

¿Cómo sé si mi aplicación con Spring Framework es vulnerable?

Si tu aplicación utiliza un JDK igual o superior a la versión 9, en el classpath de la aplicación se encuentra la librería spring-beans*.jar y además, estás utilizando una versión Spring 5.3.0  – 5.3.17 o 5.2.0 – 5.2.20  es probablemente que tu aplicación sea vulnerable. La forma más rápida de comprobarlo es simplemente abrir el fichero spring-beans*.jar y verificar si se encuentra la clase CachedIntrospectionResults.class. Si la aplicación está en ejecución, se puede comprobar realizando una petición HTTP a uno de los endpoints disponibles en la aplicación, ya sea que se encuentre desarrollada con Spring MVC, WebFlux o Spring Rest, el comportamiento será el mismo si la aplicación es vulnerable. Dicha petición HTTP se enseña en la siguiente imagen.

Como se puede ver, en la URL se ha introducido el siguiente payload: ?class.module.classLoader.URLs%5B0%5D=0

En el caso de que la aplicación sea vulnerable, el servidor devolverá un HTTP 400, si la respuesta es un código de estado diferente lo más probable es que la aplicación no sea vulnerable o bien, exista algún tipo de filtro que este impidiendo la explotación, como por ejemplo un WAF capaz de detectar el patrón de ataque.
Otro payload que ayuda a verificar si la aplicación es vulnerable es el siguiente: ?class.module.classLoader.DefaultAssertionStatus=nothing
Nuevamente, si la aplicación es vulnerable, se podrá ver un error HTTP 400.

Prueba de Concepto

Ahora mismo hay múltiples pruebas de concepto disponibles en repositorios de GitHub. Probar la existencia de esta vulnerabilidad y su explotación no es una labor complicada, solo hace falta que la aplicación utilice alguna de las versiones vulnerables del framework y ejecutar peticiones HTTP que obliguen al cargador de clases de Java a ejecutar las instrucciones que se le indiquen, las cuales típicamente, incluirían la carga de la clase java.lang.Runtime y ejecución de los métodos getRuntime() y exec(). Una prueba de concepto interesante se encuentra disponible en el repositorio de reznok la cual cuenta con exploit en Python y una aplicación con Spring MVC simple para probar. La aplicación se encuentra dockerizada, por lo tanto basta con crear una imagen y un contenedor partiendo de dicha imagen para realizar las pruebas. A continuación, se puede ejecutar el fichero exploit.py  indicando la URL donde se encuentra la aplicación y si todo va bien, se encargará de generar un fichero «shell.jsp» en la aplicación «ROOT» de Tomcat.

Solución

Como se ha mencionado anteriormente, para resolver este problema solo hace falta actualizar Spring Framework a una versión superior a la 5.3.17 y si se utiliza Spring Boot, actualizar a una versión superior a la 2.6.5. Es una vulnerabilidad critica, pero no significa que se desaconseje el uso de Spring Framework, de hecho, a diferencia de otras tecnologías, la comunidad de Spring lleva dos décadas de trabajo continuo y los defectos que se reportan, que no solamente son de seguridad, se suelen corregir al cabo de pocos días. Además, las actualizaciones, salvo en casos puntuales, no suelen presentar conflictos con las aplicaciones que utilizan una versión antigua, siempre y cuando sean de la misma rama. Como ya ha ocurrido con otra vulnerabilidad muy sonada en el mundo de Java/J2EE (log4shell), no hay que olvidar que muchos de los componentes que utilizamos en desarrollo de software son mantenidos por comunidades y voluntarios, lo que significa que se espera que este tipo de problemas se presenten con cierta frecuencia y lo mejor que se puede hacer es estar atento a los avisos de seguridad y parchear cuanto antes. Como siempre, es buena idea aportar a estos proyectos a través de donaciones o código, después de todo, son tecnologías que usamos casi a diario ya sea como usuarios finales o como desarrolladores.

Un saludo y Happy Hack!
Adastra.

Categorías
automatizacion FileSystem Services - Software Web Applications

DevSecOps y detección de vulnerabilidades con Trivy

Demostración en vídeo del post

Al hablar de DevSecOps (o SecDevOps) inevitablemente se deben mencionar herramientas que ayuden a mejorar los procesos de seguridad en cada una de las etapas del SDLC. En este sentido, ya se han publicado un par de posts sobre algunas herramientas interesantes, tales como SonarQube, Insider o Security Code Scan las cuales están pensadas para el análisis estático de  aplicaciones, sin embargo una vez superada las etapas de codificación y pruebas, la seguridad en las etapas de entrega y despliegue también es de vital importancia. En estos puntos ya no se analiza el código fuente estático, ahora se comprueba la integridad y seguridad del paquete que se pretende desplegar. Dependiendo de la aplicación, dicho paquete puede ser una imagen Docker, un fichero WAR para aplicaciones basadas en Java o simplemente un fichero ZIP. En cualquier caso, dicho «artifact» tiene todo lo necesario para que la aplicación funcione en un servidor y en este punto, es fundamental analizar las librerías y dependencias de dicho componente para detectar vulnerabilidades antes de que se produzca el despliegue. No solamente interesa analizar los módulos y librerías desarrollados por terceros, también es importante analizar los ficheros IaC (Infraestructure as Code) como por ejemplo XML, YML, Dockerfile, Jenkinsfile, Kubernetes entre muchos otros. En ocasiones, este análisis está fuera del alcance de algunas herramientas SAST o no es lo suficientemente completo. En este caso es necesario utilizar otras herramientas que se puedan incorporar fácilmente en los pipelines de CI y que sean lo suficiente potentes como para dar una buena cobertura a los componentes disponibles. Para esto tenemos a Trivy

¿Qué es Trivy?

Se trata de otra estupenda herramienta de AquaSecurity y que se define como un escaner de vulnerabilidades y malas configuraciones en imágenes de contenedores, ficheros de configuración y repositorios Git. Es una herramienta desarrollada en GO, la cual se puede compilar directamente en un sistema basado en Unix o descargar el binario que se encuentra disponible en la sección de «releases» del repositorio oficial.

No requiere ningún tipo de instalación y solamente hace falta descargar el binario y ejecutarlo con los parámetros que admite.

Para escanear una imagen, basta con el ejecutar el comando con la opción «image». Si es la primera vez que se ejecuta o si lleva tiempo sin actualizarse, procede a descargar la base de datos de vulnerabilidades con la que realiza las comprobaciones.

La herramienta es capaz de detectar las librerías vulnerables y enseñar el CVE, la severidad, la versión utilizada que presenta la vulnerabilidad y si la hay, la versión que corrige el defecto.
Otros parámetros interesantes consisten precisamente en analizar proyectos que se encuentran en un directorio concreto.

Al ser una aplicación que se ejecuta desde línea de comandos, puede ser fácil de integrar en un pipeline de Jenkins o cualquier otra herramienta similar a la hora de llevar a cabo procesos de integración continua. La información que aporta es vital para poder detectar problemas en los componentes de la aplicación antes de ser desplegada en el servidor. Sin duda, una herramienta útil que hay que tener en cuenta.

Un saludo y Happy Hack!
Adastra.