服务器banner信息扫描

0x00:简介

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

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

0x01:程序

于是乎,我们可以写一个小脚本扫描服务器的banner信息,以获取有用的信息。

from socket import  *
from concurrent.futures import ThreadPoolExecutor,as_completed

host=input('输入ip')
def scan(port):
    sock= socket(AF_INET,SOCK_STREAM)
    try:
        sock.settimeout(5)
        sock.connect((host,port))
        sock.send('hello\r\n'.encode())
        result=sock.recv(1024)
        print(result.decode())
    except Exception as e:
        print(e)
    finally:
        sock.close()

def main():
    with ThreadPoolExecutor(max_workers=int(input('设置线程数'))) as t:
        job_list = []
        for port in range(int(input('起始端口')),int(input('结束端口'))):
            obj = t.submit(scan,port)
            job_list.append(obj)
if __name__=='__main__':
    main()

0x02:解释

网上抄的:说一下细节,首先是 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)

0x03:结果

image.png

image.png

0x03:注意

1.没啥注意的,脚本问题很多,想优化哪里自己改就行
2.相关教程https://www.runoob.com/python/python-socket.html (socket )https://www.jianshu.com/p/6d6e4f745c27 (线程池)

你可能感兴趣的:(服务器banner信息扫描)