信息收集之:主动信息收集——服务扫描
郑重声明:
本笔记编写目的只用于安全知识提升,并与更多人共享安全知识,切勿使用笔记中的技术进行违法活动,利用笔记中的技术造成的后果与作者本人无关。倡导维护网络安全人人有责,共同维护网络文明和谐。
3 服务扫描
在进行渗透测试的时候很多网络服务是漏洞频发的高危对象,对网络上的特定服务进行扫描,往往能让我们少走弯路,增加渗透成功的几率。因此很多渗透测试人员在确定了开放端口后,通常会对相应端口上所运行服务的信息进行更深入的挖掘,通常称为服务查点。
识别服务以及操作系统版本的方法
- Banner 捕获
- 服务识别
- 操作系统识别
- SNMP 分析(通过系统内部信息来进行信息的探测和搜索,所以准确性也会比较高)
- 防火墙识别(识别边界防火墙的类型以及过滤机制,从而绕过和躲避它)
3.1 Banner 捕获
主要获取内容:
- 软件开发商
- 软件名称
- 服务类型
- 版本号(直接发现已知的漏洞和弱点)
3.1.1 使用 nc 捕获连接时的 Banner 信息
nc -nv 192.168.100.129 22
3.1.2 使用 python 脚本捕获 Banner 信息
import socket
bangrab = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
bangrab.connect(('192.168.100.129', 22))
print(bangrab.recv(4096))
bangrab.close()
# 若不允许抓取 Banner,recv函数无返回将挂起
# 输出:b'SSH-2.0-OpenSSH_4.7p1 Debian-8ubuntu1\n'
# ---------------- 脚本升级 -----------------------
#!/usr/bin/python
import socket
import select
import sys
if len(sys.argv) != 4:
print("./ban_grab.py [Target IP] [First Port] [Last Port]")
print("Example: ./ban_grab.py 10.0.0.5 1 100")
print("Example will grab banners for TCP ports 1 through 100 on 10.0.0.5")
sys.exit()
ip = sys.argv[1]
start = int(sys.argv[2])
end = int(sys.argv[3])
for port in range(start, end):
try:
bangrab = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
bangrab.connect((ip, port))
ready = select.select([bangrab], [], [], 1)
if ready[0]:
print(