
مجموعة أدوات هجوم IPv6
THC-IPV6-ATTACK-TOOLKIT (c) 2005-2022 [email protected] https://github.com/vanhauser-thc/thc-ipv6
مرخص بموجب AGPLv3 (انظر ملف الترخيص)
تم إلهام هذا الكود عندما تعرفت على 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 مع الكثير من أدوات الهجوم الفعالة:
فقط قم بتشغيل الأدوات بدون خيارات وستعطيك المساعدة وتظهر خيارات سطر الأوامر.
المكتبة thc-ipv6-lib.c هي قلب وروح جميع الأدوات - وتلك التي قد ترغب في كتابتها. التنفيذ بسيط جدًا، عادة ما يكون مجرد 2-4 أسطر لإنشاء حزمة IPv6/ICMPv6 كاملة بالمحتوى الذي تختاره.
الهيكل الأساسي الذي تستخدمه هو (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 عند الأخطاء أو هيكل malloced عند النجاح. حرره بـ 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 - معرف للحزمة (نفسه لجميع التجزئات) _dst: أضف رأس خيارات الوجهة (char) buf - مخزن مؤقت char. يجب أن تتحكم في هذا المخزن بنفسك بما تريد كتابته فيه. (int) buflen - طول buf _hopbyhop: أضف رأس قفزة بقفزة (char*) buf - مخزن مؤقت char. يجب أن تتحكم في هذا المخزن بنفسك بما تريد كتابته فيه. (int) buflen - طول buf _nonxt: حدد أنه لن تكون هناك رؤوس تالية على الإطلاق (int) hdropt - هذا الخيار يتم تجاهله حاليًا _misc: حدد رأسًا متنوعًا. استخدم هذا إذا كنت تريد تصميم رأس تمديد غير صالح أو غير موجود. (int) type - معرف النوع لتحديد الرأس (int) len - الطول للإعلان عن الرأس (اختياري - -1 يضبط هذا على القيمة الصحيحة) (char*) buf - مخزن مؤقت char. يجب أن تتحكم في هذا المخزن بنفسك بما تريد كتابته فيه. (int) buflen - طول buf تعيد هذه الوظائف (int) 0 عند النجاح و -1 عند الخطأ.
أخيرًا يمكنك إضافة رؤوس الدفق أو مخطط البيانات. 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 - مخزن مؤقت char. يجب أن تتحكم في هذا المخزن بنفسك بما تريد كتابته فيه. (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: معرف البروتوكول (char*) buf - مخزن مؤقت char. يجب أن تتحكم في هذا المخزن بنفسك بما تريد كتابته فيه. (int) buflen - طول buf تعيد هذه الوظائف (int) 0 عند النجاح و -1 عند الخطأ.