0%

主动信息收集1

主动信息收集

在与目标主机发生直接关系的情况下,收集最新的信息已经最真实的信息,但是不可避免的是可能被网管发现,所以我们要尽可能的避免被发现,可以使用代理或者其他的机器,再或者发送垃圾信息淹没真实的需求。

主机发现

通过各种协议进行主机的发现。

通过ARP(二层)

通过ARP进行主机的发现,速度快,并且很准确,但是缺点就是只能发现本网段的IP,极少数可能会发现其他网段的IP。

  1. arping 1.1.1.1 -c 1

    1. 通过这个酒而已判断网段主机是否存活,-c代表发送一个数据包,存在的话呢有返回数据的。
    2. -d参数:判断有没有欺骗(大概就这个功能,其实实际上就是判断一个IP有几个MAC)
  2. nmap 使用-sn参数进行主机存活发现(ARP方式)。

    1. 可以探测出来机器的类型
    2. -il 文件路径 -sn(可以进行文件里面IP的检索)
    3. 这个地方他并不是单纯的发送了arp数据包,还发送了DNS的反向域名解析。
  3. Netdiscover

    1. 专用ARP
    2. 支持主动和被动
    3. 被动的话呢是通过混杂模式(别人发广播包我能听到
    4. netdiscover -i eth0 -r 192.168.1.0/24
    5. netdiscover -p (混杂模式,被动发现)
  4. scapy是Python的一个模块,但是也可以单独拿出来用

    1. 进入之后使用命令就可以进行数据包的定制
    2. 例如使用:ARP().display() 就可以展示如何使用
    3. 展示之后可以发现它里面的结构其实就和ARP数据包的结构一样,我们只需要根据我们的需要去改写就好了。
    4. arp=ARP()
    5. arp.pdst=”192.168.209.1”
    6. answer=sr1(arp)
    7. answer.display()
    8. 第一句是来定义一个数据包结构,和ARP一样
    9. 第二句使用设置变量属性
    10. 第三个是发包,并将结果赋值给answer
    11. 最后一个是展示数据

响应数据
前面的就是数据,后面的padding是因为arp数据包的长度不够,补零。
scapy如果目标不存在,他会一直在发包,所以我们可以给他指定一个timetout超时时间,verbose是报告错误信息。

通过ICMP(三层)

第三层使用IP的协议,这个可以跨路由,并且速度快,但是缺点就是很大可能被防火墙拦截,出错率比较高。

  1. 通过ping命令可以进行ICMP的检验,-c参数是个数,-R参数路由追踪(发现比较远的网口IP,而traceroute发现的是比较近的那个网口IP,这都是相对于一个设备,就是说每个经过的每个路由有较远和较近的端口路由)

  2. traceroute是跟踪路由,原理是通过设置TTL从1递增,TTL减为0的时候,将会返回,所以我们可以一个一个追踪出来。

  3. 使用scapy进行数据的检验

    1. i=IP()
    2. p=ICMP()
    3. ping=(i/p)
    4. ping[ip].dst=”192.168.209.1”
    5. sr1(ping)
    6. 第一句和第二句是进行数据的设置,第三个是将两个协议进行拼接(ICMP运行于IP协议之上),第三个是设置IP包头的目的地址
    7. sr1(IP(dst=”192.168.209.1”)/ICMP())
    8. 上面的一行就等于上面的所有,ICMP是不需要配置的,自动帮我们配置好了就。
    9. 最好还是添加上timeout=0.1这种的时间超时给sr1,这样子快,否则scapy会一直在等待直到主机上线。
  4. namp

    1. -sn就是会去发送ICMP的数据包判断是否存在,当然在内网的时候会发送arp数据包,但是垮了好多路由的话呢他是会发送ICMP的数据包,也是会进行DNS的一个解析,他还会发送TCP的一个包(貌似是请求时间戳,但是一般不会得到响应)。
  5. fping

    1. 和ping的基本命令很像,但是回显的显示有点不一样
    2. 使用-g参数支持对一个地址段进行ping
    3. -f参数对一个文件进行进行发包
  6. hping

    1. –icmp 是发送ICMP数据包,-c数据个数

TCP/UDP(四层)

就是通过TCP的端口打开进行一个探测,准确性高,并且三层如果没发现,四层也是可以发现的。
优点就是准确性很高,即使有防火墙也有可能发现,但是速度很慢。

  1. TCP扫描

    • 发送未经请求的ACK包,就是说本来要握手的,但是我只发送一个ACK包,服务器会响应一个RST包,我们可以基于这个特性进行一个TCP的扫描IP是否在线。当然也可以发送SYN包进行检测。
  2. UDP扫描

    • 就是发送数据包,但是我们发送的数据一般不会得到响应(因为我们的数据不是服务器所期望的有效数据),只有当端口不存在的时候服务器才会给我们发送一个ICMP的端口不可达的数据包。
  3. scapy

    1. i=IP()
    2. t=TCP()
    3. r=(i/t)
    4. r[IP].dst=”192.168.126.1”
    5. r[TCP].flags=”A”
    6. sr1(r)
    7. 第五步是指定我们只是单纯的发送一个ACK包
    8. 响应
    9. 可以看到响应的是一个R(RST)的一个包
    10. 如果不存在的话呢不能响应(个别会就算存在也不响应)
    11. 上面的是TCP,下面说UDP
    12. i=IP()
    13. u=UDP()
    14. r=(i/u)
    15. r[IP].dst=”192.168.126.1”
    16. r[UDP].dport=12321
    17. a=sr1(r)
    18. 这个就是要发送一个UDP不存在的端口,理论上会返回一个端口不存在的响应包,但是不知道为什么我的就是没有响应。
    19. 当然其实有响应的话呢我们还是要判断一下IP包头中的protocol字段的值是否是1,是1的话呢是ICMP的包。
  4. nmap

    1. 使用命令:nmap 192.168.209.0-200 -PA 5333 -sn
    2. 这里从0开始是我抓包发现,他貌似第一个并不会跑,所以要跑.1的话呢就要从0开始
    3. 上面的命令是说,使用TCP的ACK方式进行检测
    4. 当然也可以使用-PU(UDP),-PO(使用三种数据包,ICMP,IPIP包头,IGMP)
  5. hping3

    1. 使用命令:hping3 --udp 192.168.209.1 -c 1
    2. 上述命令准确性不高,存活的话呢就会返回一个ICMP的端口不可达
    3. 使用命令:hping3 192.168.209.1 -c 1
    4. 上述是TCP的包
    5. 但是他发送的flags=0,没有任何标志,返回的话呢是返回一个RST+ACK,获得的话呢就说明存活
    6. 但是貌似我的网段不行