服务扫描获取 banner 信息的方法有哪些

news/2024/7/3 4:26:35 标签: nc, nmap, scapy, dmitry, amap

0x00:简介

banner 信息来表示欢迎语,其中会包含一些敏感信息,所以获取 banner 也属于信息搜集的范畴。在渗透测试中,典型的 4xx、5xx 信息泄露就属于 banner 泄露的一种。在 banner 信息中,可以获取到软件开发商、软件名称、服务类型、版本号等。而版本号有时候就会存在公开的 CVE 问题,可以直接进行利用。

banner 信息获取的基础是在和目标建立链接后的,只有建立的链接,才可以获取到相应的 banner 信息,当目标对 banner 信息进行隐藏或者配置了禁止读取时,这时的 banner 则获取不到。

0x01:nc

nc 在建立链接后会返回相应端口的 banner,命令格式为 nc -nv 1.1.1.1 xx,ip 直接跟端口即可,示例如下:

请输入图片描述

上图中,21,22,23,25 端口都是开放的,并返回了 banner 信息,包括使用的服务和版本号。24 端口是没有开放的,直接返回了拒绝链接。

0x02:scapy

除了 nc 外,python 中的 socket 模块也可以用来获取 banner 信息,之前在主机发现、端口扫描时经常用到 scapy,而在这里 scapy 不合适。scapy 可以理解为是用来构造数据包、发送数据包、修改数据包以及接收数据包的。而 socket 可以理解为是用来建立链接发送数据和接收数据的,用于网络服务,网络编程。进入 python 环境,简单的利用 socket 进行链接目标并返回 banner 信息的示例如下:

请输入图片描述

以上过程可写为 python 脚本,脚本示例如下:

#!/usr/bin/python
import socket
import select
import sys

if len(sys.argv)!=4:
    print"error:./banner.py 1.1.1.1 1 100"
    sys.exit()

ip = sys.argv[1]
start = int(sys.argv[2])
end = int(sys.argv[3])

for port in range(start,end):
    try:
        banner = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        banner.connect((ip,port))
        ready = select.select([banner],[],[],1)
        if ready[0]:
            print"TCP port "+str(port)+"-"+banner.recv(1024)
            banner.close()
    except:
        pass

先说一下上面脚本的总体流程,首先是需要四个参数,一个是 ip 地址,一个是起始端口号,一个是结束端口号,在 sys 系统模块的 argv 参数这里,作用是从外部获取输入的内容作为参数,文件名也属于参数,所以是四个。然后分别分别分配给变量 ip、start、end,循环端口号给到 socket,最后获取 banner 信息。

再说一下细节,首先是 socket.socket 的参数,第一个参数是输入地址类型,第二个是输入套接字类型。socket.AF_INET 是用于服务之间的网络通信。socket.SOCK_STREAM 是用于 TCP,这两个参数的选择项如下:

第一个地址类型:
socket.AF_UNIX:用于 Unix 系统进程间的通信。
socket.AF_INET:服务器之间的网络通信。
socket.AF_INET6:使用 IPv6 进行通信。

第二个套接字类型:
socket.SOCK_STREAM:流式的 socket,用于 TCP。
socket.SOCK_DGRAM:数据包式的 socket,用于 UDP。

而经常组合用到的有两种,一种是 TCP 的 socket,一种是 UDP 的 socket,他们分别如下:

TCP:socket.socket(socket.AF_INET,socket.SOCK_STREAM)
UDP:socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

脚本中的 connect 用来链接目标。select 作用在于获取链接状态,经常和 socket 一起使用,四个参数分别是链接状态,写入状态,错误状态和超时时间,脚本中只指定了第一个参数链接状态,写入和错误留的空,最后超时为 1 秒,即每过 1 秒 select 就会获取一下 banner 的链接状态。

脚本中 select 的作用在于,recv 获取字符的时候如果没有返回就会挂起,这样会影响后续的其他端口 banner 信息获取,所以用 select 指定链接状态和超时时间。连接后会返回 banner 信息,用 recv 读取然后打印,如果没有内容返回则不做任何处理。执行结果如下:

请输入图片描述

结果显示获取到了 21 和 22 的 banner 信息,看下 wireshark 的抓包过程:

请输入图片描述

通过 wireshark 抓包可以发现,如果端口是没开放的,则是返回的 RST/ACK 包,则没有 banner 信息,如果端口是开放状态,则进行了整个 tcp 的三次握手。

0x03:dmitry

除了 ncscapy 外,dmitry 也有此功能,dmitry 也属于端口发现中全链接扫描方式的一种,使用简单,参数如下:

请输入图片描述

参数不多,很简单的一个工具,p 参数用来做 tcp 扫描,b 参数用来获取 banner 信息,dmitry 默认扫描 150 个端口,执行如下:

请输入图片描述

获取 banner 信息如下:

请输入图片描述

0x04:nmap

强大的 nmap 肯定也有获取 banner 的方法,只不过是通过脚本实现的,因为 banner 获取是建立在连接的基础上的,所以需要用到 sT 参数,sT 用来连接目标,其命令和结果如下:

请输入图片描述

这里就体现出了 nmap 的强大,业界把 nmap 称为神器,电影也有 nmap 的身影,是有理由的。单从 banner 这块就获取到了其他命令没有获取到的一些结果,例如 23,25,53,80 这些,其 nmap 使用的 banner 脚本写的也很好,感兴趣可以看一下。

0x05:amap

还有一个工具是 amap,这个命令是用来发现端口后面跑的是什么服务,其中 B 参数是专门用来获取 banner 信息的,参数说明如下:

请输入图片描述

执行结果如下:

请输入图片描述

0x06:总结

这边博客记录了在服务扫描时获取 banner 的一些方法,其中有 ncscapynmapdmitryamap,通过上面介绍,可以发现 nmap 相对来说是更全面的。


                                                                      公众号推荐:aFa攻防实验室

                         分享关于信息搜集、Web安全、内网安全、代码审计、红蓝对抗、Java、Python等方面的东西。

                                                                      


http://www.niftyadmin.cn/n/1148024.html

相关文章

浅析C#深拷贝与浅拷贝

1.深拷贝与浅拷贝拷贝即是通常所说的复制(Copy)或克隆(Clone),对象的拷贝也就是从现有对象复制一个“一模一样”的新对象出来。虽然都是复制对象,但是不同的 复制方法,复制出来的新对象却并非完全一模一样,对象内部存在着一些差异…

盛大总裁唐骏将离职 有可能转向风投行业

《IT时代周刊》网络版3月28日18时25分上海消息,盛大总裁唐骏已向公司提交辞职报告,将于下周离任,并有可能自此结束“打工”生涯。 《IT时代周刊》网络版从多方获悉,唐骏已于近期向盛大公司递交辞职报告,并将于下周离任…

服务扫描之服务识别

0x00:简介 在服务扫描中,主要就是去发现端口上跑的是哪个服务。探测目标端口开放,并不能确定其服务,有时候 21 并非 ftp,80 也并非 web。他们只是默认端口,但不代表不可以更改。如果一些服务开放的端口不是…

LINQ之路 6:延迟执行(Deferred Execution)

LINQ中大部分查询运算符都有一个非常重要的特性:延迟执行。这意味着,他们不是在查询创建的时候执行,而是在遍历的时候执行(换句话说,当enumerator的MoveNext方法被调用时)。让我们考虑下面这个query&#x…

国产3G手机4月1日正式放号 主叫4角被叫免费

3月28日消息,中移动于今日召开媒体见面会,正式宣布将于4月1日起,在其所承建的8座奥运城市正式启动国产3G(即TD-SCDMA)的社会化业务测试和试商用,具体包括北京、天津、上海、青岛、秦皇岛、沈阳、深圳和广州…

目标操作系统识别

0x00:简介 操作系统识别判断有两种形式,一种是简单的根据 ttl 的值来做判断,一种是根据服务器的通信特征然后和已有的特征库做对比,最后做判断。 在识别的过程中也分两种形式,一种是主动探测,一种是被动探…

等了八年3G明起放号 昨天试用效果还是不佳

“还有两天就要放号了,但到目前为止,移动公司都无法向我提供——有哪些品牌哪些型号的TD手机出售、TD手机的价格大概是多少、3G话费和服务费具体收费标准是什么等必要信息,这个情况让我很困惑”。 昨天,消费者葛洪斌&#xff08…

flash初步尝试

1.pip install flask 验证 from flask import Flask 2.pip install sqlalchemy 3. pip install flask-sqlalchemy验证 from flask_sqlalchemy import SQLAlchemy