信息收集之:主动信息收集——发现
郑重声明:
本笔记编写目的只用于安全知识提升,并与更多人共享安全知识,切勿使用笔记中的技术进行违法活动,利用笔记中的技术造成的后果与作者本人无关。倡导维护网络安全人人有责,共同维护网络文明和谐。
主动信息收集特点:
- 直接与目标系统交互通信,无法避免留下访问的痕迹
- 做好被封杀的准备:
- 使用受控的第三方电脑进行探测
- 使用代理或已被控制的主机
- 使用噪声迷惑目标,淹没真实的探测流量
- 扫描:发送不同的探测,根据返回结果判断目标状态
- 一般主动信息收集分为:二层扫描,三层扫描,四层扫描,端口扫描,服务扫描
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

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

3711

被折叠的 条评论
为什么被折叠?



