Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
TeamsPhisher — Enviar mensajes de phishing y archivos adjuntos a usuarios de Microsoft Teams | Kitploit
Herramientas/GitHubGitHub/octoberfest7/teamsphisher
Herramientas de PhishingReconocimientoRecopilación de InformaciónPhishingPruebas de PenetraciónIngeniería SocialRed Teaming
GitHuboctoberfest7/teamsphisher

TeamsPhisher

Enviar mensajes de phishing y archivos adjuntos a usuarios de Microsoft Teams

Ver Repositorio
1.1k1426hace 2 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
root@kitploit:~
                            ...                                               
                        :-++++++=-.                                           
                      .=+++++++++++-                                          
                     .++++++++++++++=     :------:                            :-:--.                 
                     :+++++++++++++++.  .----------                           #= .-+.                
                     :+++++++++++++++.  -----------:                         :#=  :#.                   
:--------------------------=++++++++-  .------------                          .=+  ++                
----------------------------+++++*+-.   :+=-----===:                          -+-.+:                 
:---------------------------++++=-.      .=+++++=-.                           .=+:.                    
:------=%%%%%%%%%%%%--------:...           .:::..                              -*=-:                
:------=****#@@#****--------=++++++++++++++-----------.                        -#++-                   
:----------:+@@+:-----------+++++++++++++++=-----------                        -#++-                  
:-----------+@@*------------+++++++++++++++=-----------.                       -*+*-                  
:-----------+@@*------------+++++++++++++++=-----------.                   .   -*++-                    
:-----------+@@*------------+++++++++++++++=-----------.                   --  -*++-                  
:-----------+@@*------------+++++++++++++++=-----------.           .       ==  -*++-                .=
:-----------+@@+------------+++++++++++++++=-----------.          .+       -=  :+==-                .*
:---------------------------+++++++++++++++=-----------.          =*       -=  -+=+=                .::
----------------------------+++++++++++++++=-----------           **       -+  -+=++.               .*=
.:-------------------------=+++++++++++++++=---------=:           #+       :=  ++-:*=                ==
                -++++++++++++++++++++++++++=-------=+=:          :#=       .:. *=: -*-               ==
                .=+++++++++++++++++++++++++*+++++++=-.           -#-        ::++=   :+=.            .==
                :++++++++++++++++++++++++=:.:::::.               -*:        .=+-.    .=+-.          -+:
                .=+*+++++++++++++++++++-                         -+-      .:-=.        .-====----:-==:
                    .-+**+++++++++++**+-.                        .++:   .-=-:             .:-====-:.
                    :-=++******+=-:                               .=+===--.                  
                        ..:::..                                      ...                     
                                    
                   _____                            ______  _      _       _                 
                  |_   _|                           | ___ \| |    (_)     | |                
                    | |  ___   __ _  _ __ ___   ___ | |_/ /| |__   _  ___ | |__    ___  _ __ 
                    | | / _ \ / _` || '_ ` _ \ / __||  __/ | '_ \ | |/ __|| '_ \  / _ \| '__|
                    | ||  __/| (_| || | | | | |\__ \| |    | | | || |\__ \| | | ||  __/| |   
                    \_  \___| \__,_||_| |_| |_||___/\_|    |_| |_||_||___/|_| |_| \___||_|   
                  
                    v1.2 developed by @Octoberfest73 (https://github.com/Octoberfest7)

Introducción

TeamsPhisher es un programa en Python3 que facilita la entrega de mensajes de phishing y archivos adjuntos a usuarios de Microsoft Teams cuyas organizaciones permiten comunicaciones externas.

Normalmente no es posible enviar archivos a usuarios de Teams fuera de la propia organización. Max Corbridge (@CorbridgeMax) y Tom Ellson (@tde_sec) de JUMPSEC recientemente revelaron una forma de sortear esta restricción manipulando las solicitudes web de Teams para alterar el destinatario de un mensaje con un archivo adjunto.

TeamsPhisher incorpora esta técnica además de algunas anteriores divulgadas por Andrea Santese (@Medu554).

También se apoya en gran medida en TeamsEnum, un fantástico trabajo de Bastian Kanbach (@bka) de SSE, para la parte de autenticación del flujo de ataque, así como en algunas funciones auxiliares generales.

TeamsPhisher busca tomar lo mejor de todos estos proyectos y proporcionar un medio robusto, personalizable y eficiente para que operaciones de Red Team autorizadas aprovechen Microsoft Teams para phishing en escenarios de acceso inicial.

Consulte el final de este README para obtener recomendaciones de mitigación.

Funciones y demostración

Entregue a TeamsPhisher un archivo adjunto, un mensaje y una lista de usuarios de Teams objetivo. Cargará el archivo adjunto en el Sharepoint del remitente y luego iterará a través de la lista de objetivos.

TeamsPhisher primero enumerará al usuario objetivo y se asegurará de que exista y pueda recibir mensajes externos. Luego creará un nuevo hilo con el usuario objetivo. Note que esto es técnicamente un chat "grupal" porque TeamsPhisher incluye el correo del objetivo dos veces; este es un truco ingenioso de @Medu554 que evitará la pantalla de presentación "Alguien fuera de tu organización te envió un mensaje, ¿estás seguro de que quieres verlo?" que podría hacer que nuestros objetivos se detengan. (v1.2) Nota: esta elusión de la pantalla de presentación fue parcheada, pero agregar al usuario objetivo a un chat grupal sigue siendo relevante para la elusión actual de la pantalla de presentación.

Una vez creado el nuevo hilo entre nuestro remitente y el objetivo, el mensaje especificado se enviará al usuario junto con un enlace al archivo adjunto en Sharepoint.

Una vez que se haya enviado este mensaje inicial, el usuario objetivo será eliminado del chat grupal creado. Esto elimina la capacidad del remitente de enviar más mensajes al objetivo, pero también elimina la pantalla de "Esta persona es de fuera de tu organización" y aumenta significativamente las probabilidades de éxito. Esta elusión actual fue publicada por @pfiatde en uno de sus muchos blogs sobre Teams y comportamientos no deseados e integrada en TeamsPhisher por Steve Nelson (@stevesec128) y Alex Martirosyan (@almartiros) de DenSecure.

Modo operativo

Ejecute TeamsPhisher de verdad. Envíe mensajes de phishing a los objetivos.

Comando:
texto alternativo

Targets.txt:
texto alternativo

Message.txt: texto alternativo

Salida de TeamsPhisher:
texto alternativo

Vista del remitente:
texto alternativo

Vista del objetivo:
texto alternativo

Archivo adjunto:
texto alternativo

Modo vista previa

Ejecute TeamsPhisher en modo vista previa para verificar su lista de objetivos, previsualizar sus "nombres descriptivos" (si TeamsPhisher puede resolverlos usando el parámetro --personalize) y enviar un mensaje de prueba a su propia cuenta de remitente para verificar que todo se vea como desea.

Salida de TeamsPhisher:
texto alternativo

Vista del remitente:
texto alternativo

Configuración y requisitos

TeamsPhisher requiere que los usuarios tengan una cuenta comercial de Microsoft (a diferencia de una personal, por ejemplo @hotmail, @outlook, etc.) con una licencia válida de Teams y Sharepoint.

Esto significa que necesitará un inquilino de AAD y al menos un usuario con la licencia correspondiente. Al momento de esta publicación, hay algunas licencias de prueba gratuitas disponibles en el centro de licencias de AAD que cumplen con los requisitos de esta herramienta.

Deberá iniciar sesión en el Sharepoint personal del usuario desde el cual va a enviar mensajes al menos una vez antes de usar la cuenta con TeamsPhisher. Esto debería ser algo como tenantname-my.sharepoint.com/personal/myusername_mytenantname_onmicrosoft_com o tenantname-my.sharepoint.com/personal/myusername_mytenantname_mycustomdomain_tld.

En cuanto a los requisitos locales, recomiendo actualizar a la última versión de Python3. También necesitará la biblioteca de autenticación de Microsoft:``` pip3 install msal

root@kitploit:~
# Uso```
usage: teamsphisher.py [-h] -u USERNAME -p PASSWORD -a ATTACHMENT -m MESSAGE (-e EMAIL | -l LIST) [--greeting GREETING] [--securelink] [--personalize]
                       [--preview] [--delay DELAY] [--nogreeting] [--log] [--sharepoint SHAREPOINT]

options:
  -h, --help            show this help message and exit
  -u USERNAME, --username USERNAME
                        Username for authentication
  -p PASSWORD, --password PASSWORD
                        Password for authentication
  -a ATTACHMENT, --attachment ATTACHMENT
                        Full path to the attachment to send to targets.
  -m MESSAGE, --message MESSAGE
                        A file containing a message to send with attached file.
  -e EMAIL, --targetemail EMAIL
                        Single target email address
  -s SHAREPOINT, --sharepoint SHAREPOINT
                        Manually specify sharepoint name (e.g. mytenant.sharepoint.com would be --sharepoint mytenant)
  -l LIST, --list LIST  Full path to a file containing target emails. One per line.
  --greeting GREETING   Override default greeting with a custom one. Use double quotes if including spaces!
  --securelink          Send link to file only viewable by the individual target recipient.
  --personalize         Try and use targets names in greeting when sending messages.
  --preview             Run in preview mode. See personalized names for targets and send test message to sender's Teams.
  --delay DELAY         Delay in [s] between each attempt. Default: 0
  --nogreeting          Do not use built in greeting or personalized names, only send message specified with --message
  --log                 Write TeamsPhisher output to logfile

Argumentos requeridos

Nombre de usuario

El nombre de usuario de la cuenta de Microsoft desde la que enviará mensajes (por ejemplo, [email protected])

Contraseña

La contraseña de la cuenta mencionada. Si contiene caracteres especiales, puede ser útil envolverla entre comillas simples.

Archivo adjunto

El archivo que desea enviar a los usuarios objetivo. Se subirá al SharePoint de la cuenta remitente y se compartirá un enlace a través de Teams.

Mensaje

Un archivo que contiene el mensaje de texto que debe acompañar al archivo adjunto y enviarse a los objetivos

Correo electrónico / Lista

Ya sea un solo correo electrónico objetivo (por ejemplo, [email protected]) o un archivo que contenga una lista de correos electrónicos objetivo, uno por línea.

Argumentos y características opcionales

Sharepoint

Especifique manualmente el nombre del sitio de SharePoint al que subir el archivo adjunto. Esto probablemente será necesario si el inquilino de su remitente utiliza un nombre de dominio personalizado (por ejemplo, no sigue la convención xxx.onmicrosoft.com). Especifique solo el nombre único, por ejemplo, si su sitio de SharePoint es mytest.sharepoint.com, usaría --sharepoint mytest

Greeting

Sobrescriba el saludo predeterminado de TeamPhisher ("Hola, ") con uno personalizado que se antepondrá al mensaje especificado por --message. Por ejemplo, "Buenas tardes, " o "Equipo de ventas, "

Securelink

Por defecto, el enlace de SharePoint enviado a los objetivos puede ser visto por cualquier persona que tenga el enlace; use --securelink para que el archivo de SharePoint solo sea visible para el objetivo que lo recibió. Puede ayudar a proteger su malware del Blue team.

Personalizar

TeamsPhisher intentará identificar el nombre de pila de cada usuario objetivo y usarlo con el saludo. Por ejemplo, [email protected] recibiría un mensaje que comenzaría con "Hola Tom, ". Esto no es perfecto y depende del formato de los correos electrónicos objetivo; use --preview para ver si esto es adecuado para su lista de objetivos o no.

Vista previa

TeamsPhisher se ejecutará en modo de vista previa. Esto NO enviará ningún mensaje a los usuarios objetivo, sino que mostrará el nombre "amigable" que usaría el modificador --personalize. Además, se enviará un mensaje de prueba representativo de lo que recibirían los objetivos con la configuración actual al Teams del remitente; inicie sesión y vea cómo se ve su mensaje y revise según sea necesario.

Retardo

Especifique un retardo de x segundos entre mensajes a los objetivos. Puede ayudar con posibles problemas de limitación de velocidad.

Sin saludo

Deshabilita el saludo integrado que usa TeamsPhisher. También deshabilita la función --personalize. Use esta opción si está incluyendo su saludo dentro del mensaje especificado por --message.

Registro

Escribe la salida de TeamsPhisher en un archivo de registro (se escribirá en el directorio personal del usuario).

Ejemplos```

python3 teamsphisher.py -u [email protected] -p 'xxxxxxxxxxxx' -l /root/targets.txt -a /root/attachment.zip -m /root/message.txt --log

root@kitploit:~
Este comando obtendrá tokens de acceso para la cuenta testuser y subirá el archivo adjunto '/root/attachment.zip' al Sharepoint de testuser.

Luego creará un hilo único de Teams con cada objetivo listado en '/root/targets.txt' y les enviará el mensaje especificado en '/root/message.txt', además de un enlace al archivo adjunto en Sharepoint.

Toda la salida de terminal de TeamsPhisher se registrará en un archivo que se generará en el directorio home del usuario.```
python3 teamsphisher.py -u [email protected] -p 'xxxxxxxxxxxx' -l /root/targets.txt -a /root/attachment.zip -m /root/message.txt --greeting "Good afternoon" --personalize --securelink

Este comando obtendrá tokens de acceso para la cuenta testuser y cargará el archivo adjunto '/root/attachment.zip' al SharePoint de testuser.

Luego creará un hilo de Teams único con cada objetivo listado en '/root/targets.txt' y les enviará el mensaje especificado en '/root/message.txt', además de un enlace al archivo adjunto en SharePoint.

El mensaje tendrá como prefijo el saludo "Buenas tardes , ".

TeamsPhisher intentará usar nombres "amigables" en el saludo. Ahora el saludo será "Buenas tardes ,".

Cada enlace de SharePoint enviado es único y válido solo para ese objetivo específico.

Características adicionales y comentarios

Enumeración de cuentas

TeamsPhisher identificará cuentas que no pueden recibir mensajes de organizaciones externas, cuentas que no existen y cuentas que tienen un plan de suscripción no compatible con este vector de ataque:

alt text

Cuentas con MFA habilitado

Gracias al código del proyecto TeamsEnum, TeamsPhisher admite el inicio de sesión con cuentas de remitente que usan MFA:

alt text

Enlaces seguros de SharePoint

Usar el modificador --securelink hará que los objetivos deban autenticarse para ver el archivo adjunto en SharePoint. Puedes decidir si esto agrega demasiados pasos adicionales o si agrega 'legitimidad' al enviarlos a través de la funcionalidad real de inicio de sesión de Microsoft.

alt text

alt text

Variables globales

Editando TeamsPhisher.py puedes modificar algunas variables globales para usarlas en ejecuciones posteriores:```

Global Options and Variables

Greeting: The greeting to use in messages sent to targets. Will be joined with the targets name if the --personalize flag is used

Examples: "Hi" "Good Morning" "Greetings"

Greeting = "Hi"

useragent: The user-agent string to use for web requests

useragent = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko)"

root@kitploit:~
## Personalización y nombres "amigables"

El flag --personalize intentará resolver un nombre "amigable" para cada objetivo; lo hace mirando los datos devueltos por la función enumUser y primero verificando el campo "displayName".

Si el campo displayName contiene un espacio (por ejemplo, "Tom Jones"), TeamsPhisher dividirá en el espacio y tomará el primer fragmento como el nombre "amigable".

Si no hay un espacio en el campo displayName (por ejemplo, algunas organizaciones podrían poner el UPN en el campo displayName como [email protected]), TeamsPhisher intentará analizar el UPN por sí mismo.

Con un UPN de ejemplo como [email protected], TeamsPhisher dividirá en el carácter '@', y luego en el primer fragmento dividirá en el carácter '.' y tomará el primer fragmento. Esto daría como resultado un nombre "amigable" de "Tom" en este caso.

Este es el alcance de cómo TeamsPhisher intentará identificar nombres "amigables". Objetivos como "[email protected]" y "[email protected]" NO tendrán nombres "amigables" identificados si sus campos displayName no coinciden con la convención de análisis descrita anteriormente.

# Mitigación

Las organizaciones pueden mitigar el riesgo que plantea esta vulnerabilidad gestionando las opciones relacionadas con el acceso externo a través del centro de administración de Microsoft Teams en Usuarios -> Acceso externo.

![alt text](https://assets.kitploit.com/production/public/readmes/6252/cc6c2bbf7e6c11997a47b0b38259fea96278543ae5477ed1367caf5a88479850.jpg)

Microsoft brinda flexibilidad a las organizaciones para elegir los mejores permisos que se ajusten a sus necesidades, incluyendo un bloqueo universal así como la inclusión en lista blanca solo de inquilinos externos específicos para las comunicaciones.

![alt text](https://assets.kitploit.com/production/public/readmes/6252/dcaf730f7c522bfcf4e11800631f663550315079570778aee78784164e22aabe.jpg)

# Registro de cambios  
## v1.2
Fusiona una solicitud de extracción del equipo de DenSecure que incluye una omisión funcional (a partir del 2/7/24) de la pantalla de presentación de usuarios externos.

El cambio en el flujo de trabajo de TeamsPhisher es afortunadamente muy menor y fácil de integrar. Después de que se haya creado el chat grupal con un usuario objetivo y se haya enviado el mensaje, se realiza una solicitud adicional para eliminar al usuario objetivo del chat grupal. Esto resulta en que el usuario recibe el mensaje sin una pantalla de presentación de usuario externo.

Actualización del README con información más actualizada sobre la técnica utilizada actualmente por TeamsPhisher.

## v1.1.2
Se corrigió un error que los usuarios reportaban con respecto a la carga del archivo adjunto a Sharepoint; esto se debía a las convenciones de nomenclatura/renombrado que ocurren cuando los usuarios usan un dominio personalizado con sus inquilinos.

Se agregó una verificación para asegurar que si los usuarios están usando un dominio que NO es @domain.onmicrosoft.com, también usen el modificador -s para especificar su sitio de sharepoint manualmente y evitar problemas.

Se actualizó la sección de configuración para incluir iniciar sesión en Sharepoint al menos una vez antes de usar TeamsPhisher, ya que un usuario identificó que no haber iniciado sesión antes con la cuenta haría que TeamsPhisher fallara.

Se agregó el parámetro &top=999 a la solicitud web getSenderInfo para aumentar el número de usuarios recuperados por página/disminuir el número de solicitudes necesarias para encontrar nuestro usuario.

### Reversión del cambio con respecto al análisis de '.' en nombres de usuario al ensamblar la uri de Sharepoint
v.1.1 cambió cómo se analizaban los nombres de usuario con el carácter '.' en ellos para crear las URI de Sharepoint necesarias. Había varios problemas distintos y yo identifiqué erróneamente esto como la causa de uno de ellos. Este cambio se ha revertido. El resultado es que un nombre de usuario como [email protected] ahora tendrá una uri de sharepoint ensamblada como "tom_jones_mytest_onmicrosoft_com" en lugar de "tom.jones_mytest_onmicrosoft_com".

## v1.1.1
Correcciones menores

## v1.1
Se realizaron algunos commits para abordar varios problemas pequeños sin incrementar el número de versión; disculpen por ser descuidado.

v1.1 trae algunos cambios destinados a abordar algunos problemas comunes que los usuarios estaban encontrando.

### Argumento -s, --sharepoint
Este argumento opcional se agregó para que los usuarios puedan especificar manualmente su nombre raíz de sharepoint. Surgió un problema común cuando los usuarios cambiaban el nombre de dominio de su inquilino a uno personalizado; por ejemplo, en lugar de que su nombre de usuario fuera [email protected], podría ser [email protected]. La versión original de TeamsPhisher ensamblaba la dirección de Sharepoint y las rutas URI requeridas analizando el nombre principal de usuario (UPN) del remitente a partir de su información de usuario. Cuando el dominio de un inquilino se cambia a uno personalizado, los UPN de los usuarios cambian para reflejar esto. Sin embargo, la dirección de sharepoint del inquilino siempre permanecerá igual/lo que era cuando el inquilino se creó originalmente.

No pude encontrar una buena manera de resolver la dirección actual de Sharepoint para un inquilino; se puede hacer con Graph API fácilmente, pero implementar Graph en esta herramienta requeriría mucha más configuración por parte de los usuarios para usar TeamsPhisher. Opté por proporcionar la opción de especificar manualmente el nombre de sharepoint como la solución más fácil.

### Mejora en el análisis de la dirección de Sharepoint y la uri requerida cuando NO se usa la opción manual
Hubo un informe de un usuario que NO estaba usando un dominio personalizado con su inquilino y que aún recibía el error 404 no encontrado con respecto a Sharepoint. Creo que esto tenía que ver con que su nombre de usuario contenía un '.', por ejemplo, [email protected]. La versión anterior de TeamsPhisher tenía una funcionalidad más simple de buscar y reemplazar para el UPN del usuario con el fin de ensamblar las uri de Sharepoint requeridas; v1.1 ahora apunta específicamente a los caracteres '.' que necesitan ser reemplazados y dejará otros '.' en el campo de nombre de usuario intactos.

### Los caracteres especiales (p. ej., 'ö') dentro del cuerpo del mensaje ya no resultan en un error del servidor
Esta fue una corrección muy simple que tomó demasiado tiempo de encontrar. Se agregó codificación utf-8 a la solicitud POST sendFile. Ahora se pueden usar caracteres especiales en los mensajes.

### Limpieza menor de código
Se corrigieron algunos comentarios y se reordenaron algunos pasos en main para ahora verificar los archivos necesarios antes de intentar autenticar.

## v1.0 - Versión inicial

# Créditos y Agradecimientos 

1. Max Corbridge (@CorbridgeMax) y Tom Ellson (@tde_sec) de JUMPSEC por [este artículo](https://labs.jumpsec.com/advisory-idor-in-microsoft-teams-allows-for-external-tenants-to-introduce-malware/). Un agradecimiento especial a Max por ser muy receptivo y estar dispuesto a charlar en privado sobre su investigación.

2. Andrea Santese (@Medu554) [por esta investigación](https://posts.inthecyber.com/leveraging-microsoft-teams-for-initial-access-42beb07f12c4). Nuevamente, un agradecimiento especial por su receptividad y disposición a discutir su trabajo en privado.

3. Bastian Kanbach (@_bka_) de SSE por [TeamsEnum](https://github.com/sse-secure-systems/TeamsEnum). Este proyecto sirvió como punto de partida para recuperar tokens Bearer y autenticarse mediante diferentes métodos. Yo había usado Graph API para estos fines, pero su proyecto (y este) usa los endpoints normales, por lo que fue genial tener a alguien que ya había lidiado con esto y tenía funciones confiables para lograrlo.

4. @pfiatde quien tiene una [serie de varias partes sobre phishing en Teams](https://badoption.eu/blog/2024/01/12/teams5.html). Sus blogs fueron referenciados durante el desarrollo original de TeamsPhisher, y la versión actual de la herramienta utiliza una nueva omisión de pantalla de presentación de investigaciones posteriores que él publicó.

5. Steve Nelson (@stevesec128) y Alex Martirosyan (@almartiros) de DenSecure por su actualización a Teamsphisher (2/7/24) que integró la omisión de la pantalla de presentación aún funcional de @pfiatde.

6. [Este sitio para generar texto ASCII](https://patorjk.com/software/taag/#p=display&f=Graffiti&t=Type%20Something%20)

7. [Este proyecto loco para convertir imágenes a arte ASCII](https://github.com/TheZoraiz/ascii-image-converter)
Descargar herramienta