
Strumenti di scoperta e identificazione delle risorse. Identificano rapidamente le informazioni sulle impronte digitali web, localizzano i tipi di asset. Aiutano il red team a localizzare rapidamente le informazioni sugli asset target, aiutano il blue team a scoprire potenziali vulnerabilità.
[中文 Readme]
Dismap si posiziona come uno strumento di scoperta e identificazione delle risorse. Può identificare rapidamente protocolli e informazioni di fingerprint come web/tcp/udp, individuare i tipi di risorse ed è adatto per reti interne ed esterne. Assiste il personale del red team a individuare rapidamente informazioni su risorse potenzialmente a rischio e aiuta il personale del blue team a rilevare risorse sospette fragili.
Dismap dispone di una base di regole di fingerprint completa, che attualmente include fingerprint di protocolli tcp/udp/tls e oltre 4500 regole di fingerprint web, in grado di identificare favicon, body, header, ecc. L'introduzione alla base di regole si trova su RuleLab
I risultati della scansione possono essere inviati direttamente a vulmap(>=0.8) per la scansione delle vulnerabilità. Nella versione 0.3, il risultato testuale è stato modificato, è stato aggiunto il risultato in file json e vulmap supporterà il collegamento nella versione >= 1.0
Dismap è un file binario per Linux, MacOS e Windows. Vai su Release per scaricare la versione corrispondente ed eseguire:
# Linux o MacOS
zhzyker@debian:~$ chmod +x dismap-0.3-linux-amd64
zhzyker@debian:~$ ./dismap-0.3-linux-amd64 -h
# Windows
C:\Users\zhzyker\Desktop> dismap-0.3-windows-amd64.exe -h
-f, --file string Analizza il target dal file specificato per il riconoscimento batch
-h, --help Mostra l'aiuto
-i, --ip string Segmento di rete [es. -i 192.168.1.0/24 o -i 192.168.1.1-10]
-j, --json string Risultato scansione in formato json [es. -j r.json]
-l, --level int Specifica il livello di log (0:Fatal 1:Error 2:Info 3:Warning 4:Debug 5:Verbose) (default 3)
-m, --mode string Specifica il protocollo [es. -m mysql/-m http]
--nc Non stampare i colori dei caratteri
--np Non utilizzare ICMP/PING per rilevare gli host attivi
-o, --output string Salva i risultati della scansione nel file specificato (default "output.txt")
-p, --port string Porte di scansione personalizzate [es. -p 80,443 o -p 1-65535]
--proxy string Usa proxy per la scansione, supporta protocollo http/socks5 [es. --proxy socks5://127.0.0.1:1080]
-t, --thread int Numero di thread concorrenti (default 500)
--timeout int Tempo di timeout della risposta, predefinito 5 secondi (default 5)
--type string Specifica il tipo [es. --type tcp/--type udp]
-u, --uri string Specifica l'URI del target [es. -u https://example.com]
zhzyker@debian:~$ ./dismap -i 192.168.1.1/24
zhzyker@debian:~$ ./dismap -i 192.168.1.1/24 -o result.txt -j result.json
zhzyker@debian:~$ ./dismap -i 192.168.1.1/24 --np --timeout 10
zhzyker@debian:~$ ./dismap -i 192.168.1.1/24 -t 1000
zhzyker@debian:~$ ./dismap -u https://github.com/zhzyker/dismap
zhzyker@debian:~$ ./dismap -u mysql://192.168.1.1:3306
zhzyker@debian:~$ ./dismap -i 192.168.1.1/24 -p 1-65535
L'intera base di regole è una struct situata in rule.go Formato approssimativo:
Rule:
Name: name /* Definisce il nome della regola */
Type: header|body|ico /* Tipi supportati, header, body, ico possono essere combinati logicamente, ico richiede favicon.ico separatamente e calcola l'MD5 */
Mode: and|or /* Logica di giudizio del tipo */
Rule
InBody: str /* Specifica quale str esiste nel corpo della risposta */
InHeader: str /* Specifica quale str esiste nell'header della risposta */
InIcoMd5: str_md5 /* MD5 di favicon.ico */
Http:
ReqMethod: GET|POST /* Metodo di richiesta personalizzato, attualmente supporta GET e POST */
ReqPath: str /* Percorso web della richiesta personalizzato */
ReqHeader: []str /* Header personalizzato della richiesta Http */
ReqBody: str /* Corpo personalizzato della richiesta POST */
Esempio1:
Se il carattere <flink-root></flink-root> esiste nel corpo della risposta
{"Apahce Flink", "body", "", InStr{"(<flink-root></flink-root>)", "", ""}, ReqHttp{"", "", nil, ""}},
Esempio2:
Personalizza il percorso della richiesta /myportal/control/main e verifica se nel risultato della richiesta personalizzata sono presenti caratteri nell'header e nel corpo
Si può notare che tutte le espressioni regolari sono supportate
{"Apache OFBiz", "body|header", "or", InStr{"(Apache OFBiz|apache.ofbiz)", "(Set-Cookie: OFBiz.Visitor=(.*))", ""}, ReqHttp{"GET", "/myportal/control/main", nil, ""}},
La relazione logica tra header, body e ico può essere combinata a piacere, ma non può essere combinata ripetutamente:
Possibile: "body|header|ico", "or" o "body|header|ico", "or|and" o "body|ico", "and"
Non possibile: "body|body", "or"
Non è permesso specificare combinazioni ripetute tramite il tipo, ma è possibile ottenere la verifica del carattere tramite InBody: "body", "", InStr{"(str1|str2)"}