主动信息收集的原理
主动信息收集的特点
1.直接与目标系统交互通信
2.无法避免留下访问的痕迹
3.使用受控的第三方电脑进行探测,使用代理或已经被控制的机器,做好被封杀的准备
4.扫描发送不同的探测,根据返回结果判断目标状态
发现目标主机的过程
1.识别存活主机,发现潜在的被攻击目标
2.输出一个IP地址列表比如IP地址段IP地址范围
3.使用二、三、四曾进行探测发现
OSI七层模型和TCP/IP五层模型
OSI参考模型 TCP/IP模型 协议
应用层
表示层
会话层 应用层 HTTP Telnet FTP TFTP DNS SNMP
传输层 传输层 TPC UDP
网络层 网络层 IP ICMP IGMP RIP
数据链路层 数据链路层 ARP RARP IEEE802.3 PPP CSMA/CD
物理层 物理层
基于OSI模型进行扫描的优缺点
1.二层扫描的优缺点
优点:扫描速度快、可靠
缺点:不可路由
2.三层扫描的优缺点
优点:可路由,速度较快
缺点:速度比二层慢,经常被边界防火墙过滤
使用IP、ICMP协议
3.四层扫描的优缺点
优点:可路由且结果可靠
不太可能被防火墙过滤
可以发现所端口都被过滤的主机
缺点:基于状态过滤的防火墙可能过滤扫描
全端口扫描速度慢
基于ping命令的探测
Ping
ping命令是我们常用的判断主机之间网络是否畅通,同样也是能判断我们的目标主机是否存活。
Traceroute命令可以对路由进行追踪
ARPING
arping 192.168.1.1
提取有用信息:
┌──(root💀kali)-[~]
└─# arping 192.168.1.1 -c 1 | grep "bytes from" | cut -d " " -f 5
(192.168.1.1):
┌──(root💀kali)-[~]
└─# arping 192.168.1.1 -c 1 | grep "bytes from" | cut -d " " -f 5 | cut -d "(" -f 2
192.168.1.1):
┌──(root💀kali)-[~]
└─# arping 192.168.1.1 -c 1 | grep "bytes from" | cut -d " " -f 5 | cut -d "(" -f 2 | cut -d ")" -f 1
192.168.1.1
探测局域网主机,脚本执行:
#!/bin/bash
if [ "$#" -ne 1 ];then
echo "请输入参数。"
exit
fi
interface=$1
prefix=$(ifconfig $interface | grep "inet " | cut -d 't' -f 2 | cut -d '.' -f 1-3)
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
使用netdiscover进行被动方式探测局域网中存活的机器
主动模式:
netdiscover -i eth0 -r 192.168.1.0/24
被动模式:
netdiscover -p
HPING3
hping3 -c 1000 -d 120 -S -w 64 -p 80 --flood --rand-source [target]
-c1000 = 发送的数据包的数量
-d 120 = 发送到目标主机的每个数据包的大小。单位是字节
-S = 只发送SYN数据包
-w 64 = TCP窗口大小
-p 80 = 目的地端口
--flood = 尽可能快的发送数据包。洪水攻击模式
--rand-source = 使用随机性的源头IP地址。这里的伪造的IP地址,只是在局域网中伪造。通过路由器后,还会还原真实的IP地址。
FPING
使用FPING查看局域网中运行了哪些机器
Fping就是ping命令的加强版它可以对一个IP段进行ping扫描,而ping命令本身是不可以对网段进行扫描的。
fping -ag 192.168.1.0/24 >fping.txt
-a 存活的主机
-g 指定网段 -g [网络地址] / -g [起始地址] [结束地址]
基于Nmap的扫描方式
Nmap的基本扫描方式
Nmap,也就是Network Mapper,最早是Linux下的网络扫描和嗅探工具包。
扫描192.168.1.0网段:
nmap -sn 192.168.1.0/24 or nmap -sn 192.168.1.1-254
-sn 参数说明:表示只ping扫描,不进行端口扫描
使用nmap进行半连接扫描
nmap扫描类型主要有TCP的全连接 扫描(会在被扫描机器留下记录),半连接扫描(不会留下记录)
nmap -sS [target] -p 21-25,80,81,100,443
-sS 表示使用SYN进行半连接扫描
使用nc扫描端口
nc是netcat的简写,有着网络界的瑞士军刀美誉。因为它短小精悍、功能实用,被设计为一个简单、可靠的网络工具。
nc的作用:
1.实现任意TCP/UDP端口的侦听,nc可以c作为server以TCP或UDP方式侦听指定端口
2.端口的扫描,nc可以作为client发起TCP或UDP连接
3.机器之间传输文件
4.机器之间网络测速
nc参数:
-nv 表示我们扫描的目标是个IP地址不做域名解析
-w 表示超时时间
-z 表示进行端口扫描
nc -nv -w 1 -z 192.168.1.6 1-65535
使用scapy定制数据包进行高级扫描
Scapy是一个可以让用户发送、侦听和解析并伪装网络报文的python程序。这些功能可以用于制作侦测、扫描和攻击网络的工具。
scapy定制ARP协议包
----------ARP().display()来查看ARP函数的用法----------
hwtype= 0x1 硬件类型
ptype= IPv4 协议类型
hwlen= None 硬件地址长度(MAC)
plen= None 协议地址长度(IP)
op= who-has who-has查询
hwsrc= 00:50:56:29:6b:26 源MAC地址
psrc= 192.168.1.5 源IP地址
hwdst= 00:00:00:00:00:00
pdst= 0.0.0.0 目标IP地址
sr1函数:sr1函数包含了发送数据包和接收数据包的功能。
sr1(ARP(pdst="[target]"))
scapy定制ping包
----------ICMP().display()来查看ICMP函数的用法----------
type= echo-request 8:请求 0:回复
code= 0 代码
chksum= None 校验和
id= 0x0 标识
seq= 0x0
----------IP().display()来查看IP函数的用法----------
version= 4
ihl= None
tos= 0x0
len= None 总长度
id= 1 标识
flags=
frag= 0 标志
ttl= 64 生存时间
proto= hopopt 传输控制协议 IPv6逐跳选项
chksum= None 首部校验和
src= 127.0.0.1 源IP
dst= 127.0.0.1 目标IP
IP()生成ping包的源IP和目标IP,ICMP()生成ping包的类型。使用IP()和ICMP()两个函数,可以生成ping包,进行探测。
1.修改IP包头的dst,也就是我们的目标地址
2.拼接上ICMP的数据包类型
3.使用sr1()进行发送数据包并接受数据包
sr1(IP(dst="192.168.1.1")/ICMP(),timeout=1)
scapy定制TCP协议SYN请求
----------TCP().display()来查看TCP函数的用法----------
sport= ftp_data TCP源端口
dport= http TCP目的端口
seq= 0 32位序号
ack= 0 32位确认序号
dataofs= None 4位首部长度
reserved= 0 保留6位
flags= S 标志域,
window= 8192 窗口大小
chksum= None 16位校验和
urgptr= 0 优先指针
options= [] 选项
sr1(IP(dst="192.168.1.1")/TCP(flags="S",dport=80),timeout=1)
僵尸扫描
僵尸主机:僵尸主机指的是一个闲置的操作系统(这里的闲置是指主机不会主动和任何人通信),且此系统中IP数据包中ID是递增的。
IPDI:指的是通信过程中IP数据包中的ID
僵尸扫描拥有极高的隐蔽特性,但是实施条件苛刻。
僵尸扫描可以不拿到肉鸡权限,只要对方的IPID是自增长的就可以了。
僵尸扫描原理
1.端口开放状态扫描原理:
(1)攻击者向僵尸机发送SYN/ACK确认包。
(2)僵尸主机返回我们RST(关闭连接)数据包关闭连接,RST数据包中包含了IPID信息。假设IPID=X
信息:得到僵尸主机的IPID
(3)攻击者修改IP包头的SRC字段为僵尸主机的IP,伪装成僵尸主机给目标发送SYN请求。
(4)目标收到请求,如果端口是开放的就会返回给僵尸主机一个SYN/ACK的数据包。
(5)僵尸主机收到目标主机发来的SYN/ACK确认包,会同上返回给目标主机一个RST数据包。此时IPID值为X+1。
信息:如果目标主机端口开放,则僵尸主机的IPID+1
(6)攻击者再次向僵尸主机发送SYN/ACK确认包
(7)僵尸主机同样向攻击者返回了一个RST数据包。此时IPID值为X+2
(8)攻击者查看僵尸主机返回的数据包中IPID值为X+2。
(9)攻击者对比在第一步中的IPID值X,发现增加了2。
结论:目标主机与僵尸主机通信,说明目标主机端口是开放的。
使用nmap进行僵尸扫描
扫描网段内僵尸主机:
nmap 192.168.1.0/24 -p1-1024 --script=ipidseq.nse >a.txt
找到属性ipidseq:Incremental!的主机有可能作为僵尸主机。
nmap [target] -sI [僵尸机IP] -p1-100
nmap 192.168.1.6 -sI 192.168.1.1 -p1-100