渗透测试技术----服务扫描(一)--Banner、服务版本扫描、操作系统识别

it2022-05-05  215

一、服务扫描简介

在进行渗透测试的时候,首先要收集信息,可以进行端口扫描,但是不能单纯的以端口来辨别服务,因为管理员为了安全起见,会将一些服务的端口进行修改,这样可以提高安全性,因此有必要对服务进行扫描。很多网络服务是漏洞频发的高危对象,对网络上的特定服务进行扫描,往往能让我们少走弯路,增加渗透成功的几率。因此很多渗透测试人员在确定了开放端口后,通常会对相应端口上所运行服务的信息进行更深入的挖掘,通常称为服务查点。

二、Banner

1.Banner中可能包含的信息

软件开发商软件名称服务类型版本号(可以通过版本号来发现已知的漏洞和弱点,这是最重要的)

2.获取Banner的方法

建立连接后可以直接获取Banner根据特征行为和响应字段获取Banner不同的响应也可以用于识别底层操作系统

3.获取Banner的途径

(1):nc nc -nv IP地址 开放的端口号(这个端口一定要开放,不然无法连接)

(2):python模块

(3):python脚本 很多系统不允许抓取banner信息,recv函数会被挂起,因此上面这种方法对于大多数系统都不能拿到Banner信息

python脚本代码如下

import socket import sys import time if len(sys.argv) != 3: #判断参数是否为3 print("argv error") sys.exit() else: ip = sys.argv[1] #将第一个参数设置为IP port = int(sys.argv[2]) #将第二个参数设置为端口 banner = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #socket.AF_INET表示IPv4 #socket.SOCK_STREAM表示TCP banner.connect((ip,port)) #连接到目标IP的目标端口 banner = banner.recv(4096) #将收到的数据包赋值给banner变量 time.sleep(10) print(s) #打印出收到的数据包 banner.close #关闭连接 exit()

执行结果如下

(4):dmitry dmitry -pb IP地址 –p:显示开放的TCP端口 –b:显示端口的Banner信息(没有显示的就是被管理员隐藏了)

(5):nmap(nmap中自带有进行Banner信息扫描的脚本) nmap -sT IP地址 -p 端口号 --script=banner.nse

-sT:进行全连接扫描(必须进行全连接才可以搜集到Banner信息)-p:指定端口或端口范围–script:指定脚本

如果不进行全连接,则无法搜集到Banner信息,如下图所示 nmap -sY IP地址 -p 端口号 --script=banner.nse

-sY:进行半连接扫描-p:指定端口或端口范围–script:指定脚本

(6):amap amap -B IP地址 端口号

-B:扫描端口对应服务的版本信息

但是Banner信息不一定准确,因为管理员可能会隐藏或者修改Banner信息,以此来提升系统的安全性

三、服务版本扫描

(1)nmap(这是服务扫描中最全面也是相对来说最可靠的,因此一般都用nmap来扫描) nmap IP地址 -p 端口号 -sV

-p:指定端口或者端口号-sV:指定让nmap进行版本探测

(2):amap amap IP地址 端口号 -qb

-q:不显示关闭的端口-b:打印ASCII码信息(详细信息)

四、操作系统识别

1.为什么要进行操作系统识别 通过对操作系统的识别可以判断目标主机是WINDOWS主机还是LINUX主机,可以进行进一步的探测

2.通过说明来判断操作系统 通常是通过TTL(Time To Live)存活时间来判断目标主机的操作系统

TTL<=64:LINUX/UNIX主机64<TTL<=128:WINDOWS主机TTL=255:某些UNIX主机

3.查看目标主机操作系统的途径

(1)scapy

扫描LINUX主机扫描WINDOWS主机

(2):python脚本

python脚本代码如下

from scapy.all import * import sys if len(sys.argv) != 2: #判断参数个数是否正确 print("argv is error!") else: ip = sys.argv[1] sys = sr1(IP(dst=str(ip))/ICMP(),timeout=3,verbose=0) #向目标主机发送数据包,并赋值为sys if sys[IP].ttl <= 64: print("The host is LINUX!") elif sys[IP].ttl <= 128: print("The host is WINDOWS!") else: print("The host is UNIX!")

执行结果如下

(3):nmap nmap -O IP地址

-O:扫描目标主机的操作系统版本

最新回复(0)