
Outils de découverte et d'identification d'actifs : identification rapide des empreintes Web et localisation des types d'actifs. Aide l'équipe rouge à localiser rapidement les informations sur les actifs cibles, aide l'équipe bleue à découvrir les points faibles présumés.
[中文 Readme]
Dismap se positionne comme un outil de découverte et d'identification d'actifs. Il peut rapidement identifier des protocoles et des informations d'empreinte numérique telles que web/tcp/udp, localiser les types d'actifs, et convient aux réseaux internes et externes. Il aide les membres de l'équipe rouge à localiser rapidement les informations sur les actifs à risque potentiel, et aide les membres de l'équipe bleue à détecter les actifs potentiellement fragiles.
Dismap dispose d'une base de règles d'empreinte numérique complète, comprenant actuellement des empreintes de protocole tcp/udp/tls et plus de 4500 règles d'empreinte web, capables d'identifier favicon, body, header, etc. La présentation de la base de règles se trouve sur RuleLab
Les résultats de scan peuvent être envoyés directement à vulmap(>=0.8) pour une analyse de vulnérabilités. Dans la version 0.3, le résultat textuel a été modifié, le résultat en fichier json a été ajouté, et vulmap prendra en charge la liaison dans >= 1.0
Dismap est un fichier binaire pour Linux, MacOS et Windows. Allez dans Release pour télécharger la version correspondante à exécuter :
# 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
La base de règles entière est une struct située dans rule.go Format approximatif :
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 */
Exemple1 :
Si le caractère <flink-root></flink-root> existe dans le corps de la réponse
{"Apahce Flink", "body", "", InStr{"(<flink-root></flink-root>)", "", ""}, ReqHttp{"", "", nil, ""}},
Exemple2 :
Personnalisez le chemin de requête /myportal/control/main, et déterminez si des caractères d'en-tête et des caractères de corps existent dans le résultat de la requête personnalisée.
On peut constater que tout prend en charge les expressions régulières.
{"Apache OFBiz", "body|header", "or", InStr{"(Apache OFBiz|apache.ofbiz)", "(Set-Cookie: OFBiz.Visitor=(.*))", ""}, ReqHttp{"GET", "/myportal/control/main", nil, ""}},
La relation logique entre header, body, ico peut être combinée librement, mais ne peut pas être combinée de manière répétée :
Peut : "body|header|ico", "or" ou "body|header|ico", "or|and" ou "body|ico", "and"
Ne peut pas : "body|body", "or"
La combinaison répétée n'est pas autorisée à être spécifiée par type, mais elle peut être réalisée via InBody pour déterminer le caractère : "body", "", InStr{"(str1|str2)"}