
FreeBSD ICMP बफ़र ओवरफ़्लो, FreeBSD बफ़र ओवरफ़्लो poc
डिफ़ॉल्ट रूप से उपयोग किया जाने वाला शेलकोड FreeBSD/x86-64 - execve - 28 bytes from Gitsnik है, इसे बदलें और शुरुआत के लिए अपना खुद का डालें।
ping उपयोगिता, जिसका उपयोग किसी होस्ट या गेटवे से ICMP ECHO_RESPONSE प्राप्त करने के लिए किया जाता है, ICMP प्रोटोकॉल के अनिवार्य ECHO_REQUEST डेटाग्राम के माध्यम से IPv4 लक्ष्य, IPv4-host या IPv4-mcast-group, के साथ आह्वान की जाती है। ECHO_REQUEST डेटाग्राम में IP और ICMP हेडर, उसके बाद एक "struct timeval" और पैकेट को भरने के लिए अलग-अलग संख्या में "pad" बाइट्स शामिल होते हैं।
FreeBSD प्रोजेक्ट के सुरक्षा परामर्श के अनुसार, ping उपयोगिता pr_pack() फ़ंक्शन के भीतर प्रतिक्रियाओं को संसाधित करने के लिए नेटवर्क से कच्चे IP पैकेट प्राप्त करती है। प्रतिक्रिया प्रसंस्करण में, ping IP हेडर, ICMP हेडर, और यदि मौजूद हो, तो ICMP त्रुटि का कारण बनने वाले पैकेट का प्रतिनिधित्व करने वाले "quoted packet" का पुनर्निर्माण करता है। quoted packet में भी एक IP हेडर और एक ICMP हेडर शामिल होता है।
pr_pack() फ़ंक्शन आगे की प्रक्रिया के लिए प्राप्त IP और ICMP हेडर को स्टैक बफ़र्स में कॉपी करता है। हालाँकि, यह प्रतिक्रिया या quoted packet में IP हेडर के बाद IP विकल्प हेडर की मौजूदगी की संभावना को ध्यान में नहीं रखता है। IP विकल्पों की उपस्थिति में, pr_pack() गंतव्य बफ़र को 40 बाइट्स तक ओवरफ़्लो कर देता है।
ping उपयोगिता यूज़रस्पेस में चलती है, और ping कमांड को आह्वान करने पर, /sbin/ping पर स्थित बाइनरी निष्पादित होती है। उपयोगिता का स्रोत कोड FreeBSD स्रोत पर सार्वजनिक रूप से उपलब्ध है। कमजोर फ़ंक्शन pr_pack(), ICMP पैकेट प्रतिक्रिया जानकारी को स्ट्रिंग प्रारूप में stdout पर प्रिंट करता है, जैसे "64 bytes from 1.3.3.7: icmp_seq=1 ttl=55 time=13.7 ms."

ICMP पैकेट, अनुरोध और प्रतिक्रिया दोनों में, ऊपर दिए गए आरेख में दर्शाए अनुसार एक वैकल्पिक Options फ़ील्ड के साथ IP हेडर शामिल होते हैं। एक दुर्भावनापूर्ण हमले में, ये IP Options सक्षम होते हैं और गैर-नल बाइट्स से भरे होते हैं।
यदि कोई ICMP पैकेट गंतव्य होस्ट के मार्ग में विकृत है या जानबूझकर छेड़छाड़ की गई है, और मूल इको अनुरोध में IP Options सक्षम हैं, तो pr_pack() फ़ंक्शन IP Options की उपस्थिति को समायोजित करने के लिए स्टैक पर पर्याप्त स्थान आवंटित करने में विफल रहता है, जिसके परिणामस्वरूप स्टैक ओवरफ़्लो होता है।
इन त्रुटि मामलों में, गंतव्य होस्ट से प्रतिक्रिया में डेटा अनुभाग में एक "quoted packet" भी शामिल हो सकता है, जो ICMP त्रुटि का कारण बनने वाले विशिष्ट पैकेट की पहचान करता है। pr_pack() फ़ंक्शन स्टैक को ओवरफ़्लो कर देता है जब quoted packet में ICMP हेडर शामिल होते हैं।