Skip to content

Commit 84abd89

Browse files
authored
Merge pull request #2035 from HackTricks-wiki/research_update_src_generic-methodologies-and-resources_pentesting-network_eigrp-attacks_20260319_211452
Research Update Enhanced src/generic-methodologies-and-resou...
2 parents 87c582e + 87726eb commit 84abd89

1 file changed

Lines changed: 66 additions & 1 deletion

File tree

src/generic-methodologies-and-resources/pentesting-network/eigrp-attacks.md

Lines changed: 66 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,33 @@
6262

6363
- **HELLO packets carry K-values and neighbors only form when they match.** This is the basis for K-value mismatch/relationship disruption attacks and why mismatched K-values prevent adjacency.
6464
- **The PARAMETER TLV (Type 0x0001) in HELLO (and initial UPDATE) carries K-values and Hold Time**, so passive captures reveal the exact values used on the segment.
65+
- **EIGRP uses IP protocol 88**, multicasting to **224.0.0.10** in IPv4 and **FF02::A** in IPv6. That makes it easy to spot with `tcpdump 'ip proto 88 or ip6 proto 88'` before attempting active abuse.
66+
- **Reliable UPDATEs are ordered with sequence / acknowledgement fields and SEQUENCE TLVs.** Blind multicast route injection can work in weak labs, but when emulating a real neighbor you often need to track `seq`, `ack`, and the peer list carried in SEQUENCE TLVs to stay in sync with the RTP logic.
67+
68+
## **Passive Recon Before Injection**
69+
70+
Before you try to inject routes, capture a legitimate HELLO / UPDATE exchange and extract:
71+
72+
- **AS number**
73+
- **K-values and Hold Time** from the PARAMETER TLV
74+
- **Authentication in use**: none, MD5, or HMAC-SHA-256
75+
- **Neighbor source address** and the subnet/interface where EIGRP is active
76+
- **Software / TLV profile** (`SOFTWARE_VERSION`, `STUB`, `SEQUENCE`) so your crafted packets look like the local routers
77+
78+
Useful commands:
79+
80+
```bash
81+
# Passive sniffing
82+
sudo tcpdump -ni eth0 'ip proto 88 or ip6 proto 88'
83+
84+
# Quick discovery and route enumeration on IPv4
85+
sudo nmap --script broadcast-eigrp-discovery
86+
87+
# If you already know the AS
88+
sudo nmap --script broadcast-eigrp-discovery --script-args broadcast-eigrp-discovery.as=100
89+
```
90+
91+
Nmap's `broadcast-eigrp-discovery` works by sending a HELLO to `224.0.0.10` and parsing the returned UPDATE packets, which is useful to enumerate prefixes before attempting a more intrusive route injection.
6592

6693
## **Scapy Packet Crafting (Route Injection / Fake Neighbors)**
6794

@@ -79,6 +106,41 @@ sendp(Ether()/IP(src="192.168.1.248", dst="224.0.0.10") /
79106

80107
The same repo includes quick "fake neighbor" scripts that sniff a real EIGRP packet and replay it with a spoofed source IP to create phantom neighbors (useful for CPU/neighbor-table pressure).
81108

109+
Scapy also exposes primitives that are useful when you need higher-fidelity emulation instead of a single UPDATE:
110+
111+
- `EIGRPAuthData` for authenticated adjacencies
112+
- `EIGRPSeq` for sequence / conditional-receive handling
113+
- `EIGRPStub` to mirror observed stub behavior
114+
- `EIGRPv6IntRoute` / `EIGRPv6ExtRoute` for IPv6 route injection
115+
116+
That matters because the reliable transport logic is often what separates a throwaway PoC from a fake neighbor that survives long enough to learn routes and poison the topology.
117+
118+
## **EIGRP for IPv6**
119+
120+
EIGRP for IPv6 is a separate address-family transported over IPv6. It still uses EIGRP packet format / TLVs, but it is enabled directly on interfaces and multicasts to `FF02::A`. From an offensive perspective, that means a dual-stack segment may expose an EIGRP attack surface even when the IPv4 side looks clean.
121+
122+
Important differences:
123+
124+
- **IPv6 EIGRP is enabled per interface** (`ipv6 eigrp <as>`), not with IPv4-style `network` statements.
125+
- **A router ID is still required**, so sniffing an active segment usually reveals enough context to mimic a valid peer.
126+
- **MD5 authentication exists for EIGRP for IPv6**, and modern named mode deployments may also use **HMAC-SHA-256**, which blocks unauthenticated route injection.
127+
128+
Minimal Scapy example for IPv6 route injection:
129+
130+
```python
131+
from scapy.all import *
132+
load_contrib("eigrp")
133+
134+
send(IPv6(src="fe80::250:56ff:feaa:1111", dst="ff02::a") /
135+
EIGRP(opcode="Update", asn=100, seq=0, ack=0,
136+
tlvlist=[EIGRPv6IntRoute(dst="2001:db8:dead:beef::",
137+
prefixlen=64,
138+
nexthop="fe80::250:56ff:feaa:1111")]),
139+
iface="eth0")
140+
```
141+
142+
If the IPv6 next hop inside the route TLV is zeroed, receivers fall back to the IPv6 source address in the packet header. That makes source spoofing and correct link-local addressing especially important during EIGRPv6 testing.
143+
82144
- Scapy EIGRP contrib docs: https://scapy.readthedocs.io/en/latest/api/scapy.contrib.eigrp.html
83145
- Example scripts: https://github.com/davidbombal/scapy
84146

@@ -90,11 +152,14 @@ The same repo includes quick "fake neighbor" scripts that sniff a real EIGRP pac
90152
## **Authentication Recon**
91153

92154
- EIGRP named mode supports **HMAC-SHA-256 authentication** via `authentication mode hmac-sha-256 ...`. If enabled, crafted packets must be authenticated with the correct key; if not enabled, spoofing/injection is easier to validate.
155+
- RFC 7868 also defines both **MD5** and **SHA2-256** authentication data inside the EIGRP AUTH TLV, which is why passive captures quickly tell you whether a blind spoof is realistic or whether you first need key material.
156+
- On EIGRP for IPv6, Cisco also supports **MD5 authentication with key chains**. If multiple keys with send/accept lifetimes are configured, replaying stale authenticated traffic becomes less reliable because the active key can rotate without changing the rest of the adjacency profile.
93157

94158
## **References**
95159
- [https://www.rfc-editor.org/rfc/rfc7868.html](https://www.rfc-editor.org/rfc/rfc7868.html)
96160
- [https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/iproute_eigrp/configuration/15-mt/ire-15-mt-book/ire-sha-256.html](https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/iproute_eigrp/configuration/15-mt/ire-15-mt-book/ire-sha-256.html)
161+
- [https://nmap.org/nsedoc/scripts/broadcast-eigrp-discovery.html](https://nmap.org/nsedoc/scripts/broadcast-eigrp-discovery.html)
162+
- [https://sensepost.com/blog/2020/routopsy-hacking-routing-with-routers/](https://sensepost.com/blog/2020/routopsy-hacking-routing-with-routers/)
97163

98164
{{#include ../../banners/hacktricks-training.md}}
99165

100-

0 commit comments

Comments
 (0)