0x00:简介
在服务扫描中,主要就是去发现端口上跑的是哪个服务。探测目标端口开放,并不能确定其服务,有时候 21 并非 ftp,80 也并非 web。他们只是默认端口,但不代表不可以更改。如果一些服务开放的端口不是默认的话,信息搜集便会受到很大的局限性。
服务扫描分了两块,一个是 banner 信息获取,一个是服务识别,之前总结的 banner 信息获取中,banner 也存在不确定性,只能作为参考。而服务识别会更具有参考性,原理是根据服务上跑的程序特征来检测的,这块可以使用 amap 和 nmap,amap 上篇介绍过,是专用来发现端口后面跑的是什么服务的这么一个工具,nmap 神器都知道。
0x01:amap
之前介绍 amap 时,其获取 banner 信息的参数是 - B,因为 amap 是专用来探测端口后的服务的,所以默认情况下跟一个目标就可以使用,示例如下:
这个给出的端口后的服务相对来说准确率更高,他是通过端口后的服务运行特征和自己的特征库做对比得出的结果。默认情况下,amap 会在最后打印出未开放的端口,这个可以使用 - q 参数来取消,q 参数的作用是不打印关闭的端口,直打印开放的端口信息。示例如下:
amap 默认只给出了端口号后的服务名称,没有给出其详细信息,如果需要再打印其详细信息,可以通过 b 参数来获取,b 参数的作用是打印其获取到的 banner 信息,大 B 参数也是获取 banner 信息的,区别在于 B 参数说明是获取 banner 信息而不发送探针,这里的探针有很多探测行为,例如获取到服务后尝试默认账号密码登录这种,B 只获取 banner,不进行其他的行为。
而大写 B 和小写 b 的结果也是有差异的,因为大 B 只获取 banner 信息,不进行其他的探测和连接行为,所以很多内容发现不了。而小 b 也不会发送触发器,但小 b 会尽可能多的去探测原因在于 amap 默认会带一个 A 参数,A 参数的作用就是发送触发器,进行探测。所以指定大 B 时,便不会发触发器,而不指定大 B,其他命令都会默认进行触发器的发送。
执行结果区别如下:
其中大 B 只返回了 21 和 22 的 banner 信息,而小 b 返回会多点,也更详细一些,也包含了系统名称和服务器类型。
0x02:nmap
nmap 用来做服务发现,用到的参数是 sV,sV 帮助文档给的说明翻译过来就是确定开放端口后的服务和版本信息。这个参数还是经常用到的,且 nmap 的识别特征库也更丰富更全面,结果信息很具有参考性,示例如下:
这个结果还是很可靠的,给出了服务和版本,53 端口都给出了 bind 和其版本,这个 amap 的话是没有给的,但 amap 信息中也包含了 nmap 没有的,例如系统 metasploitable,两者结合是最好的结果。
0x03:总结
服务发现可以使用 amap 和 nmap 来确认,其给出的结果中可以互补,使自己获取到的信息更全面更准确。
公众号推荐:aFa攻防实验室
分享关于信息搜集、Web安全、内网安全、代码审计、红蓝对抗、Java、Python等方面的东西。