Dismap - 资产发现和识别工具
2023-6-26 20:19:28 Author: W小哥(查看原文) 阅读量:16 收藏

🌀 Dismap - Asset discovery and identification tool

     

Dismap 定位是一个资产发现和识别工具,他可以快速识别 Web/tcp/udp 等协议和指纹信息,定位资产类型,适用于内外网,辅助红队人员快速定位潜在风险资产信息,辅助蓝队人员探测疑似脆弱资产

Dismap 拥有完善的指纹规则库,目前包括 tcp/udp/tls 协议指纹和 4500+ Web 指纹规则,可以识别包括 favicon、body、header 等, 对于规则库的简介位于 RuleLab

扫描结果可直接丢给 Vulmap(>=0.8) 进行漏洞扫描。, 0.3 版本中改变了文本结果,新增了 json 文件结果,vulmap 将在 >= 1.0 支持联动

🏂 Run

Dismap 对 Linux、MacOS、Windows 均提供了二进制可执行文件,前往 Release 下载对应版本即可运行:

# Linux or MacOS
[email protected]:~$ chmod +x dismap-0.3-linux-amd64
[email protected]:~$ ./dismap-0.3-linux-amd64 -h

# Windows
C:\Users\zhzyker\Desktop> dismap-0.3-windows-amd64.exe -h

🎡 Options

  -f, --file string     从文件中解析目标进行批量识别
-h, --help 查看帮助说明
-i, --ip string 指定一个网段 [示例 -i 192.168.1.0/24 or -i 192.168.1.1-10]
-j, --json string 扫描结果保存到 json 格式文件
-l, --level int 指定日志等级 (0:Fatal 1:Error 2:Info 3:Warning 4:Debug 5:Verbose) (默认 3)
-m, --mode string 指定要识别的协议 [e.g. -m mysql/-m http]
--nc 不打印字符颜色
--np 不使用 ICMP/PING 检测存活主机
-o, --output string 将扫描结果保存到指定文件 (默认 "output.txt")
-p, --port string 自定义要识别的端口 [示例 -p 80,443 or -p 1-65535]
--proxy string 使用代理进行扫描, 支持 http/socks5 协议代理 [示例 --proxy socks5://127.0.0.1:1080]
-t, --thread int 并发线程数量 (默认 500)
--timeout int 超时时间 (默认 5)
--type string 指定扫描类型 [示例 --type tcp/--type udp]
-u, --uri string 指定目标地址 [示例 -u https://example.com]

🎨 Examples

[email protected]:~$ ./dismap -i 192.168.1.1/24
[email protected]:~$ ./dismap -i 192.168.1.1/24 -o result.txt -j result.json
[email protected]:~$ ./dismap -i 192.168.1.1/24 --np --timeout 10
[email protected]:~$ ./dismap -i 192.168.1.1/24 -t 1000
[email protected]:~$ ./dismap -u https://github.com/zhzyker/dismap
[email protected]:~$ ./dismap -u mysql://192.168.1.1:3306
[email protected]:~$ ./dismap -i 192.168.1.1/24 -p 1-65535

 Discussion

  • Dismap Bug 反馈或新功能建议点我

  • Twitter: https://twitter.com/zhzyker

  • WeChat: 扫码滴滴我入群聊

🌈 RuleLab

整个规则库是一个 struct 位于 rule.go 大致格式如下:

Rule:
Name: name /* 定义规则名称 */
Type: header|body|ico /* 支持识别的类型, header、body、ico 可任意逻辑组合, ico 为单独请求 favicon.ico 并计算 MD5*/
Mode: and|or /* 类型的判断逻辑关系 */
Rule
InBody: str /* 需要指定响应 Body 中存在 str 则命中 */
InHeader: str /* 需要指定响应 Hedaer 中存在 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:

即在响应Body中检查是否存在字符<flink-root></flink-root>

{"Apahce Flink", "body", "", InStr{"(<flink-root></flink-root>)", "", ""}, ReqHttp{"", "", nil, ""}},

规则库示例2:

自定义请求访问/myportal/control/main,判断自定义请求的结果中是否存在指定的 header 字符和 body 字符
可以发现均支持正则表达式

{"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" or "body|header|ico", "or|and" or "body|ico", "and"
不允许: "body|body", "or"
重复组合不允许通过类型指定,但可通过 InBody 判断字符内实现: "body", "", InStr{"(str1|str2)"}

    已整理成文档关注公众号回复“20230626”获取工具地址

文章来源: http://mp.weixin.qq.com/s?__biz=MzUzNDczNjQ2OQ==&mid=2247485572&idx=1&sn=22e1ad31917518510f6cf3d998ca0e63&chksm=fa9173becde6faa8564eba5397fd3d6d8296956139b021cdcb6e6c993a637d4ec6bad99af53f#rd
如有侵权请联系:admin#unsafe.sh