服务端扫描


title: 服务端扫描
date: 2016-05-29 15:50
tags: kali渗透测试 主动信息收集


0x00 碎语

我们已经知道,仅仅通过之前的方式扫描出来的端口来看,是不能绝对的认定哪个端口对应的就是某个服务软件或者协议的端口,这不是绝对的。

现在我们将透过表象去真正的探测那些活着的端口背后不为人知的真相,跑的何种应用,包括识别目标的OS版本,捕获Banner信息,以及防火墙识别,SNMP分析作为作为后续攻击的基础。

  • Banner信息
    通过banner信息可以获得包括软件开发商,软件名称,服务类型,版本号等信息,有可能通过已知的漏洞和弱点直接渗透到目标主机,当然所有的信息都可能不是真实的_,所有我们有必要结合一些另类的服务识别方法,比如,特征识别和响应字段,而不同的响应可用于识别底层的操作系统。除此外,若想获得对方的banner 信息,就必须通过直接连接的方法。

  • (简单网络管理协议)
    SNMP大概是所有网络管理员配置起来最容易出错的一项服务了。

  • 识别防火墙并绕过


0x01 Python Socket获取Banner信息

最简单的就是通过nv来简单查看一下。
Scapy最主要的作用是向网络里注入数据包,但是它缺乏对应用层的支持,比如很难去发送一个http包,ssh包,它主要针对于三四层网络中包的注入,劫持,嗅探。

此时便需要通过Scoket与目标进行tcp连接,以进行更多的应用层的信息传输。

进入Python,导入Scoket模块:
构建一个最简单的Socket连接

>>> import socket
>>> banner = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#这是一个建立socket的标准指令方式
#创建一个socket对象,并构建一个banner实例,用以建立一个tcp连接,SOCK_STREAM代表tcp连接
>>>banner.connect(("192.168.0.101", 21))
#连接目标端口
>>>banner.recv(4096)
#指定接收数据的大小
>>>banner.close()
#关闭连接

0x01 Python脚本实现Banner信息获取

#!/usr/bin/python
#-*-coding:utf-8-*-

import socket
import select
import sys

if len(sys.argv)!=4:
    print"Usage __ /banner_get.py [Target -IP]j [Fisrst Port] [Last Port]"
    print"Example __ /banner_get.py 1.0.1.0 1 100"
    print"Example will get banner 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:
    banget = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #表示建立tcp连接
    banget.connect((ip.port))
    ready = select.select([banget],[],[],1)#若超时时间为1
    if ready[0]:#如果ready=0表示没有被挂起的
      print"TCP Port"+str(port)+"."+banget.recv(4096)
      banget.close() #记得关闭连接,否则对双方来将都是一种伤害
  except:
    pass

0x02 NMAP获得Banner信息

NMAP获得banner信息主要是使用了一个banner脚本

➜  ~ nmap -sT 192.168.0.113 -p 100-500 --script=banner.nse

Starting Nmap 7.01 ( https://nmap.org ) at 2016-06-01 11:18 CST
Nmap scan report for 192.168.0.113
Host is up (0.00080s latency).
Not shown: 398 filtered ports
PORT    STATE SERVICE
135/tcp open  msrpc
139/tcp open  netbios-ssn

NMAP脚本的存放目录

➜  scripts cd /usr/share/nmap/scripts

0x03 AMAP

Kali里面除了一个NMAP以外还有一个AMAP,当然AMAP的主要作用便是用来识别端口后所运行的服务为何的。

__参数: amap -B ip port __

其中nmap的-B参数便是用来发现banner信息的。


0x04 NMAP特征识别

➜  ~ nmap 192.168.0.113 -p100-500 -sV

Starting Nmap 7.01 ( https://nmap.org ) at 2016-06-01 11:34 CST
Nmap scan report for 192.168.0.113
Host is up (0.00075s latency).
Not shown: 398 filtered ports
PORT    STATE SERVICE      VERSION
135/tcp open  msrpc        Microsoft Windows RPC
139/tcp open  netbios-ssn  Microsoft Windows 98 netbios-ssn
445/tcp open  microsoft-ds Microsoft Windows 10 microsoft-ds
MAC Address: 5C:F9:DD:6A:02:61 (Dell)
Service Info: OSs: Windows, Windows 98, Windows 10; CPE: cpe:/o:microsoft:windows, cpe:/o:microsoft:windows_98, cpe:/o:microsoft:windows_10

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 15.08 seconds

NMAP -sV参数不再只是简单的探测扫描目标端口,而是会发送一系列复杂的探测包,根据响应特征获得signature,获得的信息可信度大幅提高。

你可能感兴趣的:(服务端扫描)