
Инструменты для обнаружения и идентификации активов. Быстрое распознавание веб-отпечатков, определение типа активов. Помогает красной команде быстро определить информацию о целевых активах, помогает синей команде выявить подозрительные уязвимые места.
[中文 Readme]
Dismap позиционируется как инструмент обнаружения и идентификации активов. Он позволяет быстро определять протоколы и информацию об отпечатках, такие как web/tcp/udp, выявлять типы активов и подходит как для внутренних, так и для внешних сетей. Помогает участникам красной команды быстро находить потенциально опасные активы, а участникам синей команды — выявлять подозрительные уязвимые активы.
Dismap имеет полную базу правил отпечатков, включающую отпечатки протоколов tcp/udp/tls и более 4500 правил для веб-отпечатков, способных идентифицировать favicon, body, header и т.д. Описание базы правил находится в RuleLab
Результаты сканирования можно напрямую отправлять в vulmap (>=0.8) для сканирования уязвимостей. В версии 0.3 изменён текстовый результат, добавлен результат в формате json, и vulmap будет поддерживать связь, начиная с версии >= 1.0.
Dismap — это бинарный файл для Linux, MacOS и Windows. Перейдите в Release, чтобы загрузить соответствующую версию и запустить:
# 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
Вся база правил представляет собой структуру, расположенную в rule.go Примерный формат:
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 */
Пример 1:
Определить, присутствует ли символ <flink-root></flink-root> в теле ответа
{"Apahce Flink", "body", "", InStr{"(<flink-root></flink-root>)", "", ""}, ReqHttp{"", "", nil, ""}},
Пример 2:
Настроить путь запроса /myportal/control/main и проверить, содержатся ли символы заголовка и тела в результате настраиваемого запроса.
Можно заметить, что все поддерживают регулярные выражения.
{"Apache OFBiz", "body|header", "or", InStr{"(Apache OFBiz|apache.ofbiz)", "(Set-Cookie: OFBiz.Visitor=(.*))", ""}, ReqHttp{"GET", "/myportal/control/main", nil, ""}},
Логическую связь header, body, ico можно комбинировать произвольно, но нельзя повторять одну и ту же комбинацию:
Можно: "body|header|ico", "or" или "body|header|ico", "or|and" или "body|ico", "and"
Нельзя: "body|body", "or"
Повторная комбинация не допускается в указании типа, но её можно реализовать с помощью InBody для определения символа: "body", "", InStr{"(str1|str2)"}