
IPv6 आक्रमण टूलकिट
THC-IPV6-ATTACK-TOOLKIT (c) 2005-2022 [email protected] https://github.com/vanhauser-thc/thc-ipv6
AGPLv3 के तहत लाइसेंस प्राप्त (LICENSE फ़ाइल देखें)
यह कोड तब प्रेरित हुआ जब मैं IPv6 के संपर्क में आया, इसके बारे में और अधिक सीखा - और फिर मुझे इसके साथ खेलने (पढ़ें: "हैक") के लिए कोई उपकरण नहीं मिला। पहले मैंने libnet के साथ चीजों को लागू करने की कोशिश की, लेकिन फिर पता चला कि IPv6 का कार्यान्वयन केवल आंशिक है - और बेकार है। मैंने गायब कोड जोड़ने की कोशिश की, लेकिन, यह इतना आसान नहीं था, इसलिए मैंने अपना समय बचाया और जल्दी से अपनी खुद की लाइब्रेरी लिखी।
यह कोड वर्तमान में केवल इस पर चलता है:
उपकरणों को बनाने में सक्षम होने के लिए आपके पास libpcap-dev स्थापित होना चाहिए। इसके अतिरिक्त libssl-dev और libnetfilter-queue-dev की भी अनुशंसा की जाती है।
इन्हें (Kali, Debian, Ubuntu) पर स्थापित किया जा सकता है: sudo apt-get install libpcap-dev libssl-dev libnetfilter-queue-dev
आप उपकरणों को चलाकर बना सकते हैं: make all
आप उपकरणों और मौजूदा मैनुअल पेजों को चलाकर स्थापित कर सकते हैं: make install
THC IPV6 ATTACK TOOLKIT पहले से ही कई प्रभावी हमला करने वाले उपकरणों के साथ आता है:
बस उपकरणों को बिना विकल्पों के चलाएं और वे आपको मदद दिखाएंगे और कमांड लाइन विकल्प दिखाएंगे।
लाइब्रेरी thc-ipv6-lib.c सभी उपकरणों का हृदय और आत्मा है - और वे जो आप लिखना चाह सकते हैं। कार्यान्वयन इतना सरल है, आमतौर पर आपकी पसंद की सामग्री के साथ पूर्ण IPv6/ICMPv6 पैकेट बनाने के लिए केवल 2-4 पंक्तियाँ होती हैं।
आप जिस मूल संरचना का उपयोग करते हैं वह है (thc_ipv6_hdr *) उदा. thc_ipv6_hdr *my_ipv6_packet; int my_ipv6_packet_len; और आपको कभी भी इसके विकल्पों/फ़ील्ड्स से खेलना नहीं पड़ेगा।
जब भी आप एक IPv6 पैकेट बनाना चाहते हैं, आप बस लिखते हैं: my_ipv6_packet = thc_create_ipv6_extended(interface, prefer, &my_ipv6_packet_len, src6, dst6, ttl, length, label, class, version); यदि कुछ विफल होता है, तो यह NULL लौटाता है (केवल यदि my_ipv6_packet_len या dst6 मौजूद नहीं हैं या malloc विफल होता है)। thc_create_ipv6_extended के विकल्प हैं: (char*) interface - वह इंटरफ़ेस जिस पर आप पैकेट भेजना चाहते हैं (int) prefer - या तो PREFER_LINK (लिंक लोकल एड्रेस का उपयोग करने के लिए) या PREFER_HOST (होस्ट IPv6 पते का उपयोग करने के लिए), और PREFER_GLOBAL (सार्वजनिक (इंटरनेट) IP6 पते का उपयोग करने के लिए) (डिफ़ॉल्ट) (int ) &my_ipv6_packet_len - बनाए जाने वाले पैकेट का आकार (unsigned char) src6 - स्रोत IP6 (वैकल्पिक - NULL होने पर चुना जाएगा) (unsigned char*) dst6 - गंतव्य IP6 (नेटवर्क फॉर्मेट में, 16 बाइट लंबा) आमतौर पर thc_resolve6("ipv6.google.com") का परिणाम (int) ttl - पैकेट का TTL (वैकल्पिक - 0 इसे 255 पर सेट करेगा) (int) length - हेडर में सेट की जाने वाली लंबाई (वैकल्पिक - 0 = वास्तविक लंबाई) (int) label - फ्लो लेबल (0 ठीक है) (int) class - पैकेट का वर्ग (0 ठीक है) (int) version - IP6 संस्करण (वैकल्पिक - 0 इसे संस्करण 6 पर सेट करेगा) यह त्रुटियों पर NULL या सफलता पर malloc की गई संरचना लौटाता है। एक बार जब आप इसके साथ कर लें तो इसे free() करें।
अब आप इसके ऊपर एक्सटेंशन हेडर सेट कर सकते हैं: thc_add_hdr_route(my_ipv6_packet, &my_ipv6_packet_len, routers, routerptr); thc_add_hdr_fragment(my_ipv6_packet, &my_ipv6_packet_len, offset, more_frags, id); thc_add_hdr_dst(my_ipv6_packet, &my_ipv6_packet_len, buf, buflen); thc_add_hdr_hopbyhop(my_ipv6_packet, &my_ipv6_packet_len, buf, buflen); thc_add_hdr_nonxt(my_ipv6_packet, &my_ipv6_packet_len, hdropt); thc_add_hdr_misc(my_ipv6_packet, &my_ipv6_packet_len, type, len, buf, buflen); फ़ंक्शन समझाए गए: _route: एक रूटिंग फ़ॉरवर्डिंग हेडर जोड़ें (जैसे IP सोर्स रूटिंग) (int) routers - routerptr में राउटरों की संख्या (char**) routerptr - नेटवर्क फॉर्मेट में राउटर गंतव्यों के साथ एक char[routers + 1] संरचना उदाहरण के लिए alive6.c देखें। _fragment: एक फ्रैगमेंट हेडर जोड़ें (int) offset - वह ऑफ़सेट जिस पर डेटा लिखा जाना चाहिए (नोट: यहां ऑफ़सेट स्थान बाइट्स में डालें, बाइट ऑक्टेट में नहीं) (int) more_frags - 0 पर सेट करें यदि यह अंतिम फ्रैगमेंट है, अन्य सभी पर 1 (int) id - पैकेट के लिए एक ID (सभी फ्रैगमेंट के लिए समान) _dst: एक गंतव्य विकल्प हेडर जोड़ें (char) buf - एक चार बफर। आपको इस बफर को स्वयं नियंत्रित करना होगा लेकिन आप इसमें जो लिखना चाहते हैं। (int) buflen - buf की लंबाई _hopbyhop: एक हॉप-बाय-हॉप हेडर जोड़ें (char*) buf - एक चार बफर। आपको इस बफर को स्वयं नियंत्रित करना होगा लेकिन आप इसमें जो लिखना चाहते हैं। (int) buflen - buf की लंबाई _nonxt: निर्दिष्ट करें कि आगे कोई हेडर नहीं होगा (int) hdropt - यह विकल्प वर्तमान में अनदेखा किया गया है _misc: एक विविध हेडर निर्दिष्ट करें। इसका उपयोग करें यदि आप एक अमान्य या गैर-मौजूद एक्सटेंशन हेडर डिज़ाइन करना चाहते हैं। (int) type - हेडर के रूप में निर्दिष्ट करने के लिए टाइप ID (int) len - हेडर के रूप में विज्ञापित करने की लंबाई (वैकल्पिक - -1 इसे सही मान पर सेट करता है) (char*) buf - एक चार बफर। आपको इस बफर को स्वयं नियंत्रित करना होगा लेकिन आप इसमें जो लिखना चाहते हैं। (int) buflen - buf की लंबाई ये फ़ंक्शन सफलता पर (int) 0 और त्रुटि पर -1 लौटाते हैं।
अंत में आप स्ट्रीम या dgram हेडर जोड़ सकते हैं। thc_add_icmp6(my_ipv6_packet, &my_ipv6_packet_len, type, code, flags, buf, buflen, checksum); thc_add_tcp(my_ipv6_packet, &my_ipv6_packet_len, source_port, destination_port, sequence_number, ack_number, flags, window_size urgent_pointer, options, optione_length, data, data_length); thc_add_udp(my_ipv6_packet, &my_ipv6_packet_len, source_port, destination_port, checksum, data, data_length); thc_add_data6(my_ipv6_packet, &my_ipv6_packet_len, type, buf, buflen); _icmp6: एक ICMP6 पैकेट हेडर जोड़ें (int) type: ICMP6 प्रकार (int) code: ICMP6 कोड (int) flags: ICMP6 फ़्लैग्स (char*) buf - एक चार बफर। आपको इस बफर को स्वयं नियंत्रित करना होगा लेकिन आप इसमें जो लिखना चाहते हैं। (int) buflen - buf की लंबाई _tcp|_udp: TCP या UDP हेडर जोड़ें (ushort) source_port: स्रोत पोर्ट (ushort) destination_port: गंतव्य पोर्ट (uint) sequence_number: TCP अनुक्रम संख्या (uint) ack_number: TCP पावती संख्या (ushort) checksum: UDP चेकसम, 0 = चेकसम उत्पन्न करें (TCP के लिए चेकसम हमेशा गणना की जाती है) (uchar) flags: TCP फ़्लैग्स: TCP_SYN, TCP_ACK, TCP_FIN, TCP_RST, TCP_PSH, ... (uint) window_size: TCP विंडो आकार (uint) urgent_pointer: TCP अत्यावश्यक पॉइंटर (आमतौर पर 0) (char*) options: TCP विकल्प बफर, NULL हो सकता है (uint) options_length: TCP विकल्प बफर की लंबाई (char*) data: प्रोटोकॉल द्वारा ले जाया गया डेटा (uint) data_length: डेटा बफर की लंबाई _data6: एक विविध हेडर जोड़ें (int) type: प्रोटोकॉल ID (char*) buf - एक चार बफर। आपको इस बफर को स्वयं नियंत्रित करना होगा लेकिन आप इसमें जो लिखना चाहते हैं। (int) buflen - buf की लंबाई ये फ़ंक्शन सफलता पर (int) 0 और त्रुटि पर -1 लौटाते हैं।
एक बार जब आप कर लें, तो आप पैकेट बनाते और भेजते हैं। thc_generate_pkt(interface, srcmac, dstmac, my_ipv6_packet, &my_ipv6_packet_len); thc_send_pkt(interface, my_ipv6_packet, &my_ipv6_packet_len); या एक फ़ंक्शन में संयुक्त: thc_generate_and_send_pkt(interface, srcmac, dstmac, my_ipv6_packet, &my_ipv6_packet_len);
thc_generate_and_send_pkt: यह वास्तविक और अंतिम IPv6 पैकेट उत्पन्न करता है और फिर इसे भेजता है। (char*) interface - वह इंटरफ़ेस जिस पर पैकेट भेजना है (unsigned char*) srcmac - उपयोग करने के लिए स्रोत मैक (नेटवर्क फॉर्मेट में) (वैकल्पिक, NULL होने पर वास्तविक मैक का उपयोग किया जाता है) (unsigned char*) dstmac - उपयोग करने के लिए गंतव्य मैक (नेटवर्क फॉर्मेट में) (वैकल्पिक, NULL होने पर वास्तविक मैक खोजा जाता है) thc_generate_pkt और thc_send_pkt एक साथ समान कार्यक्षमता प्रदान करते हैं। आप आमतौर पर इनका उपयोग तभी करते हैं जब आप कुछ ऐसा करते हैं: thc_generate_pkt(...); while(1) thc_send_pkt(...); ये फ़ंक्शन सफलता पर (int) 0 और त्रुटि पर -1 लौटाते हैं।
जब आप कर लें, तो मेमोरी को इसके साथ मुक्त करें: thc_destroy_packet(my_ipv6_packet);
कुछ महत्वपूर्ण सहायक फ़ंक्शन हैं जिनकी आपको आवश्यकता होगी: thc_resolve6(destinationstring); यह IPv6 पते या DNS नाम को IPv6 नेटवर्क पते में हल करता है। thc_create_ipv6_extended() में dst6 के लिए इसका उपयोग करें। परिणाम को जरूरत न होने पर free() करना होगा। thc_inverse_packet(my_ipv6_packet, &my_ipv6_packet_len); यह चतुर फ़ंक्शन स्रोत और गंतव्य पते को स्वैप करता है, ICMP हेडर प्रकार को बदलता है (ECHO REQUEST -> ECHO REPLY आदि) और चेकसम की पुनर्गणना करता है। यदि आपको नहीं पता कि यह किस लिए उपयोगी हो सकता है, तो अपने xbox के साथ खेलें :-)
यदि आप इसे बहुत तेजी से करना चाहते हैं, तो कुछ पूर्वनिर्धारित ICMPv6 क्रिएटर फ़ंक्शन हैं जो कोड की सिर्फ एक पंक्ति में impc6 पैकेट भेजते हैं: thc_ping6(interface, src, dst, size, count); thc_neighboradv6(interface, src, dst, srcmac, dstmac, flags, target); thc_neighborsol6(interface, src, dst, target, srcmac, dstmac); thc_routeradv6(interface, src, dst, srcmac, default_ttl, managed, prefix, prefixlen, mtu, lifetime); thc_routersol6(interface, src, dst, srcmac, dstmac); thc_toobig6(interface, src, srcmac, dstmac, mtu, my_ipv6_packet, my_ipv6_packet_len); thc_paramprob6(interface, src, srcmac, dstmac, code, pointer, my_ipv6_packet, my_ipv6_packet_len); thc_unreach6(interface, src, srcmac, dstmac, icmpcode, my_ipv6_packet, my_ipv6_packet_len); thc_redir6(interface, src, srcmac, dstmac, newrouter, newroutermac, my_ipv6_packet, my_ipv6_packet_len); thc_send_as_fragment6(interface, src, dst, type, buf, buflen, frag_len); ये वही करते हैं जो आप उनसे करने की उम्मीद करते हैं, इसलिए मैं इसे और विस्तार से वर्णित करने के लिए बहुत आलसी^H^H^H^H^Hव्यस्त हूं।
निम्नलिखित फ़ंक्शन परिणाम पॉइंटर के लिए मेमोरी आवंटित करते हैं, इसलिए एक बार जब आपको उनकी आवश्यकता न हो, तो इन फ़ंक्शनों से परिणाम पॉइंटर्स को मुक्त करना याद रखें: thc_ipv6_dummymac() thc_ipv62notation() thc_ipv62string() thc_string2ipv6() thc_string2notation() thc_resolve6() thc_get_own_ipv6() thc_get_own_mac() thc_get_multicast_mac() thc_get_mac() thc_lookup_ipv6_mac() thc_look_neighborcache() thc_generate_key() thc_generate_cga() thc_generate_rsa()
यदि आप उदाहरण उपयोगों पर एक नज़र डालें तो बहुत मदद मिलती है। सबसे अच्छे हैं thc-ipv6 पैकेज के उपकरण, विशेष रूप से implementation6.c और fake_*6.c - मज़े करें, और कोड वापस भेजें, ताकि समुदाय इस पर आगे निर्माण कर सके।
अधिकांश उपकरणों को IDS या विशिष्ट पहचान सॉफ़्टवेयर द्वारा आसानी से पहचाना जा सकता है। यह जानबूझकर किया गया है ताकि दुर्भावनापूर्ण उपयोग का पता लगाना आसान हो। उपकरण या तो एक निश्चित पैकेट हस्ताक्षर निर्दिष्ट करते हैं, या सामान्य रूप से पैकेट सूँघते हैं (उदा. इसलिए ICMPv6 नेबर सॉलिसिटेशन का उत्तर भी देते हैं जो एक गैर-मौजूद मैक पर भेजे जाते हैं, और इसलिए उनका पता लगाना बहुत आसान है)। यदि आप यह नहीं चाहते हैं, तो कोड बदलें।
उन्हें vh (at) thc (dot) org पर भेजें (और विषय पंक्ति में "antispam" जोड़ें) या github के माध्यम से सबमिट करें: https://github.com/vanhauser-thc/thc-ipv6
मज़े करें!