渗透篇21-主动信息收集--服务扫描(继端口扫描 )

       问题来了,为什么发现开放端口后还要进行服务扫描呢?

因为往往这些开放端口上运行的应用并不是我们想象中的应用,换句话说22端口上可能并不是跑着SSH服务,也有可能跑的是HTTP服务。基于此考虑,我们需要进行服务扫描,进一步识别开放端口上运行的应用!

      下图表示服务扫描的目的:

                        

服务扫描的方法具体有以下几种:基于kali 2018

一、banner捕获

                        

                    ps:需要建立完整连接;banner信息可能被管理员篡改;有些应用不允许抓取banner信息;

1、工具使用--nc

                        

                        

扫描二维码关注公众号,回复: 141404 查看本文章

2、工具使用--socket

 ps:scapy缺乏对应用层数据包的支持,主要基于三层四层包的劫持嗅探,无法对一个应用(端口)建立完整连接;以下使用socket演示。

        

3、脚本使用--socket

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

if len(sys.argv) !=4:
	print "Usage: ./banner_grap.py [target ip] [first port] [last port]"
	print "Example : ./banner_grap.py 1.1.1.5 1 100"
	print "Example will grap banner for TCP ports through 100 on 1.1.1.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 


4、工具使用--dmitry

        dmitry -pb 192.168.43.32

        ps:-p:执行TCP端口扫描;-b:从扫描端口获取banner信息

           

5、工具使用--nmap

        nmap -sT 192.168.43.32 -p 22 --script=banner.nse

        

        

    

6、工具使用--amap

    ps:-B:基于banner信息探测端口上的服务

    amap -B 192.168.43.32 21

    amap -B 192.168.43.32 1-100

        

二、SNMP分析--渗透测试人员获取设备信息的金矿

         

 ps:监控网络交换机,服务器,firewall等等系统内部信息;

 ps:服务端端口161;客户端端口162;

 ps:经常被网络管理员错误配置;

 ps:SNMP的身份验证信息:community;默认值为public(只读权限),如未修改public字符串,则任何人都可以通过SNMP客户端或扫描工具利用public这个community去连接目标设备,获取详细配置信息;如果值为private(可写权限),则可以通过SNMP对目标服务器的配置信息进行修改;还有一些非标准的community特征字符,如admin、manager;可以构造一个community特征字段字典扫描;

ps:国际化标准组织制定了一个通用的SNMP管理信息库(MIB库);MIB库里存储查询指令的编号;客户端基于编号查询服务端信息,如CPU占用信息,内存,网络进程信息;不同设备厂商开发了MIB库,需要在客户端导入专有MIB库(思科的),发送特有编号给服务器查到厂家专有设备的信息;

ps:编号如1.3.6.1.4.1.77.1.2.25

环境配置:

                        

       ps:添加Windows组件-->管理和监视工具

                            

                        

                        

ps:打开并配置SNMP服务

ps:陷井项讲解:配置好SNMP服务后,本机就作为一个SNMP服务端;客户端机器对服务端提起查询请求,默认情况下服务端不会把机器上的性能参数变化向外发;配置了陷阱的SNMP服务端会主动把自己监控的性能参数发往陷阱目标(通常是监控服务器),基于这些信息如果性能超标的话,陷阱主机可以发出告警;



1、工具使用--onesixtyone

       

                        

ps:探测出硬件架构(基于三四层发现的nmap扫描一般不能发现);如果无结果可能目标服务端改变了community;

onesixtyone -c dict.txt -i hosts -o my.log -w 100

    

ps:community字典爆破;-i:主机列表

ps:宁玛派扫描134主机的SNMP端口开放否;

    

ps:然而目标主机161端口是开启的;说明nmap UDP扫描结果出错,并不可靠

2、工具使用--snmpwalk

        

        

         

        

        ps:每个MIB库的ID号可以通过在客户端导入相应厂商的MIB库进行查询

        

        ps:指定UID号针对性查询        

3、工具使用--snmpcheck

    snmap-check 192.168.43.208 -c public

            

            

            ps:易读性更好

三、服务识别

1、工具使用--nmap:指纹特征信息匹配识别

              nmap -sV 192.168.43.32 -P1-100

             

            PS:较banner信息识别更全面、详细、可信度更高、可识别隐藏服务(18000上跑的http服务)

2、工具使用--amap

    amap 192.168.43.32 1-100

            

            

            

            ps:不如nmap精确

            ps:-q:不报告closed的端口,不打印未识别的端口;-b:以ascii格式输出

四、操作系统识别

                 

                 ps:TTL起始值可被篡改       

1、工具使用--python脚本:ttl_os.py

#!/usr/bin/python
import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
from scapy.all import *
import sys

if len(sys.argv) !=2:
	print "Usage: ./ttl_os.py [IP address]"
	print "Example : ./ttl_os.py 1.1.1.5 "
	print "Example will perform ttl analysis to attempt  to determine the system is Windows or linux/unix"
	sys.exit()

ip = sys.argv[1]

ans = sr1(IP(dst=str(ip))/ICMP(),timeout=1,verbose=0)
if ans == None:
	print "NO respose was returned"
elif int(ans[IP].ttl)<=64:
	print "Host is Linux/Unix"
else:
	print "Host is Windows"

2、工具使用--nmap

    nmap -o 192.168.43.32

        

        

        

        

        

        ps:CPE:国际化标准组织给每种OS,软件,硬件做了一个CPE编号;通过编号识别进行判断。

3、工具使用--xprobe2

    ps:通过多种协议对目标系统进行扫描,根据回包判断指纹信息      ,然后得出结论;无nmap精确

    xprobe2 192.168.43.32        

    


    ps:一大串外星文,体验极为不佳;

4、工具使用--p0f:基于分析数据包信息判断操作系统信息

    

    ps:基于发包本机信息

    

    ps:基于回包判断远方主机信息


五、SMB扫描

SMB扫描

1、工具使用--nmap


ps:-v:表示详细显示;139(老版本),445(新版本);Windows系统默认开放,Linux系统也可能开放


ps:nmap -v 192.168.43.208 -p139,445 --open    筛选出open的机器


ps:nmap提供更准确的发现smb端口的脚本

nmap 192.168.43.208 -p139,445 --script=smb-os-discovery.nse




ps:也可以:nmap 192.168.43.32,208,137 -p139,445 --script=smb-os-discovery.nse

ps:判断smb是否有漏洞(已打补丁吗)

nmap -v -p139,445 --script=smb-check-vulns --script-argvs=unsafe=1 192.168.43.208 -Pn


ps:-Pn: Treat all hosts as online -- skip host discovery

ps:-script-argvs=unsafe=1会对系统造成破环,改为safe=1较稳但不如unsafe准确

ps:kali2018已经没有smb-check-vulns.nse脚本


2、工具使用--nbtscan

nbtscan -r 192.168.43.0/24

    

    ps:-r:使用本地端口137做扫描(兼容性最好);可以跨网段扫描

3、工具使用--enum4linux

    

    

ps:尝试建立空连接,failed

ps:不支持网段扫描,但是扫描结果较详细;包括账号,共享,os


五、SMTP扫描--发现目标系统的邮箱账号;25端口

1、工具使用--nmap

nmap smtp.163.com -p25 --script=smtp-enum-users.nse --script-args=smtp-enum-users.methods={VRFY}

        

nmap smtp.163.com -p25 --script=smtp-open-relay.nse

        

ps:一旦开放邮件中继(open-relay),黑客可以使用你的邮件服务器给受害者发送钓鱼邮件

2、脚本--smtp.py

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

if len(sys.argv)!=2:
	print "Usage: smtp.py <username>"
	sys.exit(0)

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
connect = s.connect(('smtp.163.com',25))
banner = s.recv(1024)
print banner + '------'

s.send('HELO '+ sys.argv[1] + '\r\n')
result=s.recv(1024)
print result
s.close()




六、防火墙识别

ps:边界防火墙内部机器向外发起连接,fw会开启临时一个高位端口,用以向外发起请求;源目的地址过滤,只允许某些IP对某端口发起访问

ps:利用以上方法判断防火墙的过滤规则;

1、脚本--fw_detect.py

#!/usr/bin/python

import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
from scapy.all import *
import sys

if len(sys.argv) !=3:
	print "Usage: ./fw_detect.py [target ip] [target port]"
	print "Example : ./fw_detect.py 1.1.1.5 445"
	print "Example will determine if fitering exists on port 445 of  1.1.1.5"
	sys.exit()

ip = sys.argv[1]
port = int(sys.argv[2])

ACK_response = sr1(IP(dst=ip)/TCP(dport=port,flags='A'),timeout=1,verbose=0)
SYN_response = sr1(IP(dst=ip)/TCP(dport=port,flags='S'),timeout=1,verbose=0)
if (ACK_response == None) and (SYN_response == None):
	print "Port is either unstatefully filtered or host is down"
elif ((ACK_response == None) or (SYN_response == None)) and not ((ACK_response == None) and (SYN_response == None)):
	print "Stateful filtering in place"
elif int (SYN_response[TCP].flags) == 18:
	print "Port is unfiltered and open"
elif int(SYN_response[TCP].flags) == 20:
	print "Port is unfiltered and closed"
else:
	print "Unable to determine if the port is filtered"

2、工具使用--nmap

nmap -p22 192.168.43.32 


nmap -p22 192.168.43.32 -sA


ps:nmap默认使用SYN扫描,-sA:ACK扫描

七、负载均衡识别

广域网负载均衡:

            通过DNS轮询实现负载均衡,同一个域名会被解析为多个A记录,多个ip;

            基于智能DNS,访问同一个域名在不同地点访问解析到的ip地址不同,保证响应速度;

            基于解析速度、链路状态,先把访问请求发给性能最好的服务器;           

服务器负载均衡:

            基于Nginx、Apache等应用层负载均衡;

            基于网络层设备的负载均衡;

ps:还有组件负载均衡等;探测负载均衡的目的:发现目标域名下的各个服务器,不同服务器安全防护和配置不一样,有些ip可能存在发现漏洞;

工具使用--lbd



ps:DNS负载均衡:一个域名被解析为两个ip;HTTP负载均衡:基于nginx;

ps:负载均衡设备通过过滤转发用户请求到后端服务器,进而保护隐藏真实服务器;


八、waf识别

ps:基于规则的waf总能被绕过;基于机器学习的方式几乎能防掉所有的sql注入攻击;

1、工具使用--wafw00f



ps:能够检测的waf产品




ps:通常微软使用的server是IIS,结果返回AkamaiGHost,说明微软使用了AkamaiGHost,waf产品;

2、工具使用--nmap脚本

nmap www.baidu.com --script=http-waf-detect.nse



ps:基于发送<script>alert(document.cookie)</script>请求被过滤判断存在waf



猜你喜欢

转载自blog.csdn.net/qq_38055050/article/details/80202555