
Herramientas de descubrimiento e identificación de activos: identifica rápidamente la información de huellas dactilares web y localiza los tipos de activos. Ayuda al equipo rojo a localizar rápidamente la información de los activos objetivo y ayuda al equipo azul a encontrar posibles puntos débiles.
[中文 Readme]
Dismap se posiciona como una herramienta de descubrimiento e identificación de activos. Puede identificar rápidamente protocolos e información de huellas digitales como web/tcp/udp, localizar tipos de activos y es adecuada para redes internas y externas. Ayuda al equipo rojo a localizar rápidamente información de activos de riesgo potencial y ayuda al equipo azul a detectar activos frágiles sospechosos.
Dismap cuenta con una base completa de reglas de huellas digitales, que actualmente incluye huellas de protocolos tcp/udp/tls y más de 4500 reglas de huellas web, capaces de identificar favicon, body, header, etc. La introducción a la base de reglas se encuentra en RuleLab
Los resultados del escaneo se pueden enviar directamente a vulmap(>=0.8) para escaneo de vulnerabilidades. En la versión 0.3, se ha modificado el resultado de texto, se ha añadido el resultado en archivo json, y vulmap soportará el enlace en >= 1.0
Dismap es un archivo binario para Linux, MacOS y Windows. Ve a Release para descargar la versión correspondiente y ejecutar:
# 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 la base de reglas es una estructura ubicada en 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 */
Ejemplo 1:
Si el carácter <flink-root></flink-root> existe en el cuerpo de la respuesta
{"Apahce Flink", "body", "", InStr{"(<flink-root></flink-root>)", "", ""}, ReqHttp{"", "", nil, ""}},
Ejemplo 2:
Personalizar la ruta de solicitud /myportal/control/main y determinar si existen caracteres de cabecera y caracteres de cuerpo en el resultado de la solicitud personalizada.
Se puede observar que todas soportan expresiones regulares
{"Apache OFBiz", "body|header", "or", InStr{"(Apache OFBiz|apache.ofbiz)", "(Set-Cookie: OFBiz.Visitor=(.*))", ""}, ReqHttp{"GET", "/myportal/control/main", nil, ""}},
La relación lógica de header, body, ico se puede combinar libremente, pero no se puede repetir:
Se puede: "body|header|ico", "or" o "body|header|ico", "or|and" o "body|ico", "and"
No se puede: "body|body", "or"
No se permite la combinación repetida especificada por tipo, pero se puede lograr mediante InStr para determinar el carácter: "body", "", InStr{"(str1|str2)"}