4.主动信息收集
4.1主动信息收集的原理
4.1.1 主动信息收集的特点
1.直接与目标系统交互通信
2.无法避免留下访问的痕迹
3.使用受控的第三方电脑进行探测,使用代理或已被控制的机器。
4.扫描发送不同的探测,,根据返回结果判断目标状态
4.1.2 发现目标的过程
1.识别存活主机,发现潜在的被攻击目标
2.输出一个 IP 地址列表(如IP地址段、IP地址范围)
3.使用二、三、四层进行探测发现
4.1.3 OSI 七层模型和 TCP/IP 五层模型
第七层:应用层
OSI中的最高层。为特定类型的网络应用提供了访问 OSI 环境的手段。应用层确定进程之间通信的性质,以满足用户的需要。应用层不仅要提供应用进程所需要的信息交换和远程操作,而且还要作为应用进程的用户代理,来完成一些为进行信息交换所必需的功能。它包括:文件传送访问和管理 FTAM、虚拟终端 VT、事务处理 TP、远程数据库访问 RDA、制造报文规范 MMS、目录服务 DS等协议;应用层能与应用程序界面沟通,以达到展示给用户的目的。在此常见的协议有:HTTP、HTTPS、FTP、TELNET、SSH、SMTP、POP3等。
第六层:表示层
主要用于处理两个通信系统中交换信息的表示方式。为上层用户解决用户信息的语法问题。它包括数据格式交换、数据加密与解密、数据压缩与终端类型的转换。
第五层:会话层
在两个节点之间建立端连接。为端系统的应用程序之间提供了对话控制机制。此服务包括建立连接是以全双工还是以半双工的方式进行设置,尽管可以在层4中处理双工模式;会话层管理登入和注销过程。它具体管理两个用户和进程之间的对话。如果在某一时刻只允许一个用户执行一项特定的操作,会话层协议就会管理这些操作,如果阻止这两个用户同时更新数据库中的同一组数据。
第四层:传输层
传输层建立了主机端口到端口的链接,传输层的作用是为上层协议(上层会话层)提供端口到端口的可靠和透明的数据传输服务,包括处理差错控制和流量控制等问题。该层向高层屏蔽了下层数据通信的细节,使高层用户看到的只是在两个传输实体间的一条主机到主机的、可由用户控制和设定的、可靠的数据通路(TCP UDP就是在这一层)。
第三层:网络层
本层通过 IP 寻址来建立两个节点之间的连接,为源端的运输层送来的分组,选择合适的路由和交换节点,正确无误的按照地址传送给目的端的运输层。就是通常说的 IP 层。
第二层:数据链路层
将比特组合成字节,再将字节组合成帧,使用链路层地址(以太网使用Mac地址)来访问介质,并进行差错检测。
第一层:物理层
处于 OSI 参考模型的最底层。物理层的主要功能是利用物理传输介质为数据链路层提供物理连接,以便透明的传送比特流。常用的设备有网卡、集线器、中继器、调制解调器、网线、双绞线、同轴电缆。
对应的网络设备关系
对应的协议关系
4.1.4 基于 OSI 模型进行扫描的优缺点
1.二层扫描的优缺点
优点:扫描速度快、可靠
缺点:不可路由
2.三层扫描的优缺点
优点:可路由、速度较快
缺点:速度比二层慢,经常被边界防火墙过滤
使用 IP、icmp 协议
3.四层扫描的优缺点
优点:可路由且结果可靠,不太可能被防火墙过滤,可以发现所有
端口都被过滤的主机
缺点:基于状态过滤发防火墙可能被过滤扫描,全端口扫描速度慢
4.2 基于 Ping 命令的探测
4.2.1 Ping
# ping xxx.xxx.xxx.xxx [] 值
//[-c] 可指定发送数据包数量
# traceroute xxx.com
//可使用traceroute查看从当前主机到目标主机之间经过的网络设备
4.2.2 ARPing
1.协议概述
ARP协议是 “Address Resolution Protocol”(地址解析协议)的缩写。计算机通过 ARP 协议将 IP 地址转换成 MAC 地址。
2.ARP协议工作原理
在以太网中,数据传输的目标地址是MAC地址,一个主机和另一个主机进行直接通信,必须要知道目标主机的 MAC 地址。
计算机使用者通常只知道目标机器的IP信息,“地址解析”就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。
简单来说,ARP协议主要负责将局域网中的32位IP地址转换为对应的48位物理地址,即网卡的MAC地址,保障通信顺利进行。
3.使用 arping 命令查看局域网中的 IP 是否有冲突
[注] arping不能用于本机IP!!!
# arping xxx.xxx.xxx.xxx [] 值
# arping -c 1 xxx.xxx.xxx.xxx | grep "bytes from" | cut -d"(" -f 2 | cut -d")" -f 1
//提取IP值
编写脚本
# vim arping1.sh
//插入以下内容
------------------------------------------------------------
#!/bin/bash
if[ "$#" -ne 1];then //判断用户是否输入了至少一个参数,如果没有输入参数,输出提示信息并退出
echo "Usage - ./arping.sh [interface]"
echo"Excample - ./arping.sh eth0"
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
------------------------------------------------------------
//保存并退出后对其添加权限
# chmod +x arping1.sh
//执行检测此网段内存活的主机(若出现两个相同的IP说明有IP冲突)
# ./arping1.sh eth0
4.使用 Netdiscover 进行被动方式探测局域网中存活的主机
# netdiscover -i eth0 -r xxx.xxx.xxx.xxx/子网掩码
[-i] 指定网卡
[-r] 指定 网段
主动探测:通过发送arp请求来进行探测,容易被发现
------------------------------------------------------------
netdiscover -p
[-p] 不发送任何数据包
被动探测:嗅探别人发送出来的数据包
4.2.3 HPing3
Hping3是一个命令行下使用的 TCP/IP 数据包组装/分析工具,通常 Web服务会用来做压力测试使用,也可以进行 DOS 攻击实验(每次只能扫描一个目标)。
# hping3
[-h] 查看命令参数说明
[-c] 指定发送数据包数量
[-d] 指定每个数据包大小(单位:字节)
[-S] 指定发送SYN数据包
[-w] 指定TCP窗口大小(数据包的流量)
[-p] 指定扫描的端口(80:web端口)
[--flood] 洪水式攻击(尽可能快的发送数据包,不考虑显示入站回复)
[--rand-soure] 随机源IP(仅在局域网内伪造IP)
------------------------------------------------------------
//例:压力测试
# hping3 -c 100 -d 120 -S -w 64 -p 80 --flood --rand-source xxxxx.cn
4.2.4 FPing
FPing 就是 Ping 命令的加强版,它可以对一个 IP 段进行 Ping 扫描,而 Ping 命令本身是不可以对网段进行扫描的。
# fping -g xxx.xxx.xxx.xxx/子网掩码 -c 1 > fping.txt
[-g] 对地址段进行扫描,如果不加可以对某个IP进行扫描
[> xxx.txt] 将结果重定向到xxx.txt文件(输出重定向到文件中只会获得存活的主机信息)
//查看扫描结果(存活的主机)
cat xxx.txt
4.3 基于 Nmap 的扫描方式
4.3.1 Nmap 的基本扫描方式
Nmap(Network Mapper),最早是 Linux 下的网络扫描和嗅探工具包。
//例:扫描某网段
# nmap -sn xxx.xxx.xxx.xxx/子网掩码
或
# nmap -sn xxx.xxx.xxx.1-254
[-sn] 只进行 ping 扫描,不进行端口扫描
4.3.2 使用 nmap 进行半连接扫描
nmap 扫描类型主要有 TCP 的全连接扫描(会在被扫描机器下留下记录),半连接扫描(不会留下记录)。
# nmap -sS xxx.xxx.xxx.xxx -p x,x,...
[-sS] 使用 SYN 半连接扫描
[-p] 指定端口号(可以是具体端口号,也可以是一个端口范围)
4.3.3 使用 nc 扫描端口
nc(netcat)作用:
1.实现任意 TCP/UDP 端口的侦听,nc 可以做为 server 以 TCP 或 UDP 方式侦听指定端口。
2.端口的扫描,nc 可以作为 client 发起 TCP 或 UDP 连接。
3.机器之间传输文件
4.机器之间网络测速
//例:查看该网段下开放的端口
# nc -nv -w 1 -z xxx.xxx.xxx.xxx 1-xx
[-nv] 表示扫描目标是 IP 地址,不做域名解析
[-w] 表示超时时间
[-z] 表示进行端口扫描
[1-xx] 指定扫描端口范围
4.4 使用 scapy 定制数据包进行高级扫描
4.4.1 scapy概述
Scapy 是一个可以让用户发送、侦听和解析并伪装网络报文的 Python 程序。这些功能可以用于制作侦测、扫描和攻击网络的工具。
4.4.2 scapy 定制 ARP 协议
# scapy
------------------------------------------------------------
>>> ARP().display() //用于查看ARP函数的用法
------------------------------------------------------------ sr1 函数:包含了发送数据包和接收数据包的功能
例:
>>> sr1(ARP(pdst="xxx.xxx.xxx.xxx"))
>>> exit() //退出scapy
[注] 发现源地址 psrc=xxx.xxx.xxx.xxx说明已经收到了应答包
4.4.3 scapy 定制 PING 包
--查看数据包格式
>>> IP().display()
>>> ICMP().display()
[注] IP()生成ping包的源IP和目标IP,ICMP()生成ping包的类型。使用IP()和ICMP()两个函数可以生成ping包,进行探测。
例:
4.4.4 scapy 定制 TCP 协议 STN 请求
--查看TCP协议数据包格式
>>> TCP().display()
------------------------------------------------------------
--组装SYN数据包 (半链接扫描,较隐秘)
>>> sr1(IP(dst="xxx.xxx.xxx.xxx")/TCP(flags="S",dport=80),timeout=1)
//收到数据包回复证明该端口开放
4.5 僵尸扫描
4.5.1 僵尸扫描概述
僵尸主机:是指感染僵尸程序病毒,从而被黑客程序控制的计算机设备。但僵尸扫描中的僵尸主机指的是一个闲置的操作系统(闲置是指不会主动和任何人通信),且此系统中 IP 数据包中 ID 是递增的。
IPID:通信过程中 IP 数据包中的 ID。
1.目标网络可伪造源地址进行访问。
2.选择僵尸机,僵尸机需要正在互联网上是一个闲置的操作系统,需要系统使用递增的 IPID(如XP系统)。
4.5.2 僵尸扫描原理
1.端口开放状态扫描原理
2.端口关闭状态扫描原理
4.5.3 使用 scapy 进行僵尸扫描
准备工作:
僵尸主机:WinXP 192.168.1.116 防火墙关闭状态
目标主机:Win10 192.168.1.104 sshd服务能正常访问
具体操作:
第一步:给僵尸主机发送 SYN/ACK 数据包,将返回的数据包存入 rz1
>>> rz1=sr1(IP(dst="僵尸机IP")/TCP(dport=445,flags="SA")) --------------------------------------------------------------------------- rz1 定义一个变量用于接收返回的数据包 dst 僵尸机IP dport=445 向僵尸主机的445端口发送数据包(XP主机的445端口一般都是开启状态) flags="SA" 发送 SYN/ACK
第二步:伪装原IP(攻击者修改IP包头的SRC字段为僵尸主机的IP,伪装成僵尸主机给目标机发SYN请求)
>>> rt=sr1(IP(src="伪装成僵尸机IP",dst="目标IP")/TCP(dport=22),timeout=1) --------------------------------------------------------------------------- rt 定义了一个变量来接受返回的数据包 src 伪造成僵尸主机的IP地址 dst 将数据包发送到目标主机的IP地址 dport 目标机端口 timeout 超时时间
第三步: 攻击者再次向僵尸主机发送 SYN/ACK 确认包,获得 IPID
>>> rz2=sr1(IP(dst="僵尸机IP")/TCP(dport=445,flags="SA"))
校验
--查看第一次IPID(查看id字段内容) >>> rz1.display() --查看第二次IPID(查看id字段内容) >>> rz2.display() --------------------------------------------------------------------------- 对比一下两次IP值 第二次减去第一次等于2(IPID自增2)即表示端口开放 第二次减去第一次等于1(IPID自增1)即表示端口关闭 >>> exit() //退出
4.5.4 使用 nmap 进行僵尸扫描
1.扫描 192.168.1.0 网段中某些可以用作僵尸主机
# nmap 192.168.1.0/24 -p1-1024 --script=ipidseq.nse > a.txt
[-p] 端口号
[--script=ipidseq.nse] 查看网段下可用作僵尸主机的IP
[>] 结果输出到文件
-------------------------------------------------------------------------------
# cat a.txt
//查看结果文件
[_ipidseq: All zeros] 不可用
[_ipidseq: Incremental!] 可用但需要验证
2.僵尸扫描
# nmap 目标IP -sI 僵尸机IP -p1-100
//可查看到对应IP开放的端口