zoukankan      html  css  js  c++  java
  • 信息收集之主动信息收集(一)

    信息收集之主动信息收集(一)

    主动信息收集:

      1.主机发现

        1.1二层主机发现

        1.2三层主机发现

        1.3四层主机发现

      2.端口扫描

        2.1TCP端口扫描

        2.2UDP端口扫描

        2.3僵尸扫描

      3.服务识别

        3.1 python socket

        3.2 dmitry -pb

        3.3 nmap

        3.4 amap -B

      4.操作系统识别

        4.1 nmap

        4.2 TTL

    主动信息收集

      直接与目标系统交互通信

      使用受控的第三方电脑进行探测

      使用代理或者已经被控制的主机

      使用噪声迷惑目标,淹没真实的探测流量  #伪造不同的IP给目标发送数据,并把真实的源IP的发包速率调低,以迷惑目标,让目标认为是别的IP在攻击它

      扫描:发送不同的探测,根据返回结果判断目标状态

    主机发现--二层发现

    原理:使用ARP协议,在网段内进行广播,看是否有回包

    1.arping实现二层主机发现

    arping实现了简单的二层发现,由于没有ip层的参与,所以是不可路由的。

    优点是速度快,准确性高

    缺点是不可路由,无法发现局域网以外的主机,只能发现同一网段内的主机

    arping 192.168.10.200 -c 1

      

    arping 192.168.10.200 -w 2

      

    arping 192.168.10.200 -c 1 |grep "Unicast" |cut -d' ' -f4

      

    shell脚本实现arping主机发现 

    #!/bin/bash
    #该脚本用于实现arping扫描整个网段
    
    if [ "$#" -ne 1 ]
    then 
       echo "用法:$0 eth0" 
       exit
    fi
    interface=$1
    net=$(ifconfig eth1|grep "inet addr" |awk '{print $2}'|awk -F":" '{print $2}'|cut -d "." -f1-3)
    for ((i=1;i<=254;i++))
    do
       arping -c 1 -I $interface $net.$i|grep "Unicast"|cut -d ' ' -f 4
    done

    运行效果如下: 

    2.nmap实现二层主机发现

    nmap 192.168.10.200 -sn    # -sn只进行主机发现,不进行端口扫描

      

    创建IP字典,nmap -iL iplist.txt -sn   #扫描特定IP列表的IP,只进行主机发现

      

    3.Netdiscover  专用于二层发现

    不仅支持主动arp检测,还支持被动的arp检测,即把网卡设置为混杂模式,收取所有局域网内的arp广播数据包,从而判断存活的ip

    主动模式扫描主机   #主动arp容易触发报警

    netdiscover -i eth0 -r 192.168.10.0/24  # -i指定所要侦听的网卡,-r指定ip段

      

    被动模式嗅探存活的主机

    netdiscover -p  开启监听,然后在另一个窗口,ping目标主机

      

    此时就可以看到netdiscover监听到主机

      

    4.Scapy实现二层主机发现

    给目标发送一个ARP数据包

      

     收到响应,说明目标主机存活

      

    主机发现--三层发现

    原理:使用IP/ICMP协议

    优点:相对于二层可以路由

    缺点:相对于二层速度慢,经常被防火墙过滤掉

    1.ping 实现三层主机发现

    ping 192.168.10.200 -c 2

      

    ping 192.168.10.200 -c 1 |grep 'bytes from' |cut -d' ' -f 4|cut -d':' -f 1

      

    2.Scapy实现三层主机发现

    给目标发送一个ICMP包,收到响应,说明目标主机存活

      

    3.fping实现三层主机发现

      

      

    4.hping3实现三层主机发现

    hping3 192.168.10.200 --icmp -c 2

      

    主机发现--四层发现

    原理:使用TCP/UDP协议

    优点:可路由并且可靠,不太可能被防火墙过滤掉

    缺点:基于状态过滤的防火墙可能过滤扫描

    虽然这里使用到了端口发现,但是四层发现阶段并不对端口进行解析,而是通过端口进行对ip是否存活的判断

    TCP发现:直接发送ACK数据包,一般来说状态为up的目标主机会返回一个RST数据包以终止这个不正常的TCP链接。也可以发送正常的SYN数据包,若果目标主机返回SYN/ACK或者SRT数据包,都可以证明目标主机为up状态。

    UDP发现:如果目标ip为up状态且UDP目标端口为关闭状态,目标主机就会返回一个目标端口不可达的数据包,这就可以证明目标主机是up状态(无论目标ip是down状态还是目标ip为up只要目标端口为开放状态,都不会有任何数据包返回,这是UDP的特点) #可以利用UDP的这一特点发送一个数据包给一个目标主机不可能开放的端口,如果收到icmp port-unreachable,说明目标主机存活。

    Scapy实现四层主机发现

    TCP

    1.发送一个ack包给目标主机,正常情况下up状态的目标ip会返回一个SRT数据包

      

    2.查看目标主机返回的包,可以看到有一个RET包,说明目标主机存活

      

    UDP

    给目标主机的一个不可能开放的UDP端口发送数据,得到(icmp port-unreachable),说明目标主机存活

      

    查看返回的数据包

      

     二、端口扫描

    TCP端口扫描   #基于连接的协议,三次握手

    TCP扫描有三种类型:全连接扫描,隐蔽扫描,僵尸扫描

    隐蔽扫描:发送完SYN数据包以及收到SYN/ACK数据包后不再发送SCK数据包,由于没有建立完整的TCP连接,所以在目标主机的应用日志中不会有扫描的记录,只会在ip层有记录,因而较为隐蔽。

    僵尸扫描:条件较为苛刻。首先要能够进行地址欺骗,其次僵尸机没有什么网络流量产生,最后僵尸机的ipid必须是递增的

    所有的TCP扫描方式都是基于三次握手的变化来判断目标的状态

    TCP端口扫描

    1.nmap实现TCP端口扫描

    nmap -sS 192.168.10.200 -p 80,21,23,25

      

    nmap -sS -iL iplist.txt -p 80,21,23

      

    2.Scapy实现TCP端口扫描

    给目标主机发送一个SYN数据包,看是否收到响应

      

    3.dmitry实现端口扫描

    dmitry -p 192.168.10.200   #默认150个常见的端口

      

    dmitry -p 192.168.10.200 -o scanport

      

    python脚本实现tcp端口扫描

    #!/usr/bin/python
    
    from scapy.all import * 
    if len(sys.argv)!=2:
        print("error,use example:./scanhost.py 192.168.10.0")
        sys.exit()
    
    ip=str(sys.argv[1])
    net=ip.split(".")[0]+"."+ip.split(".")[1]+"."+ip.split(".")[2]+"."
    
    for addr in range(120,140):
        response=sr1(IP(dst=net+str(addr))/TCP(dport=22,flags="A"),timeout=0.1,verbose=0)
        try:
            if (response[TCP].flags) =="R":
                print(net+str(addr)+"is up!")
        except:
            pass

    运行效果如下:

      

    僵尸扫描:

    1.确定僵尸机

    1.1首先攻击者寻找僵尸主机,先给僵尸机目标发送一个sys/ack数据包,收到僵尸机回复一个RST数据包并且IPID等于x

    1.2等一段时间再给僵尸机目标发送一个sys/ack数据包,收到僵尸机回复一个RST数据包,并且带有IPID值,如果IPID值为x+1,说明僵尸目标可以当成僵尸机,否则继续寻找别的僵尸目标

      

    2.确定完僵尸机之后,便开始僵尸扫描

    2.1向僵尸机发送SYN/ACK数据包,僵尸机会返回一个RST数据包,记录下ipip为y

    2.2向目标主机发送SYN数据包(原地址伪造成僵尸机)

    2.3若目标主机端口开放,则向僵尸机发送SYN/ACK数据包

    2.3.1 僵尸机收到SYN/ACK数据包,则向目标主机发送RST数据包,此时僵尸机ipid为y+1

    2.3.2攻击方向僵尸机发送SYN/ACK数据包,僵尸机返回一个RST数据包,此时ipid为y+2

    2.4若目标主机端口关闭,则向僵尸机发送RST数据包,此时僵尸机不会产生任何数据包

    2.4.1攻击方向僵尸机发送SYN/ACK数据包,僵尸机返回一个RST数据包,此时ipdi为y+1

    通过攻击方从僵尸机接收到的两个RST数据包的ipid可以判断目标主机的目标端口是否开放

    目标端口开放:

      

    目标端口不开放:

      

    僵尸扫描实验:

    实验环境:

    Kali(攻击者):192.168.10.128

    Linux 6.5 (目标):192.168.10.200

    Win7(僵尸机):192.168.10.129

    Scapy实现:

    下图说明目标主机的21号端口是开放的

      

    Nmap实现:

    1.首先寻找僵尸目标

    nmap -p445 192.168.10.0/24 --script=ipidseq.nse

     

    2.开始僵尸扫描

    nmap 192.168.10.200 -sI 192.168.10.129 -Pn    # -sI参数指定僵尸机  -Pn 跳过主机发现

      

    Python脚本实现僵尸扫描  

    #/usr/bin/python
    # -*- coding: utf-8 -*-
    
    from scapy.all import *
    import time
    #查找合适的僵尸机,根据IPID来判断目标僵尸是否是个好的僵尸机
    def IsZombie(zIP):
        response1=sr1(IP(dst=zIP)/TCP(dport=445,flags="SA"),timeout=1,verbose=0)
        time.sleep(1)
        response2=sr1(IP(dst=zIP)/TCP(dport=445,flags="SA"),timeout=1,verbose=0)
        if response1[IP].id+1==response2[IP].id:
            print "this is a very good zombie!"
            #开始僵尸扫描
            targetIP=raw_input("请输入目标的IP:")
            targetPort=int(raw_input("请输入要扫描目标机的端口:"))
            scan(zIP,targetIP,targetPort)
        else:
            print "this is not a good zombie!"
    
    #定义扫描函数
    def scan(zIP,targetIP,targetPort):
        #给僵尸机发生第一个SYN/ACK包
        rz1=sr1(IP(dst=zIP)/TCP(dport=445,flags="SA"),timeout=1,verbose=0)
        #给目标主机发送一个伪造地址的SYN数据包
        sr1(IP(dst=targetIP,src=zIP)/TCP(sport=445,dport=targetPort,flags="S"),timeout=1,verbose=0)
        #给僵尸机发生第二个SYN/ACK包
        rz2=sr1(IP(dst=zIP)/TCP(dport=445,flags="SA"),timeout=1,verbose=0)
        if rz1[IP].id+2==rz2[IP].id:
            print "目标targetIP的端口targetPort is UP"
        else:
            print "目标targetIP的端口targetPort is closed"
    
    ip=raw_input("请输入目标僵尸的IP:")
    IsZombie(ip)

    运行效果如下:

      

    UDP端口扫描

    Scapy 实现UDP端口扫描

    端口关闭: icmp port-unreachable

    端口开放:没有回包

    下图给目标主机udp53端口发送数据包,响应icmp port-unreachable,说明目标相应的端口关闭

      

    在目标主机开启UDP 53端口,然后测试,下图可以看到没有返回数据包,说明目标端口UDP53是开放的

      

    Nmap实现UDP端口扫描

    nmap 192.168.10.200 -sU -p 53

      

    Python脚本实现UDP端口扫描

    #!/usr/bin/python
    
    from scapy.all import * 
    if len(sys.argv)!=2:
        print("error,use example:./scanhost.py 192.168.10.0")
        sys.exit()
    
    ip=str(sys.argv[1])
    net=ip.split(".")[0]+"."+ip.split(".")[1]+"."+ip.split(".")[2]+"."
    
    for addr in range(120,140):
        response=sr1(IP(dst=net+str(addr))/UDP(dport=5555),timeout=0.1,verbose=0)
        try:
            if (response[TCP].flags) =="R":
                print(net+str(addr)+"is up!")
        except:
            pass

    三、banner捕获、服务扫描与识别

    banner     可能是管理员伪造的

      软件开发商

      软件名称

      服务类型

      版本号--直接发现已知的漏洞和弱点

    连接建立后直接获取banner

    另类服务识别方法

      特征行为和响应字段

      不同的响应可用于识别底层操作系统

    1.通过python socket获得目标服务的banner

      

    2.通过dmitry -pb获得目标服务的banner信息

    dmitry -pb 192.168.10.200

      

    3.通过nmap获得目标服务的banner信息

    nmap -sT 192.168.10.200 -p21,22,53 --script=banner

      

    4.通过amap获得banner信息   #专门用于发现开放端口后的服务的工具

    amap -B 192.168.10.200 21

      

    四、操作系统识别

      windows:128(65-128)    #TTL

      linux/unix:64(1-64)

      某些unix:255

    1.通过ttl值判断操作系统的类型

      

    2.通过nmap -O 识别操作系统的类型

    nmap -O 192.168.10.129

      

     

      

        

    ---------------------------------------------------------------------------------------------------------------

    信息收集之主动信息收集(二):https://www.cnblogs.com/yuzly/p/10658570.html 

     

      

      

      

  • 相关阅读:
    Oracle时间日期操作
    c# 语音卡控制语音卡实现电话录音
    ORACLE日期时间函数大全
    oracle的表分区
    如何应付表数据过大的查询问题?(如何尽量避免大表关联)[转]
    优化SQL Server数据库
    oracle知识回顾
    增强现实 artoolkit
    高负载系统架构设计
    三套.net支持库
  • 原文地址:https://www.cnblogs.com/yuzly/p/10652516.html
Copyright © 2011-2022 走看看