主动信息收集
什么是主动信息收集
主动信息收集指的是主体根据自身需求和目标,通过主动搜集、查询、调查等方式,积极主动地获取所需的信息。在主动信息收集中,个体或组织作为信息的主动者,主动发起搜索和查询行为,以获得所需的有用信息
主动信息收集的原理
主动信息收集的特点
1直接与目标系统交互通信 2.无法避免留下访问的痕迹 3.使用受控的第三方电脑进行探测,使用代理或已经被控制的机器,做好被封杀的准备 4.扫描发送不同的探测,根据返回结果判断目标状态
发现目标主机的过程
1识别存活主机,发现潜在的被攻击目标
2输出一个IP 地址列表比如IP 地址段 IP 地址范围
3使用二、三、四层进行探测发现
OSI七层模型和 TCP/IP 五层模型
OSI 参考模型和 TCP/IP 模型的各层以及它们的解释:
OSI 七层模型 | 各层的解释 | TCP/IP 五层模型 | 对应的网络设备关系 | 对应的协议关系 |
---|---|---|---|---|
应用层 | 为应用程序提供服务 | 应用层 | 应用层 | HTTP Telnet FTP TFTP DNS SMTP |
表示层 | 数据格式转化、数据加密 | 同上 | 同上 | 同上 |
会话层 | 建立、管理和维护会话 | 同上 | 同上 | 同上 |
传输层 | 建立、管理和维护端到端的连接 | 传输层 | 四层交换机、四层的路由器 | TCP UDP |
网络层 | IP 选址及路由选择 | 网络层 | 路由器、三层交换机 | IP ICMP RIP IGMP |
数据链路层 | 提供介质访问和链路管理 | 数据链路层 | 网桥、以太网交换机、网卡 | ARP RARP IEEE802.3 PPP CSMA/CD |
物理层 | 在物理媒介上传输比特流 | 物理层 | 中继器、集线器、双绞线 | FE自协商 Manchester MLT-3 4A PAM5 |
请注意,TCP/IP 模型是一个简化的模型,将 OSI 模型的表示层和会话层合并到应用层,将数据链路层和物理层合并为一个层级。因此,在 TCP/IP 模型中没有专门的表示层和会话层。
基于OSI模型进行扫描的优缺点
1.二层扫描的优缺点 优点:扫描速度快、可靠 缺点:不可路由
2三层扫描的优缺点 优点:可路由,速度较快 缺点:速度比二层慢,经常被边界防火墙过滤使用IP、icmp协议
3四层扫描的优缺点
优点:
可路由且结果可靠 不太可能被防火墙过滤 可以发现所有端口都被过滤的主机
缺点:
基于状态过滤的防火墙可能过滤扫描 全端口扫描速度慢、
端口扫描
端口定义
在计算机网络中,端口是一种抽象的软件结构,包括一些特定的协议和数据结构。它用于区分不同的进程或服务,每个端口都与一个特定的进程或服务相对应,通过端口号来唯一标识。
端口分类
根据端口号的范围,端口可以分为三类:
- 知名端口(Well-Known Ports):0到1023号,由Internet Assigned Numbers Authority (IANA)维护,对应一些固定的、被广泛使用的服务。例如,80端口通常用于HTTP服务,443端口用于HTTPS服务。
- 注册端口(Registered Ports):1024到49151号,可以被应用程序和进程使用,但需要在IANA进行注册。
- 动态或私有端口(Dynamic or Private Ports):49152到65535号,不需要注册就可以使用,通常被临时任务使用。
端口查看
在Linux系统中,你可以使用netstat
命令或者lsof
命令来查看当前系统的端口使用情况。在Windows系统中,你可以使用netstat
命令或者资源监视器来查看端口使用情况。
常用端口和常见端口漏洞利用方式
以下是一些常用的端口号和它们通常对应的服务:
- 21:FTP
- 22:SSH
- 23:Telnet
- 25:SMTP
- 53:DNS
- 80:HTTP
- 110:POP3
- 443:HTTPS
- 445:Microsoft-DS (SMB)
- 3306:MySQL
- 3389:Remote Desktop Protocol (RDP)
每个服务都有可能存在漏洞,攻击者可以通过这些漏洞进行攻击。例如,旧版的FTP服务可能存在匿名访问漏洞,旧版的SSH服务可能存在弱密码或未修补的软件漏洞。对于445端口,MS17-010(永恒之蓝)就是一个被广泛利用的漏洞。
最佳的防御措施是保持系统和服务的更新,定期进行安全审计,以及使用复杂且不易被猜测的密码。
基于 ping 命令的探测
ping命令:
ping
是一个常用的网络工具,用于检测主机之间的连通性。它通过向目标主机发送 ICMP (Internet Control Message Protocol) 回显请求消息,并等待目标主机返回回显应答消息来测试网络连接。
ping -c [count] [destination]
“[count]”是要发送的ping请求的数量,”[destination]”是目标的IP地址或域名
根据操作系统和ping工具的不同,选项的语法和名称可能会有所不同。上述示例适用于大多数Linux和Unix类操作系统。如果你使用的是Windows操作系统,可能需要使用不同的选项,如”-n”来指定ping请求的数量
traceroute命令:
traceroute
是一个常用的网络工具,用于跟踪数据包从本地主机到目标主机在网络上的路由路径。通过发送一系列的数据包,每个数据包在路由中途被一个节点(路由器)记录下来,traceroute
命令可以显示数据包经过的所有中间节点,并计算出每个节点的延迟时间
traceroute [选项] 目标主机
常用选项:
-m max_ttl
:设置最大跃点数(TTL),即指定数据包的最大可达距离。-n
:以 IP 地址而非主机名显示路由节点。-q num
:设置每个跃点发送的请求数量。
arping命令
ARPing是地址解析协议(Address Resolution Protocol)的简称。它是一种用于在局域网中将IP地址映射到物理MAC地址的网络协议。每个网络设备都有一个唯一的物理地址,即MAC地址,用于在本地网络中进行通信。而在IP网络中,设备之间通过IP地址进行通信。
当一个设备需要向另一个设备发送数据时,它首先会检查目标设备的IP地址是否在同一局域网内。如果目标设备与发送设备在同一局域网内,那么发送设备可以直接发送数据。但如果目标设备不在同一局域网内,发送设备就需要知道目标设备的MAC地址才能正确传输数据。
这时候,发送设备就会使用ARP协议发送一个ARP请求广播到局域网内的所有设备,请求目标设备的MAC地址。目标设备收到ARP请求后,会通过ARP回应将自己的MAC地址发送给发送设备。发送设备接收到ARP回应后,就可以将目标设备的MAC地址与目标IP地址进行关联,然后将数据包发送到目标设备。
因此,ARPing实际上是指通过发送ARP请求来获取目标设备的MAC地址的过程。它在局域网环境中起着重要的作用,使得设备可以准确地将数据传递给目标设备。
arping 192.168.1.1 -c 1 | grep "bytes from"
arping 192.168.1.1 -c 1 | grep "bytes from" | cut -d " " -f 5
arping 192.168.1.1 -c 1 grep "bytes from" cut -d " " -f 5 cut -d "(" -f 2 cut -d ")" -f 1
执行arp命令,并截取出ip地址————输出:192.168.1.1
cut
:执行cut
命令,用于从输入行中提取特定字段。-d " "
:指定字段分隔符为空格。-f 5
:指定要提取的字段为第 5 个字段。
多抓mac地址脚本
脚本:arping1.sh
#!/bin/bash
if ["$#" -ne 1 ];then #判断用户是否输入了至少一个参数如果没有输入参数,输出提示信息并退出
echo "Usage - ./arping.sh [interface]"
echo "Excample - ./arping.sh etho"
echo "Example will perform an ARP scan of the local subnet to which eth0 is assigned"
exit
fi
interface=$1 #将用户输入的参数传递给 interface变量
prefix=$(ifconfig $interface | grep "inet" | cut -d 't' -f 2 | cut -d '.' -f 1-3) #获取本机IP地址网段192.168.1
##对整个网段进行arping
for addr in $(seq 1 254);do
arping -c 1 $prefix.$addr grep "bytes from" | cut -d " " -f 5 | cut -d "(" -f 2 | cut -d ")" -f 1
done
脚本的整体作用是执行本地子网的 ARP 扫描,逐个遍历子网中的 IP 地址并输出相应的 MAC 地址。
netdiscover
主动模式:
主动模式顾名思义就是主动的探测发现网络内主机,但是这种方式往往会引起网络管理员的注意
netdiscover i eth0 -r 192.168.1.0/24
参数: -i device: your network devicee
-r range: “-r”表示扫描指定的IP范围,而”192.168.0.0/24”是要扫描的子网
被动模式:
被动模式的方法更加隐蔽,但是速度会比较慢,网卡被设置为混杂模式来侦听网络内的 arp 数据包进行被动式探测,这种方式就需要网络内设备发送 arp 包才能被探测到。
netdiscover -p
参数: -p passive mode: 在被动模式下,Netdiscover不会发送任何ARP请求以主动发现网络上的设备,而是静默地监听网络,只收集通过网络发送的ARP包。这种模式的优势在于,它对网络的影响最小,不会引起目标系统或网络监控工具的警报。
可以使用man netdiscover
或netdiscover -h
来查看所有的选项和用法
hping3:
hping3
是一个网络工具,可用于生成并分析各种类型的网络数据包,如ICMP、TCP、UDP等。它可以用于网络安全测试、防火墙和IDS测试、网络扫描、路由跟踪等多种场景。
以下是一些hping3
的基本用法:
发送TCP SYN包(常用于端口扫描):
hping3 -S <目标IP> -p <目标端口>
发送TCP ACK包(常用于防火墙规则测试):
hping3 -A <目标IP> -p <目标端口>
发送ICMP Echo请求(类似于ping命令):
hping3 -1 <目标IP>
发送UDP数据包:
hping3 -2 <目标IP> -p <目标端口>
可能被滥用
两个例子说明
hping3
如何可能被滥用:洪水攻击:这是一种DoS(Denial of Service,服务拒绝)攻击,通过向目标发送大量数据包来消耗其资源。例如,下面的命令会向目标IP发送大量的ICMP Echo请求(ping请求):
hping3 -1 --flood <目标IP>
在这个命令中,
-1
表示使用ICMP,--flood
表示以最快的速度发送数据包。SYN洪水攻击:这也是一种DoS攻击,通过向目标发送大量未完成的TCP连接请求,以消耗其资源。例如:
hping3 -S --flood -p 80 <目标IP>
在这个命令中,
-S
表示使用SYN标志,--flood
表示以最快的速度发送数据包,-p 80
表示目标端口为80。
ddos与hping3:
DDoS(分布式拒绝服务)攻击和hping3模拟的攻击之间存在一些重要区别:
- 资源规模:DDoS攻击通常涉及大量的机器参与,形成一个分布式网络(botnet),以同时向目标系统发送大量流量或请求。这使得DDoS攻击可以产生巨大的带宽消耗和服务过载。而hping3是一个单机工具,无法实现类似规模和效果的攻击。
- IP地址:在典型的DDoS攻击中,攻击者使用控制的僵尸计算机或通过操纵网络协议来伪造大量不同的IP地址。这样可以增加攻击的复杂性和欺骗性,使防御更加困难。相比之下,hping3发送的数据包通常会显示真实的源IP地址,除非使用其他技术进行欺骗。
- 合法性:DDoS攻击是非法行为,违反了许多国家/地区的法律法规。对于个人用户或未经授权的使用者来说,实施DDoS攻击是严重违法的行为,可能导致刑事指控和严厉的法律后果。hping3作为一个网络工具,可以用于合法的网络测试和研究目的,但需要在合规和授权的环境中使用。
总结起来,DDoS攻击是一种恶意行为,涉及大规模的资源消耗和伪造IP地址的操作。hping3仅是一个网络工具,可以用于模拟某些攻击情景,并在合法的环境下进行网络测试。但它无法达到典型DDoS攻击的规模和效果,并且使用hping3实施未经授权的攻击是非法的。
fping:
fping
是一种网络诊断工具,它的主要目的是快速检查一组IP地址,看看哪些是活动的,哪些是不活动的。它与经典的ping
工具的主要区别在于,fping
是设计来检查多个IP地址的,而ping
主要是用来检查单个IP地址。
以下是一些fping
的基本用法:
检查单个IP地址:
fping 192.168.0.1
检查多个IP地址:
fping 192.168.0.1 192.168.0.2 192.168.0.3
从文件中读取IP地址进行检查:
fping -f ip_addresses.txt
其中,
ip_addresses.txt
是一个包含要检查的IP地址的文件,每个IP地址占一行。
基于Nmap的扫描方式
Nmap的基本扫描方式
Nmap,也就是Network Mapper,最早是Linux下的网络扫描和嗅探工具包。
针对全连接扫描和半连接扫描(了解tcp三次握手),相应的Nmap命令如下:
全连接扫描:这也被称为TCP connect()扫描,可以使用-sT选项来进行。
nmap -sT <目标IP>
半连接扫描:这也被称为SYN扫描,可以使用-sS选项来进行。需要注意的是,这种扫描方式通常需要管理员权限。
nmap -sS <目标IP>
nc端口扫描:
nc
,全称netcat,是一个简单而强大的网络工具,可以用于读取和写入网络连接。由于其多功能性,它被誉为网络界的”瑞士军刀”。在端口扫描上,使用nc
命令扫描目标主机的开放端口。
以下是一些nc
端口扫描的基本用法:
扫描单个端口:
nc -zv <目标IP> <端口号>
扫描一系列端口:
nc -zv <目标IP> <起始端口>-<结束端口>
实战1-使用scapy定制数据包进行高级扫描
Scapy的强大之处在于它能够让你定制数据包进行各种复杂的网络任务,包括高级的端口扫描。以下是使用Scapy进行TCP SYN扫描(半连接扫描)和TCP connect扫描(全连接扫描)的示例:
1. TCP SYN扫描(半连接扫描)
from scapy.all import IP, TCP, sr1
target_ip = "192.168.0.1"
target_port = 80
ip = IP(dst=target_ip)
syn = TCP(dport=target_port, flags='S')
packet = ip/syn
response = sr1(packet, timeout=2)
if response:
if response[TCP].flags == 'SA':
print(f"Port {target_port} is open.")
else:
print(f"Port {target_port} is closed.")
else:
print("No response received.")
这个代码会创建一个SYN数据包并发送到目标IP的目标端口,然后等待一个响应。如果收到的响应是SYN/ACK(即,flags是’SA’),则表示端口是开放的。如果没有收到响应,或者响应不是SYN/ACK,则表示端口是关闭的。
2. TCP connect扫描(全连接扫描)
Scapy没有内置的TCP connect扫描功能,所以如果你想进行这种扫描,可能需要使用其他的库,例如socket库。
import socket
target_ip = "192.168.0.1"
target_port = 80
try:
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((target_ip, target_port))
client.close()
print(f"Port {target_port} is open.")
except:
print(f"Port {target_port} is closed.")
这个代码会尝试连接到目标IP的目标端口,如果连接成功,则表示端口是开放的;如果连接失败,则表示端口是关闭的。
kali下的scapy使用:
sudo apt-get install python3-scapy
查看arp函数的用法
>>> ARP().display()
###[ ARP ]###
hwtype = 0x1
ptype = IPv4
hwlen = 6
plen = 4
op = who-has
hwsrc = 00:00:00:00:00:00
psrc = 0.0.0.0
hwdst = 00:00:00:00:00:00
pdst = 0.0.0.0
例:定义向192.168.1.1发送arp 请求的数据包
sr1函数作用:
sr1函数包含了发送数据包和接收数据包的功能
>>>sr1(ARP(pdst="192.168.1.1"))
Begin emission:
Finished sending 1 packets.
Received 2 packets, got 1 answers, remaining 0 packets
<ARP op=is-at hwsrc=00:11:22:33:44:55 psrc=192.168.1.1 hwdst=00:66:77:88:99:aa pdst=192.168.1.2 |>
这个输出表示Scapy收到了一个ARP响应,其中源硬件地址(hwsrc)是目标主机的MAC地址,源协议地址(psrc)是目标主机的IP地址。目标硬件地址(hwdst)和目标协议地址(pdst)则是发送ARP请求的主机的MAC地址和IP地址。
发现源地址 psrc=192.168.1.1,说明已经收到网关的应答包。
查看tcp函数的用法
>>> TCP().display()
###[ TCP ]###
sport = ftp_data
dport = http
seq = 0
ack = 0
dataofs = None
reserved = 0
flags = S
window = 8192
chksum = None
urgptr = 0
options = {}
这显示了一个TCP数据包的默认值,包括源端口(sport)、目标端口(dport)、序列号(seq)、确认号(ack)、数据偏移(dataofs)、保留位(reserved)、标志(flags)、窗口大小(window)、校验和(chksum)、紧急指针(urgptr)和选项(options)
实战 2-僵尸扫描
僵尸扫描的思维值得一学
什么是僵尸扫描?
僵尸主机: 僵尸主机是指感染僵尸程序病毒,从而被黑客程序控制的计算机设备。但是僵尸扫描中的僵尸主机指得是一个闲置的操作系统 (这里的闲置是指主机不会主动和任何人通信),且此系统中 IP 数据包中ID 是递增的。
IPID:指的是通信过中,IP 数据包中的ID。
僵尸扫描拥有极高的隐蔽特性,但是实施条件苛刻。
1.目标网络可伪造源地址进行访问 2.选择僵尸机,僵尸机需要在互联网上是一个闲置的操作系统,需要系统使用递增的IPID,比如XP 系统。
僵尸扫描过程图示
第一步:参考图1 (1)、攻击者向僵尸机发送SYN/ACK 确认包。 (2)、僵尸主机返回我们 RST 数据包关闭链接,RST 数据包中包含了IPID 信息。假设 IPID=Xe注:三次握手的第一个包是SYN,目标主机收到SYN 才会应答SYN/ACK,因为尸主机没有向我门发送SYN 请求。所以僵尸主机返回我们 RST 数据包关闭链接。第一步中,黑客的收获是: 知道了僵尸主机的 IPID
第二步:参考图2。 (1)攻击者修改IP 包头的 SRC字段为尸主机的IP,伪装成尸主机给目标主机发 SYN 请求.(2)、目标主机收到请求,如果端口是开放的就会返回给僵尸主机一个SYN/ACK 的数据包。(3)尸主机收到目标主机发来的 SYN/ACK 确认包,因为尸主机没有给你发 SYN 请求。所以僵尸主机给目标主机返回了一个 RST 数据包。这个数据包表示关闭连接。此尸主机对外发出一个数据包,所以僵尸主机的IPID 值+1。此时IPID 值为 X+1。
第三步:参考图 3 (1)、攻击者再次向僵尸主机发送 SYN/ACK 确认包 (2)、僵尸主机同样向攻击者返回了一个 RST 数据包,此僵尸主机对外又发出一个数据包,所以僵尸主机的IPID 值再+1。此时IPID 值为X+2
第四步:计算3次通信过中的IPID 值 (1)、攻击者查看僵尸主机返回的数据包中IPID 值为 X+2 (2)、攻击者对比在第一步中的IPID 值 X,发现增加了 2。 结论:肯定目标主机和僵尸主机通信了,能通信,就说明目标主机端口是开放的。
Python脚本实现僵尸扫描
from scapy.all import *
# 僵尸主机 IP 和目标主机 IP
zombie_host_ip = 'zombie_host_ip'
target_host_ip = 'target_host_ip'
target_port = 80
# 发送一个数据包到僵尸主机,获取 IP ID
ipid_start = sr1(IP(dst=zombie_host_ip) / TCP(dport=80), verbose=0)[IP].id
# 使用僵尸主机的 IP 作为源 IP,向目标主机发送一个 SYN 数据包
send(IP(src=zombie_host_ip, dst=target_host_ip) / TCP(dport=target_port, flags='S'), verbose=0)
# 再次向僵尸主机发送一个数据包,获取 IP ID
ipid_end = sr1(IP(dst=zombie_host_ip) / TCP(dport=80), verbose=0)[IP].id
# 比较两次获取的 IP ID,如果有变化,那么就可以推断目标主机的端口是开放的
if ipid_end > ipid_start:
print(f'Port {target_port} is open.')
else:
print(f'Port {target_port} is closed.')
这个脚本中,我们首先向僵尸主机发送一个 TCP 数据包并获取其 IP ID。然后我们伪造一个 TCP SYN 数据包,并将源 IP 设置为僵尸主机的 IP,将这个数据包发送到目标主机。最后我们再次向僵尸主机发送一个 TCP 数据包并获取其 IP ID。如果这两次获取的 IP ID 不同,那么就可以推断目标主机的端口是开放的。
NMAP实现僵尸扫描
假设
扫描主机 kali: ip:192.168.0.2
zombie kali: ip:192.168.0.1
目标主机 Windows: ip:192.168.0.7
root@kali:~# nmap -p445 192.168.111.111 --script=ipidseq.nse
Starting Nmap 7.01 ( https://nmap.org ) at 2023-07-14 05:12 EDT
Nmap scan report for 192.168.111.111
Host is up (0.00033s latency).
PORT STATE SERVICE
445/tcp open microsoft-ds
Host script results:
|_ipidseq: Incremental!
Nmap done: 1 IP address (1 host up) scanned in 0.49 seconds
使用Nmap的ipidseq.nse
脚本扫描IP地址为192.168.111.111的主机的445端口。这个脚本会检测目标主机的IP ID序列生成特性。在这个模拟的例子中,目标主机的IP ID序列是增量的,这意味着该主机可能可以作为僵尸扫描的僵尸主机
可以看到该主机的ipid是递增的,僵尸找到了,开始进行扫描 NMAP 僵尸扫描
root@kali:~# nmap -Pn -sI 192.168.0.2 192.168.0.1 -p 0-100
Starting Nmap 7.01 ( https://nmap.org ) at 2023-07-14 05:12 EDT
Nmap scan report for 192.168.0.1
Host is up (0.00033s latency).
PORT STATE SERVICE
1/tcp open tcpmux
2/tcp open compressnet
...
99/tcp open metagram
100/tcp open newacct
Nmap done: 1 IP address (1 host up) scanned in 0.49 seconds
对192.168.0.1执行僵尸扫描,使用192.168.0.2作为僵尸主机,并扫描目标主机的前100个端口。