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
mail-security-tester — Un marco de pruebas para soluciones de seguridad y filtrado de correo. | Kitploit
Herramientas/GitHubGitHub/tkcert/mail-security-tester
Herramientas de PhishingEscáneres de VulnerabilidadesEvasión de IDS/IPSPruebas de PenetraciónSeguridad de Correo Electrónico
GitHubtkcert/mail-security-tester

mail-security-tester

Un marco de pruebas para soluciones de seguridad y filtrado de correo.

Ver Repositorio
24446hace 7 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

Build Status

Framework de Pruebas de Seguridad de Correo

Un framework de pruebas para soluciones de seguridad y filtrado de correo.

IMPORTANTE: ¡No hagas nada malvado con esto! Las pruebas de soluciones en la nube o alojadas siempre deben ser aprobadas por el proveedor probado. Usa solo tus propias cuentas de prueba y no molestes a nadie con una carga de correos de prueba.

Instalación

El framework de pruebas de seguridad de correo funciona con Python >=3.5. Simplemente clona este repositorio y continúa. No se requieren dependencias adicionales.

Uso

El script mail-tester.py ejecuta las pruebas. Lee el mensaje de ayuda con ./mail-tester.py --help y revisa la lista de módulos de prueba y evasión con ./mail-tester.py -l para obtener una visión general de las capacidades y el uso del script. Algunas sugerencias:

  • Al menos los parámetros --smtp-server y --to deben ser proporcionados para una ejecución de prueba mínima.
  • Todos los parámetros también se pueden almacenar en archivos de configuración sin el prefijo --. Estos archivos de configuración se pueden usar invocando ./mail-tester.py @tester.conf (configuración contenida en tester.conf).
  • Se pueden configurar múltiples destinatarios con --to para probar diferentes configuraciones de filtro.
  • Algunas soluciones de filtrado de correo pueden rechazar mensajes después de un tiempo. Usa --auto-delay para la limitación automática de los correos. Esto se puede ajustar con --delay-step, --delay-max y --delay.
  • Algunas pruebas (Spam y Malware) requieren muestras. Colócalas en directorios y configura estos directorios con los parámetros --spam-folder y --malware-folder. Las muestras no están incluidas en este repositorio (y no lo estarán). Buenos lugares para obtener malware son theZoo, Das Malwerk u otras colecciones. El spam se puede exportar directamente de tu carpeta de Spam, pero debe estar en formato EML.
  • Las listas negras se pueden proporcionar con el parámetro --blacklist y se utilizan como direcciones de remitente.
  • Los casos de prueba Shellshock y XSS en el asunto deben tener un dominio de backconnect válido, donde puedas ver cualquier backconnect (especialmente solicitudes DNS). El servicio gratuito Canary Tokens se puede utilizar para este propósito. ¡Gracias a Thinkst por proporcionar este servicio increíble!
  • Algunos trucos ingeniosos de evasión de reconocimiento de archivos adjuntos se pueden habilitar con --evasion content-disposition. Estos se usaron en el pasado para confundir soluciones de AV/sandboxing y permitir que pasaran correos maliciosos.
  • No olvides registrar los resultados de las pruebas con --log. Los proveedores de filtrado de correo a menudo rechazan correos en el diálogo SMTP, lo cual se refleja en el registro generado.
  • Los casos de prueba se pueden volcar con --output como archivos planos en un directorio, en formato MBox (--mbox) o MailDir (--maildir). Esto es útil para probar clientes de correo sin enviar ningún correo, para documentar o revisar los casos de prueba generados.

Desarrollo y Extensión

Pruebas

Se pueden implementar pruebas propias con una clase en uno de los archivos Python existentes o nuevos en el directorio tests/. La clase debe ser una subclase de MailTestBase ubicada en el módulo tests.base de este proyecto. Las pruebas recién implementadas se descubren automáticamente cuando la variable de clase active se establece en True. Además (si planeas contribuir con pruebas de vuelta al repositorio principal), las variables de clase identifier, name y description deben configurarse adecuadamente.

Existen las siguientes clases base con métodos o variables de clase destinadas a ser sobrescritas:

  • MailTestBase: Clase de prueba para pruebas genéricas.
    • generateTestCases(): Genera mensajes de prueba. Estos deben generarse con las clases MIME* de los paquetes email.mime.* de Python o con la clase Message de email.message para garantizar mensajes de correo válidos.
    • active: Valor booleano que indica si la prueba debe estar activa.
    • identifier: Identificador corto de la prueba. Este se usa para habilitar o deshabilitar pruebas en los parámetros.
    • name: Título corto de la prueba.
    • description: Descripción más larga de la prueba, debe ajustarse aproximadamente a 100 caracteres.
    • delivery_sender y delivery_recipient: Valores booleanos, False por defecto. Normalmente, el remitente y los destinatarios se establecen en el mensaje y el módulo SMTP de Python los toma de allí. A veces es deseable establecerlos explícitamente en la biblioteca SMTP, lo que se puede configurar estableciendo estos valores en .

Se recomienda encarecidamente establecer los asuntos de los mensajes generados para poder reconocer las pruebas en la bandeja de entrada receptora.

Evasiones

Las clases de evasión implementan técnicas para evitar el reconocimiento de propiedades particulares del correo por parte de las soluciones de seguridad de correo. Actualmente, se implementa una técnica de evasión que intenta ocultar archivos adjuntos de dichas soluciones mediante encabezados Content-Disposition intencionalmente rotos.

Implementar nuevas Evasiones

Las evasiones se implementan mediante un patrón de clase fábrica. La clase DeliveryBase instancia una clase fábrica derivada de la clase BaseEvasionFactory. El constructor de la fábrica recibe una bandera que indica si la evasión está activada. La instancia de la fábrica de evasión se pasa luego a la clase de prueba y se almacena en su atributo evasions que contiene un diccionario con los identificadores de evasión como claves. Dentro de la prueba, se instancia una clase de evasión (basada en EvasionBase) con getEvasionGenerator(). Los parámetros del constructor se definen individualmente por técnica de evasión.

Las siguientes clases base se utilizan para implementar evasiones:

  • BaseEvasionFactory: Las fábricas de evasión deben basarse en esta clase. Normalmente, solo se deben establecer las siguientes variables de clase:
    • active: Establecer a True si la evasión debe estar activa.
    • identifier: Identificador corto del módulo de evasión utilizado para habilitarlo en la configuración de prueba.
    • name: Título corto de la técnica de evasión.
    • description: Descripción más larga de la técnica de evasión. Debe ajustarse aproximadamente a 100 caracteres.
    • generator_evasion: Clase de evasión que se instancia si la evasión está habilitada.
    • generator_default: Clase de evasión que se instancia si la evasión está deshabilitada.
  • BaseEvasion: La implementación de evasiones debe ser una subclase de esta clase base. El siguiente método debe ser sobrescrito:
    • __init__(): Debe instanciar la clase con el mensaje base o archivo adjunto que debe ser manipulado con técnicas de evasión.
    • generate(): Aplica la técnica de evasión al objeto pasado al constructor y lo entrega al llamador como una tupla (descripción, objeto con evasión aplicada).

Generalmente, la clase de evasión debe generar todas las variantes de evasión y pasar la predeterminada como un caso de prueba dedicado, mientras que las clases de evasión predeterminadas solo pasan el objeto dado o crean las estructuras de datos necesarias, como encabezados.

Uso de Técnicas de Evasión en Casos de Prueba

Las técnicas de evasión se utilizan en casos de prueba donde son aplicables. Por ejemplo, si una técnica de evasión manipula el encabezado de un correo o archivo adjunto, se deben implementar los siguientes pasos:

  1. Generar el objeto base (correo o archivo adjunto) sin considerar la evasión.
  2. Instanciar la clase de evasión adecuada utilizando la instancia de la fábrica de evasión de self.evasions, por ejemplo:
root@kitploit:~
evasion_items = self.evasions["evasion_identifier"].getEvasionGenerator(message)
  1. Iterar sobre el generador y entregar los casos de prueba:
root@kitploit:~
for evasion_item in evasion_items:
    yield evasion_item

Uso de la Técnica de Evasión de Content Disposition

La técnica de evasión de content disposition ya está implementada en el framework y debe utilizarse para todos los casos de prueba que se centran en el reconocimiento de archivos adjuntos maliciosos. El constructor recibe un archivo adjunto y el nombre de archivo deseado. Luego, la clase de evasión genera tuplas (nombre de evasión, archivo adjunto con la técnica de evasión aplicada) que pueden ser directamente entregadas por el método generateAttachments() de las pruebas.

Descargar herramienta
True
  • finalizeMessage(msg): Por defecto, la clase base de prueba establece los encabezados From y To en consecuencia. Este comportamiento se puede sobrescribir si es necesario para el caso de prueba.
  • MailAttachmentTestBase: Clase de prueba para casos de prueba de archivos adjuntos. Esto genera un correo completo válido con un Asunto y una parte de texto y adjunta el caso de prueba. Derivado de MailTestBase, por lo tanto, los métodos/variables de él también se pueden sobrescribir aquí.
    • generateAttachments(): Genera casos de prueba como tuplas (descripción, archivo adjunto).
    • subject: Establece el asunto. El marcador de posición {} se reemplaza por la descripción generada por generateAttachments().
    • generateTestCases(): ya está sobrescrito con una implementación de la generación de mensajes descrita anteriormente, pero puede adaptarse aún más si es necesario.