Skip to content

将nmap指纹集成到扫描器中

字数
767 字
阅读时间
3 分钟
更新日期
5/5/2021

nmap真是一款神器,并且开源了这么多年依旧在更新。

image-20210505231856588

六天前依然在更新。

每次做扫描时调用nmap虽然没什么大碍,但也总想着能自己实现一款可控的端口指纹识别工具。

nmap指纹解析

nmap的指纹是开源的,下载 https://raw.githubusercontent.com/nmap/nmap/master/nmap-service-probes 这个文件就好。

image-20210505232242029

但是想调用它的指纹,你需要写一套脚本来解析它的格式。

关于指纹的格式描述可以参考下面链接

不想看也没关系,我根据上面的参考,写了一个脚本,可以将nmap的指纹转换为json可读的模式,只需要引入这个json文件,就更方便进行扫描的操作了。

脚本地址:https://github.com/boy-hack/nmap-parser

json化之后指纹是这样的

image-20210505233050346

每个字段的解释

  • protocol是协议,tcp或udp
  • probename是协议的名称
  • probestring是这个协议要发送的payload
  • ports是一个端口列表,在这个端口里才使用这个协议
  • matchessoftmatches是匹配的指纹列表
    • image-20210505233427821
    • 根据正则匹配就可以获取到name,版本等的信息了

用nmap做网络空间探测

有了指纹,就可以自己写一个关于网络空间探测的小玩具了,但要做大,还需要考虑一些可能的技术问题。

依稀记得@白帽会赵武 发过一篇文章。

指纹探测技术上可分为三类

  • 连接端口后,会回显一个包,这个包可以当作指纹

  • 发送一个包,会返回一个包,这个包可作为指纹

  • 发送一个包,这个包正确才会显示内容

根据nmap指纹就可以获得前两类的指纹信息了,后一类得靠自己根据协议自己实现了(这也是大厂的技术壁垒)。

还有一个壁垒就是扫描速度如何优化,用无状态扫描器,zmap或者masscan可以快速的扫描ip开放的端口,但是它们的运行原理只在握手的第一个包,所以它们只能进行探测。

进行指纹识别就要进行有状态的扫描,在无状态发包获取成功后再次发包变成正常的握手模式,再发各种探针来进行指纹识别,但此时速度肯定会有下降。

这里的流程可以优化为无状态发包,收到回复后继续无状态发送探针,然后标记,最后网卡收包的时候探测到这个标记的就行。

参考

撰写

布局切换

调整 VitePress 的布局样式,以适配不同的阅读习惯和屏幕环境。

全部展开
使侧边栏和内容区域占据整个屏幕的全部宽度。
全部展开,但侧边栏宽度可调
侧边栏宽度可调,但内容区域宽度不变,调整后的侧边栏将可以占据整个屏幕的最大宽度。
全部展开,且侧边栏和内容区域宽度均可调
侧边栏宽度可调,但内容区域宽度不变,调整后的侧边栏将可以占据整个屏幕的最大宽度。
原始宽度
原始的 VitePress 默认布局宽度

页面最大宽度

调整 VitePress 布局中页面的宽度,以适配不同的阅读习惯和屏幕环境。

调整页面最大宽度
一个可调整的滑块,用于选择和自定义页面最大宽度。

内容最大宽度

调整 VitePress 布局中内容区域的宽度,以适配不同的阅读习惯和屏幕环境。

调整内容最大宽度
一个可调整的滑块,用于选择和自定义内容最大宽度。

聚光灯

支持在正文中高亮当前鼠标悬停的行和元素,以优化阅读和专注困难的用户的阅读体验。

ON开启
开启聚光灯。
OFF关闭
关闭聚光灯。

聚光灯样式

调整聚光灯的样式。

置于底部
在当前鼠标悬停的元素下方添加一个纯色背景以突出显示当前鼠标悬停的位置。
置于侧边
在当前鼠标悬停的元素旁边添加一条固定的纯色线以突出显示当前鼠标悬停的位置。