🌀 Dismap - 资产发现和识别工具
[中文 Readme]
Dismap 定位为资产发现和识别工具。它可以快速识别web/tcp/udp等协议和指纹信息,定位资产类型,适用于内外网。它可以帮助红队人员快速定位潜在风险资产信息,并协助蓝队人员检测可疑脆弱资产。
Dismap 拥有完整的指纹规则库,目前包括tcp/udp/tls协议指纹和4500多条web指纹规则,可以识别favicon、body、header等。规则库介绍位于RuleLab
扫描结果可以直接发送到vulmap(>=0.8)进行漏洞扫描。 在0.3版本中,文本结果已经更改,添加了json文件结果,vulmap将在>=1.0版本中支持联动。
🏂 运行
Dismap 是适用于Linux、MacOS和Windows的二进制文件。前往Release下载相应版本运行:
# Linux 或 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 从指定文件解析目标进行批量识别
-h, --help 显示帮助信息
-i, --ip string 网段 [例如 -i 192.168.1.0/24 或 -i 192.168.1.1-10]
-j, --json string 以json格式保存扫描结果 [例如 -j r.json]
-l, --level int 指定日志级别 (0:致命 1:错误 2:信息 3:警告 4:调试 5:详细) (默认 3)
-m, --mode string 指定协议 [例如 -m mysql/-m http]
--nc 不打印彩色字符
--np 不使用ICMP/PING检测存活主机
-o, --output string 将扫描结果保存到指定文件 (默认 "output.txt")
-p, --port string 自定义扫描端口 [例如 -p 80,443 或 -p 1-65535]
--proxy string 使用代理扫描,支持http/socks5协议 [例如 --proxy socks5://127.0.0.1:1080]
-t, --thread int 并发线程数 (默认 500)
--timeout int 响应超时时间,默认为5秒 (默认 5)
--type string 指定类型 [例如 --type tcp/--type udp]
-u, --uri string 指定目标URI [例如 -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
⛪ 讨论
- Dismap错误反馈或新功能建议 点击这里
- Twitter: https://twitter.com/zhzyker
🌈 规则实验室
整个规则库是位于rule.go的一个结构体 大致格式:
Rule:
Name: name /* 定义规则名称 */
Type: header|body|ico /* 支持识别的类型,header、body、ico可以为任意逻辑组合,ico是单独请求favicon.ico并计算MD5 */
Mode: and|or /* 类型判断逻辑 */
Rule
InBody: str /* 指定响应体中存在哪些str */
InHeader: str /* 指定响应Header中存在哪些str */
InIcoMd5: str_md5 /* favicon.ico的MD5 */
Http:
ReqMethod: GET|POST /* 自定义请求方法,目前支持GET和POST */
ReqPath: str /* 自定义请求web路径 */
ReqHeader: []str /* 自定义Http请求的header */
ReqBody: str /* 自定义POST请求的body */
示例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)"}