Kali渗透测试之服务扫描1——banner捕获、服务识别、操作系统识别

        我们不能简单地通过端口号来识别端口上运行的应用,因此可以通过服务扫描来进行识别,从而有针对性地找到它的利用代码或者发现它的漏洞以及利用方法。本篇除了讲解如何识别端口所对应的服务,还会讲解如何识别目标操作系统。不同的操作系统自带的服务上面也会存在一些漏洞,因此我们可以利用漏洞的弱点直接取得目标系统的管理权,或者取得它的用户权限,然后在用户权限的基础之上进行本地提权,拿到它的管理员权限,进行后续渗透测试的攻击。

如何识别应用以及操作系统的版本?

  • Banner捕获
  • 服务识别
  • 操作系统识别
  • SNMP分析(通过系统内部信息来进行信息的探测和搜索,所以准确性也会比较高)
  • 防火墙识别(识别边界防火墙的类型以及过滤机制,从而绕过和躲避它)

一、服务扫描——Banner(准确性不高)

  • 获取软件开发商、软件名称、服务类型、版本号(可能直接发现已知的漏洞和弱点)
  • 只有建立完整的连接后才能获取目标系统的Banner信息,才能更准确地识别端口上运行的应用。
  • Banner并不是特别准确,它需要结合另类的服务识别方法——特征行为和响应字段,不同的操作系统对于同一请求的响应结果是不同的,因此不同的响应可用于识别低层操作系统。
  • 通过连接服务器的端口,使其返回banner信息,结果可能查不到,也可能是管理员伪造的。

1、nc

nc -nv 192.168.24.129 80

root@kali:~# nc -nv 192.168.247.129 80
(UNKNOWN) [192.168.247.129] 80 (http) open
get
HTTP/1.1 400 Bad Request
Date: Wed, 24 Apr 2019 14:48:54 GMT
Server: Apache/2.4.23 (Win32) OpenSSL/1.0.2j PHP/5.4.45
Content-Length: 226
Connection: close
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
</body></html>

2、socket —— 用于连接网络服务

root@kali:~# python
Python 2.7.14+ (default, Mar 13 2018, 15:23:44) 
[GCC 7.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import socket
>>> banner=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
>>> banner.connect(("192.168.247.129",80))    //创建连接
>>> banner.recv(1024)               //接收数据
''
>>> banner.close()                  //关闭连接
>>> exit()

        某些应用软件,它的Banner信息是不允许被抓取的,recv函数无返回将被挂起,因此需要对程序进行处理。针对该问题,下面的脚本进行了一些处理:

#!/usr/bin/python 
# -*- coding: utf-8 -*-
#该脚本用于实现Banner信息的扫描,如果Banner信息不能获取,则pass
 
import socket 
import select                             #通过一个select()系统调用来监视多个文件描述符的数组
import sys 
if len( sys.argv ) !=4:
	print "Usage - ./banner_grab.py [Target.IP] [First Port] [Last Port]" 		
	print "Example - ./banner_grab.py 1.1.1.1 1 100" 
	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)   #建立TCP连接
		bangrab.connect((ip,port))
		ready=select.select([bangrab],[],[],1)                     #连接间隔时间1秒 
		if ready[0]:               #ready[0]表示recv函数没有被挂起
			print "TCP Port " + str(port) + "." +bangrab.recv(2048) 
			bangrab.close()    #每发现一个端口,就要关闭TCP连接,避免建立太多的TCP连接,从而造成网络性能以及系统性能的下降
	except: 
		pass
root@kali:~# chmod +x banner.py
root@kali:~# ./banner.py 192.168.247.129 1 200       //目标主机加入了域
TCP Port 25.220 WIN-N7TAB1239LM.st13.com Winmail Mail Server ESMTP ready
 
TCP Port 110.+OK WIN-N7TAB1239LM.st13.com Winmail Mail Server POP3 ready
 
TCP Port 143.* OK IMAP4 ready! WIN-N7TAB1239LM.st13.com Winmail Mail Server MagicWinmail Extend IMAP 102

3、dimitry

  • dimitry -p 192.168.247.129                 //-p    TCP端口的扫描
  • dimitry -pb 192.168.247.129              //-b     从扫描到的端口中获取Banner信息
root@kali:~# dmitry -pb 192.168.247.129
Deepmagic Information Gathe
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值