信息收集之:主动信息收集——发现

本文详细介绍了主动信息收集的方法,包括二层、三层和四层探测技术。在二层探测中,提到了arping、netdiscover和SCAPY构造ARP数据包;三层探测涉及ping、NMAP、fping和hping;四层探测重点讲解了Scapy构造TCP和UDP数据包,以及NMAP和hping的应用。这些工具和技术用于判断目标主机的存在性,但可能触发安全报警并留下访问痕迹。

郑重声明:
本笔记编写目的只用于安全知识提升,并与更多人共享安全知识,切勿使用笔记中的技术进行违法活动,利用笔记中的技术造成的后果与作者本人无关。倡导维护网络安全人人有责,共同维护网络文明和谐。

主动信息收集特点:

  • 直接与目标系统交互通信,无法避免留下访问的痕迹
  • 做好被封杀的准备:
    • 使用受控的第三方电脑进行探测
    • 使用代理或已被控制的主机
    • 使用噪声迷惑目标,淹没真实的探测流量
  • 扫描:发送不同的探测,根据返回结果判断目标状态
  • 一般主动信息收集分为:二层扫描,三层扫描,四层扫描,端口扫描,服务扫描

1 发现

1.1 二层探测: 基于数据链路层的发现

  • 数据链路层的数据单位为帧,主要分为逻辑链路控制(LLC)和介质访问控制(MAC)
  • 其中主要的协议是 ARP 协议,ARP协议即地址解析协议,根据 IP 地址获取 MAC 地址的TCP/IP协议。它将 32 位 IP 地址解析为 48 位以太网地址,需要注意的是 ARP 协议对应二层广播包,而广播包是无法通过路由或网关访问外部地址的
  • 原理: 向网段内所有主机发送 ARP 包,通过是否存在回包判断主机是否存活

二层探测特点:

  • 优点:扫描速度快,可靠
  • 缺点:不可路由

1.1.1 arping

arping 192.168.100.1 -c 1
# 只选取存活的 host IP
arping 192.168.100.1 -c 1 | grep 'bytes from' | cut -d ' ' -f 5 | cut -d '(' -f 2 | cut -d ')' -f 1

arping_int.sh

#!/bin/bash
# arping 查询接口 IP 网段
if [ "$#" -ne 1 ]
then
    echo "Usage : ./arping_int.sh [Interface] \r\n eg: ./arping_int.sh eth1"
    exit
fi

interface=$1
prefix=$(ifconfig $interface | grep 'inet '| cut -d 't' -f 2 | cut -d ' ' -f 2 | cut -d '.' -f 1-3)
for addr in $(seq 1 254)

do
	echo $addr
    arping -c 1 $prefix.$addr | grep "bytes from" | cut -d " " -f 5 | cut -d "(" -f 2 | cut -d ")" -f 1
done

#代码中的if语句中$#代表输入的参数,-ne表示不等于,即该语句的意思是当输入的参数个数不为1时,则输出提示正确的输入方式;后面将输入的接口值赋值给interface变量;prefix变量为前缀,在其中先进行对interface变量进行ifconfig命令然后通过管道和cut命令来将整个信息筛选到只剩前缀,如10.10.10;接着是for循环语句,addr变量从1到254逐渐遍历,里面执行arping命令,其中地址为prefix作为前缀、addr作为后缀来实现遍历整个网段,再通过管道符和cut命令将grep命令符合的IP(这里只有返回了“bytes from”的才是存活的地址)筛选出来。

arping_file.sh

#!/bin/bash
# arping 查询文档中的 IP 主机是否在线 
if [ "$#" -ne 1 ]
then
    echo "Usage : ./arping_file.sh [filename]\r\neg: ./arping_file.sh ipaddr.txt"
    exit
fi

file=$1
for addr in $(cat $file)
do
	echo $addr
    arping -c 1 $addr | grep "bytes from" | cut -d " " -f 5 | cut -d "(" -f 2 | cut -d ")" -f 1
done

1.1.2 netdiscover

  • 专用于二层发现

  • 可用于无线和交换网络环境

  • 主动和被动探测

    • 主动: 容易触发报警
      netdiscover ‐i eth0 ‐r 192.168.1.0/24
    • 被动:
      netdiscover ‐p ‐i eth0 ‐r 192.168.1.0/24
      • 通过监听网络环境中 arp 包来发现主机

1.1.3 SCAPY 构造 ARP 探测数据包

  • 可作为Python库进行调用,也可作为单独的工具使用
  • 功能:抓包、分析、创建、修改、注入网络流量
# 查看当前 ARP 数据包信息
>>> ARP().display()
###[ ARP ]### 
  hwtype= 0x1
  ptype= IPv4
  hwlen= None
  plen= None
  op= who-has
  hwsrc= 00:50:56:2b:0a:85
  psrc= 172.30.54.33
  hwdst= 00:00:00:00:00:00
  pdst= 0.0.0.0
>>> arp=ARP()
# 修改 ARP 数据包信息
>>> arp.pdst='172.30.0.2'
>>> arp.display()
###[ ARP ]### 
  hwtype= 0x1
  ptype= IPv4
  hwlen= None
  plen= None
  op= who-has
  hwsrc= 00:50:56:2b:0a:85
  psrc= 172.30.54.33
  hwdst= 00:00:00:00:00:00
  pdst= 172.30.0.2
  
# 发送修改后的数据包
>>> sr1(arp)
Begin emission:
Finished sending 1 packets.
*
Received 1 packets, got 1 answers, remaining 0 packets
<ARP  hwtype=0x1 ptype=IPv4 hwlen=6 plen=4 op=is-at hwsrc=80:05:88:41:de:c1 psrc=172.30.0.2 hwdst=00:50:56:2b:0a:85 pdst=172.30.54.33 |<Padding  load='\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' |>>   
>>> 

# 保存接收到的数据
>>> recv=sr1(arp)
Begin emission:
Finished sending 1 packets.
*
Received 1 packets, got 1 answers, remaining 0 packets
# 打印保存的数据
>>> recv
<ARP  hwtype=0x1 ptype=IPv4 hwlen=6 plen=4 op=is-at hwsrc=80:05:88:41:de:c1 psrc=172.30.0.2 hwdst=00:50:56:2b:0a:85 pdst=172.30.54.33 |<Padding  load='\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' |>>

# 查看回包信息
>>> recv.display()
###[ ARP ]### 
  hwtype= 0x1
  ptype= IPv4
  hwlen= 6
  plen= 4
  op= is-at
  hwsrc= 80:05:88:41:de:c1
  psrc= 172.30.0.2
  hwdst= 00:50:56:2b:0a:85
  pdst= 172.30.54.33
###[ Padding ]### 
     load= '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'                               

# 直接通过 ARP() 查询
>>> sr1(ARP(pdst='172.30.0.1'),timeout=1,verbose=0)
<ARP  hwtype=0x1 ptype=IPv4 hwlen=6 plen=4 op=is-at hwsrc=00:74:9c:fd:7a:73 psrc=172.30.0.1 hwdst=00:50:56:2b:0a:85 pdst=172.30.54.33 |<Padding  load='\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' |>>   
>>> 

1.2 三层探测:基于网络层的发现

  • 使用 IP、ICMP 协议探测主机是否存在
  • 优点:可路由
  • 缺点:可能会发生被防火墙过滤的情况

1.2.1 ping

ping 8.8.8.8
ping -c 1 8.8.8.8 | grep 'bytes from' | cut -d ' ' -f 4 | cut -d ':' -f1
# ping 必须要输出结果后,才可以对数据进行处理

ping.sh

#!/bin/bash
# 批量 PING
if [ "$#" -ne 1 ]
then
    echo "Usage : ./pinger.sh [/24 network address]"
    exit
fi

prefix=$(echo $1 | cut -d '.' -f 1-3)

for addr in $(seq 1 254)
do
    ping -c 1 $prefix.$addr | grep "bytes from" | cut -d " " -f 4 | cut -d ":" -f 1
done
# 关键代码就是通过ping命令然后再管道到grep“bytes from”,只有包含该字符串的才是存活的主机,最后通过管道和cut命令将其筛选出来。

ping.py

#!/usr/bin/python

import
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值