第七章(六)—主动信息收集—服务扫描(Banner、服务识别)

服务扫描

找到了活着的ip、找到了开放的端口,下一阶段就是去识别开放端口上运行的应用。

  1. 识别开放端口上运行的应用

根据识别到的应用程序软件信息、版本,我们可以到相应的软件官方网站上去查找,如果是老版本的,可以去官方网站查找公布出来的老版本上存在的一些漏洞,这些漏洞就可以被利用,找到这些信息,就可以有针对性的找到利用代码,自己去发掘他的利用方式,可以用逆向工程、模糊测试的方式去发现漏洞及利用方法。

  1. 识别目标操作系统
    有些操作系统自带的服务上面也会存在一些漏洞。识别他是windows还是linux,版本是多少,操作系统上缺少那些个补丁,通过这些对操作系统版本的识别,我们可以发现目标系统上是否存在漏洞和弱点,利用这些漏洞和弱点,可能我们就可以直接取得目标系统的管理权或用户权,并在用户权限之上再进行本地提权拿到管理员权限,进行后续的渗透测试攻击。

如何提高攻击效率?

  • Banner捕获
    准确性最不高,这个信息有可能是目标服务器管理员伪造出来的,目标系统的加固方案里经常会有修改Banner、清楚Banner、改成错误的去迷惑扫描着。所以他只能作为一种获取信息的手段,不能把他当做确切的依据。
  • 服务识别
  • 操作系统识别
  • snmp分析
    通过snmp扫描识别,这个识别能够比较准确的识别目标系统上安装的软件以及他们的版本,snmp是通过系统内部信息来进行信息的探测。
  • 防火墙识别
    我们在扫描过程中,目标系统边界上也会有一些边界防火墙,所以我们在扫描过程中,也应当适当的去识别他的边界防火墙用的是那种类型的防火墙,会有怎么样的过滤机制,我们需要适当的绕过和躲避他。

1. Banner

通过Banner信息,我们有可能识别到:

  • 软件开发商
  • 软件名称
  • 服务类型
  • 版本号
    有可能通过这个版本号就直接定位到已知的漏洞和弱点

需要取得目标系统的Banner,就需要跟目标系统开放端口建立连接,这个时候使用隐蔽扫描,僵尸扫描,就起不到一个很好的效果,你必须建立完整的连接,才能取得目标系统的Banner信息,才能更准确的查看到底跑的是什么服务。
当然Banner是不准确的,还有结合另类的服务识别方法,像一些基于特征行为和特征响应字段的,或者特征的指纹信息的,当然不同的响应可用于识别不同的操作系统。

(1) nc
nc -nv ip 端口号

在这里插入图片描述

(2) socket

scapy缺少对应用层数据包的支持,比如发一个http的包,DNS的包,ssh的包,在scapy就很难手动的去定制这样的包,scapy主要就是基于三层、四层网络这种包的注入、劫持、嗅探,实现这个层面的功能,对应用层数据包的定义不够完整,也没有办法建立完整的会话。
所以要对一个应用,一个端口去建立完整的连接,然后再去进行应用层的通讯,这时最经常使用到的是python的一个模块socket。

通过socket我们可以跟目标系统建立TCP的连接,之后再跟目标服务器进行应用层的会话的数据传输。

基于socket来获取目标banner的过程如下:

python

#导入socket模块
import socket 
#在python里面创建一个socket的对象,对象名为banner,我中SOCK_STREAM就表示我们建立的是一个TCP的连接
banner=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#调用socket对象的connect方法,里面两个参数,第一个参数是目标ip,第二个参数是目标端口 
banner.connect(("192.168.1.134",21))
#调用socket对象的recv方法来接收数据,参数是接收数据的大小
banner.recv(4096)
#关闭
banner.close()
#退出
exit()

在这里插入图片描述
注意:
有些banner信息是不允许抓取的,recv函数无返回将挂起。真正的python编程过程中不能这么简单的处理socket连接,需要做一些程序上的处理,以免程序挂起不能继续响应。

脚本实例ban_grab.py:

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

if len(sys.argv)!=4;
   print "Usage - ./banner_grab.py [Target-IP] [First Port] [Last Port]"
   print "Example - ./banner_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 "TCP Port "+str(port)+"-"+bangrab.recv(4096)
       bangrab.close()
    except;
      pass

执行时:

chmod u+x ban_grab.py
./ban_grab.py 192.168.1.134 1 100

在这里插入图片描述

(3) dmitry
dmitry -p 192.168.1.163
#-p表示执行TCP扫描
dmitry -pb 192.168.1.163
#-b表示通过扫描端口读取banner返回信息
(4) nmap
nmap -sT 1.1.1.1 -p 22 --script=banner.nse
#通过banner脚本来实现banner的发现,必须使用完整的TCP链接,即-sT

可以通过/usr/share/nmap/scripts来查看namp的脚本。

(5) amap

amap专门用来发现开放端口后面跑的什么服务的程序。

amap -B 192.168.1.134 80
#-B 专门用来发现端口上的Banner信息
amap -B 192.168.1.134 1-65535
amap -B 192.168.1.134 1-65535 | grep on

2. 服务识别

(1) nmap

banner信息的信息抓取能力有限,所以要更完善的发现一个端口后面跑的是什么应用,就必须基于像nmap这种比较强大的,可以基于响应特征分析识别服务的扫描软件。nmap有非常丰富的特征库来通过一些指纹、特征去识别目标端口后面跑的服务。

nmap 192.168.1.134 -p1-100 -sV
#-sV 用来识别端口后面跑的什么服务,通过指纹特征匹配的方式去识别
(2) amap
amap 192.168.1.134 80
amap 192.168.1.134.1-100
amap 192.168.1.134 1-100 -q
amap 192.168.1.134 1--100 -qb

amap更多还是基于banner信息进行识别

SNMP

SNMP是网络管理员配置起来最最容易疏漏的一项服务。

  • 简单网络管理协议
  • Community strings
  • 信息查询或重新配置
  • 识别和绕过防火墙筛选
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值