
Ferramentas de descoberta e identificação de ativos. Identifique rapidamente informações de impressão digital Web, localize tipos de ativos. Auxilie a equipe vermelha a localizar rapidamente informações de ativos alvo, auxilie a equipe azul a descobrir suspeitos pontos fracos.
[Readme em Chinês]
O Dismap se posiciona como uma ferramenta de descoberta e identificação de ativos. Ele pode identificar rapidamente protocolos e informações de impressão digital, como web/tcp/udp, localizar tipos de ativos, e é adequado para redes internas e externas. Auxilia membros da equipe vermelha a localizar rapidamente informações de ativos de risco potencial, e auxilia membros da equipe azul a detectar ativos potencialmente frágeis.
O Dismap possui uma base completa de regras de impressão digital, atualmente incluindo impressões digitais de protocolos tcp/udp/tls e mais de 4500 regras de impressão digital web, que podem identificar favicon, body, header, etc. A introdução à base de regras está em RuleLab
Os resultados da varredura podem ser enviados diretamente para o vulmap(>=0.8) para escaneamento de vulnerabilidades. Na versão 0.3, o resultado em texto foi alterado, o resultado em arquivo json foi adicionado, e o vulmap oferecerá suporte a vinculação na versão >= 1.0
O Dismap é um arquivo binário para Linux, MacOS e Windows. Vá até o Release para baixar a versão correspondente e executar:
# Linux or 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 Parse the target from the specified file for batch recognition
-h, --help Show help
-i, --ip string Network segment [e.g. -i 192.168.1.0/24 or -i 192.168.1.1-10]
-j, --json string Scan result in json format [e.g. -j r.json]
-l, --level int Specify log level (0:Fatal 1:Error 2:Info 3:Warning 4:Debug 5:Verbose) (default 3)
-m, --mode string Specify the protocol [e.g. -m mysql/-m http]
--nc Do not print character colors
--np Not use ICMP/PING to detect surviving hosts
-o, --output string Save the scan results to the specified file (default "output.txt")
-p, --port string Custom scan ports [e.g. -p 80,443 or -p 1-65535]
--proxy string Use proxy scan, support http/socks5 protocol [e.g. --proxy socks5://127.0.0.1:1080]
-t, --thread int Number of concurrent threads (default 500)
--timeout int Response timeout time, the default is 5 seconds (default 5)
--type string Specify the type [e.g. --type tcp/--type udp]
-u, --uri string Specify a target URI [e.g. -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
Toda a base de regras é uma struct localizada em rule.go Formato aproximado:
Rule:
Name: name /* Define rule name */
Type: header|body|ico /* Support recognized types, header, body, ico can be any logical combination, ico is to request favicon.ico separately and calculate MD5*/
Mode: and|or /* Type judgment logic */
Rule
InBody: str /* Specify which str exists in the response body */
InHeader: str /* Specify which str exists in the response Header */
InIcoMd5: str_md5 /* MD5 of favicon.ico */
Http:
ReqMethod: GET|POST /* Custom request method, currently supports GET and POST */
ReqPath: str /* Custom request web path */
ReqHeader: []str /* Customize the header of the Http request */
ReqBody: str /* Customize the body of the POST request */
Exemplo1:
Se o caractere <flink-root></flink-root> existe no corpo da resposta
{"Apahce Flink", "body", "", InStr{"(<flink-root></flink-root>)", "", ""}, ReqHttp{"", "", nil, ""}},
Exemplo2:
Personalizar o caminho da requisição /myportal/control/main, e determinar se existem caracteres de cabeçalho e corpo no resultado da requisição personalizada
Pode-se notar que todos suportam expressões regulares
{"Apache OFBiz", "body|header", "or", InStr{"(Apache OFBiz|apache.ofbiz)", "(Set-Cookie: OFBiz.Visitor=(.*))", ""}, ReqHttp{"GET", "/myportal/control/main", nil, ""}},
A relação lógica de cabeçalho, corpo, ico pode ser combinada à vontade, mas não pode ser combinada repetidamente:
Pode: "body|header|ico", "or" ou "body|header|ico", "or|and" ou "body|ico", "and"
Não pode: "body|body", "or"
Combinação repetida não é permitida para ser especificada por tipo, mas pode ser alcançada através de InBody para determinar o caractere: "body", "", InStr{"(str1|str2)"}