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