JS-Tap es una utensilio destinada a ayudar a los equipos rojos a atacar aplicaciones web. Recientemente escribí en un blog sobre las capacidades de sumario de datos en JS-Tap lectura 1.0, y la sumario de datos sigue siendo el propósito principal de JS-Tap. Sin confiscación, para la lectura 2.0, quería refinar la usabilidad y escalabilidad de la aplicación y adicionar la capacidad de ejecutar cargas bártulos de JavaScript personalizadas en clientes JS-Tap.
El servidor back-end JS-Tap (Python/Flask) ha sido refactorizado para que sea compatible con Gunicorn, lo que permite el servicio multinúcleo/subprocesos del servidor JS-Tap. Esto permite que JS-Tap maneje muchos más clientes simultáneamente. Las demostraciones anteriores solo mostraban el uso de JS-Tap en modo de desarrollador de un solo subproceso, pero no es así como se alojaría el servidor para una interacción auténtico.
Para utilizar JS-Tap en un compromiso, necesitará un VPS multinúcleo con nginx instalado. JS-Tap tiene una configuración de modo proxy que lo ejecuta con HTTP simple y omite el uso del certificado autofirmado. Debe configurar nginx para manejar el certificado TLS, y las instrucciones sobre cómo hacerlo con Let’s Encrypt se pueden encontrar aquí:
https://www.nginx.com/blog/using-free-ssltls-certificates-from-lets-encrypt-with-nginx/
Para configurar JS-Tap para que funcione con nginx como proxy, querrá habilitar el modo proxy. Esto no sólo inicia JS-Tap con HTTP, sino que asimismo cambia la forma en que determina la dirección IP de los clientes que se conectan. En modo proxy, JS-Tap extrae la dirección IP del cliente del X-reenviado-para encabezado que nginx necesita configurar.
Si está utilizando el modo de desarrollador de un solo subproceso, en la parte superior del script Python/Flask hay un modo proxy bandera que puedes configurar:
Si está configurando nginx, probablemente ejecutará JS-Tap con Gunicorn y el script de inicio de Gunicorn (jstapRun.sh) tiene una configuración separada para el modo proxy. En la cima del jstapRun.sh script, puede habilitar MODO PROXIMO:
Internamente de jstapRun.sh Gunicorn, asimismo querrás modificar la cantidad de trabajadores y subprocesos para el servidor JS-Tap. Los trabajadores son bifurcaciones pesadas y querrás al menos uno (1) por núcleo de CPU en tu servidor. Un enfoque “N + 1” funciona admisiblemente aquí. Los hilos son el número de hilos de servicio por tenedor/trabajador. JS-Tap requiere mucha E/S, por lo que tener una cantidad aseado de subprocesos por trabajador es un buen enfoque. Recomendaría al menos cuatro (4) hilos.
Una vez que haya configurado su nginx con su certificado Let’s Encrypt, la configuración de su sitio nginx debería ser similar al ulterior ejemplo. Tenga en cuenta que si desea que nginx use HTTP/2, puede configurarlo en el archivo de configuración “listen 443 ssl http2;”. Encima, asegúrese de configurar los títulos de “proxy_set_header”, para que JS-Tap conozca la dirección IP del cliente.
/etc/nginx/sitios-disponibles/jstap:
Igualmente hay algunos cambios básicos en la configuración de nginx que recomiendo en /etc/nginx/nginx.conf. En la parte superior de la configuración, recomiendo configurar “worker_processes automóvil;”. Esto le dice a nginx que aumente automáticamente la cantidad de procesos nginx a la cantidad de núcleos en el VPS. En el sillar de eventos del nginx.conf archivo, tiendo a aumentar asimismo la configuración “worker_connections”. Igualmente deberá comprobar de que “client_max_body_size” aumente para que nginx no bloquee las cargas de capturas de pantalla.
Asegúrese de reiniciar nginx posteriormente de realizar cambios de configuración. Una vez que esté avispado, puede iniciar su servidor JS-Tap ejecutando el script de inicio de Gunicorn:
Admisiblemente, ahora que hemos resuelto la configuración del servicio de producción, repasemos algunas de las nuevas características de JS-Tap.
Descubrí que, en la praxis, a menudo quiero múltiples cargas bártulos de JS-Tap con diferentes configuraciones. Esto me permite apuntar a múltiples aplicaciones simultáneamente. JS-Tap ahora tiene un cargas bártulos directorio. Cualquier archivo en este directorio es servido por el servidor JS-Tap, por lo que solo necesita copiar la carga útil a un nuevo nombre de archivo y cambiar la configuración.
Igualmente descubrí que apuntar a múltiples aplicaciones simultáneamente hacía que navegar por la letanía de clientes en el portal JS-Tap fuera un desafío. La carga útil JS-Tap ahora tiene una configuración opcional de “calificativo de cliente”.
He usado etiquetas cortas para indicar en qué aplicación se inyectó una carga útil en particular. La calificativo se antepone al apodo del cliente en el portal JS-Tap.
Estas etiquetas son cómodas de usar con el filtro de nuevos clientes en la parte superior de la letanía de clientes.
Ahora podemos cubrir las cosas divertidas.
JS-Tap 2.0 tiene un sistema C2 de carga útil personalizado que permite ejecutar cargas bártulos de JavaScript personalizadas en los clientes. Para crear cargas bártulos de JavaScript, debe rasgar la interfaz de sucesor de cargas bártulos personalizadas.
Las cargas bártulos guardadas aparecerán en el banda izquierdo y el editor en el banda derecho. Creemos una carga útil simple, por ejemplo.
Una vez que guarde la carga útil, verá que aparece en la letanía de cargas bártulos guardadas.
Ahora que tenemos una carga útil guardada, repasemos las opciones para ejecutar esta carga útil en los clientes.
Ejecución cibernética:
Cuando la ejecución cibernética está habilitada, cuando un cliente JS-Tap se conecta al servidor C2 por primera vez para establecer una sesión, la carga útil se ejecutará automáticamente una vez al inicio.
Repetir carga útil:
La función de repetición de carga útil hace que los clientes JS-Tap vuelvan a ejecutar la carga útil cada vez que se registran para realizar tareas. Esto le permite adicionar código para ejecutarlo repetidamente en los clientes. Cuando activa esta función en la interfaz de sucesor de cargas bártulos de JavaScript personalizadas, la función de carga útil repetida se habilita para todos los clientes. La frecuencia con la que un cliente se registra para realizar tareas es una configuración en la carga útil de JS-Tap. Igualmente puede establecer un “jitter” para que la comprobación de la tarea sea variable en un rango de tiempo.
La carga útil de JS-Tap asimismo tiene funciones para cambiar estos títulos, por lo que es obediente tener una configuración de carga personalizada solo para modificar estos títulos sobre la marcha. A continuación se muestra un ejemplo de una carga útil que ralentiza la comprobación de tareas. Siempre puedes acelerarlo nuevamente más tarde:
Ejecutar carga útil:
Cuando presiona el tallo “Ejecutar carga útil” en la interfaz de sucesor de cargas bártulos de JavaScript personalizadas, la carga útil se ejecutará una vez en todos los clientes.
El tallo Eliminar eliminará la carga útil de la almohadilla de datos. Puede exportar, editar y retornar a importar cargas bártulos con los ordenanza de importación y exportación. El formato de los archivos de carga útil se puede encontrar en el archivo README aquí si desea generarlos externamente al portal JS-Tap:
https://github.com/hoodoer/JS-Tap/tree/main?tab=readme-ov-file#custom-payloads
¿Qué sucede si desea ejecutar cargas bártulos en un solo cliente en ocupación de en todos los clientes? Una vez que haya guardado las cargas bártulos personalizadas en el sistema, al presionar el tallo “Ejecutar carga útil” en un cliente individual aparecerá la letanía de cargas bártulos:
Sólo hay dos (2) opciones en este menú. Puede activar el tallo “Repetir carga útil” y esa carga útil se ejecutará repetidamente en las comprobaciones de tareas del cliente específico. El tallo “Ejecutar carga útil” ejecutará esa carga útil solo una vez en el cliente específico.
Si desea rescindir rápidamente todas las tareas activadas y borrar todas las tareas de carga útil programadas, puede presionar el tallo “Borrar todos los trabajos” en la interfaz de sucesor principal de cargas bártulos personalizadas.
Entonces, ¿qué tipo de cargas bártulos personalizadas podrían resultar bártulos? Puedes encontrar algunos ejemplos de cargas bártulos de WordPress en mi repositorio:
https://github.com/hoodoer/WP-XSS-Admin-Funcs
Hay cargas bártulos para adicionar nuevas cuentas de administrador, ejecutar código, rasgar shells meterpreter, etc.
Si está interesado en estudiar a escribir cargas bártulos de JavaScript que logren objetivos específicos, tenemos un seminario web que cubre ese proceso de expansión (Hacer reventar conchas en ocupación de cuadros de alerta: utilizar XSS como armas para divertirse y obtener ganancias).
Igualmente tengo un taller de VM regalado para recorrer el proceso de expansión que se ve en el seminario web:
Taller VM (x86-64): https://download.hoodoer.com/vm.ova
Prontuario del taller: https://download.hoodoer.com/guide.pdf
Con JS-Tap capturando el código HTML de las aplicaciones e interceptando envíos de formularios y llamadas API de red, los miembros del equipo rojo deberían poder proporcionar esa información a su equipo de pruebas de aplicaciones para crear asimismo cargas bártulos personalizadas, si el equipo rojo no está tan versado. en programación JavaScript como sus colegas de AppSec.
Una futura publicación de blog cubrirá cómo utilizar la función de imitación recién puyazo que genera automáticamente cargas bártulos personalizadas interiormente del portal JS-Tap.
Esto cubre las principales características nuevas de la lectura 2.0 de JS-Tap. Los registros de cambios para JS-Tap se publican en los Anuncios en el repositorio de GitHub:
https://github.com/hoodoer/JS-Tap/discussions/categories/announcements
El código fuente de JS-Tap se puede encontrar aquí:
https://github.com/hoodoer/JS-Tap
Si está interesado en ver una demostración de la lectura 2 con las funciones de sumario de datos y C2, y ver métodos para usar JS-Tap como implante post-explotación, consulte mi presentación de HackSpaceCon:
En ShmooCon se presentó una demostración más breve de las funciones de sumario de datos de la lectura 1:
Si cierto tiene preguntas o ideas, mis DM están siempre abiertos. @Hoodoer.