शाम हो गई थी, कुछ भी नहीं था ... फेरीवालों को आश्चर्यचकित करने का फैसला किया गया था। लेकिन कैसे? प्रसिद्ध साइटों पर कमजोरियों की मौलिक खोज अब किसी के लिए दिलचस्प नहीं है। खैर, फिर कल्पना को चालू करें ... आखिरकार, उपयोगकर्ताओं के पास भी साइटें हैं! तत्काल उनके स्थायित्व की जाँच करें!
यह सब कैसे हुआ:
एक्शन प्लान के साथ आना जरूरी था। सिद्धांत रूप में, यह सब संभव था कि कैसे अधिक से अधिक उपयोगकर्ता पृष्ठों को पार्स किया जाए और फिर उनमें साइटों के पृष्ठों को पार्स किया जाए। फिर इसे सभी स्कैनर पर रखें। कुछ इस तरह ...
यह कैसे काम करता है?
प्वाइंट वन: स्पार्स्ड पेज।सब कुछ इतना सरल नहीं है कि आप जानते हों ... आप / उपयोगकर्ता पृष्ठ पर जितने चाहें उतने उपयोगकर्ता नहीं हैं। यह उपयोगकर्ताओं के माध्यम से पुनरावृत्ति करने और वहाँ के ग्राहकों से अन्य उपयोगकर्ताओं को लेने का फैसला किया गया था, और वहाँ अभी भी उपयोगकर्ताओं और अधिक ...
पसंदीदा अजगर खुला है, कल्पना शामिल है, यह लिखा है:
import urllib2, re start = " " """ , """ page = urllib2.urlopen("http://habrahabr.ru/users/"+start+"/subscription/followers/").read() names = re.findall('<div class="username"><a href="/users/(.*?)/">(.*?)</a></div>', page) """ , , , """ def going(names): for name in names: page = urllib2.urlopen("http://habrahabr.ru/users/"+name[0]+"/subscription/followers/").read() names = re.findall('<div class="username"><a href="/users/(.*?)/">(.*?)</a></div>', page) """ """ base = open('habrs.txt', 'a') writed = 0 for item in names: base.write(item[0]+"\r\n") writed = writed + 1 print 'Saved habrs\'s: '+str(writed) going(names) going(names)
कुछ समय के काम के बाद, पर्याप्त संख्या में हारा-मनुष्यों को विस्थापित किया गया (लगभग 10k)। यह स्पष्ट है कि इनमें से अधिकांश लोग खुद को दोहरा रहे हैं ... तो क्या करना है?
दो बिंदु: अद्वितीयसोचकर, मैंने तय किया कि एक अजगर को शिपिंग करना अनुचित होगा। इसलिए, php से array_unique का विचार मेरे मस्तिष्क में आ गया। सोचा - किया हुआ।
संपूर्ण स्क्रिप्ट में फ़ाइल को खोलने और बंद करने की क्षमता होती है, लेकिन फिर एक फ़ंक्शन में अद्वितीयकरण।
<?php $arr = file_get_contents("habrs.txt"); $arr = explode("\r\n", $arr); $arr = array_unique($arr); $string = ""; foreach($arr as $name){ $string = $string.$name."\r\n"; } file_put_contents("habrs2.txt", $string); ?>
सब कुछ कंसोल से लॉन्च किया गया था, सब कुछ ठीक काम किया।
यह 2k अद्वितीय वर्णों से थोड़ा कम निकला ... इसलिए अब आपको उनकी साइटें खोजने और खोजने की आवश्यकता है।
तीन बिंदु: खोज साइटेंफिर से मुझे एक अजगर मिला, और यह लिखा। सब कुछ बहुत सरल है, फ़ाइल (लाइन द्वारा लाइन) पर जाएं, उपयोगकर्ता पृष्ठों पर जाएं, साइटों की तलाश करें। हम एक फ़ाइल में छिपाते हैं।
import urllib2, re sites = "" users = file("habrs2.txt") for user in users: user = re.split("\r\n", user)[0] page = urllib2.urlopen("http://habrahabr.ru/users/"+user+"/").read() site = re.findall('<a href="(.*?)" class="url icon" target="_blank">(.*?)</a>',page) if len(site) > 0: for site, fake in site: sites += site+"\r\n" with open("sites.txt", "a") as f: f.write(sites)
साइटों ने एक सभ्य राशि निकाली, और अगर उन्हें दोहराया नहीं गया, तो उनके पास एक अपचनीय रूप था।
उन्हें साफ करने की जरूरत है ...
प्वाइंट फोर: क्लीन वेबसाइट्सहम php में preg_match का उपयोग करते हैं।
<?php $arr = file_get_contents("sites.txt"); $arr = explode("\r\n", $arr); $string = ""; foreach($arr as $name){ if (preg_match('/http:\/\/([^\/]+)\//i', $name, $matches)) { $name = $matches[1]; } elseif (preg_match('/^http:\/\/([^\/]+)$/i', $name, $matches)) { $name = $matches[1]; } $string = $string.$name."\r\n"; } file_put_contents("sites2.txt", $string); ?>
हमें एक अच्छी सूची मिली, अला:
yandex.ru
google.com
yahoo.com
अब आपको स्कैनर में यह सब करने की ज़रूरत है, जवाब प्राप्त करें, इसे एक फ़ाइल में छिपाएं ...
पांच बिंदु: एक स्कैनर के साथ उड़ानकंसोल पर हेरफेर के लिए अजगर पर एक माइक्रोग्राम लिखा गया था।
मैं मेमोरी से लिखता हूं, क्योंकि यह स्क्रिप्ट प्रोडक्शन (वर्चुअल मशीन पर BackTrack r3) पर लिखी गई थी, और कमजोरियों के एक विशाल ढेर की सुखद खोज के बाद, यह पूरी चीज को बचाने के बिना बंद कर दिया गया था (अर्थ में वर्चुका), इसलिए स्क्रिप्ट ही नहीं बचाई गई थी ...
बिंदु 60 सेकंड के लिए nikto.pl मोती स्क्रिप्ट को चलाने के लिए है और इसे इस समय के लिए समय में साइट के नाम के साथ एक फ़ाइल में लिखें (आगे की प्रक्रिया में आसानी के लिए)।
import os, time sites = file("sites2.txt") for site in sites: os.system("perl nikto.pl -h "+site+" | tee "+site+".txt") os.system("pidof perl | tee perlID.txt") time.sleep(60) pid = file("perlID.txt")[0] os.system("taskkill "+pid)
प्रपत्र की फ़ाइलों में इस स्कैनर के साथ काम करने के बाद: site.txt, जल्दी से पाया कमजोरियों का पता चला (60 सेकंड के भीतर)।
अंक छह: डिब्रीफिंगकाम के कुछ समय के बाद (रात के लिए छोड़ दिया गया) मैंने यह देखने का फैसला किया कि किस तरह के छेद थे ...
क्योंकि इस मामले में हैब्रोसैक्विटी काफी पुराने जमाने की है (अर्थों में सूचना सुरक्षा में), कुछ रिपोर्टें पूरी तरह से प्लसस के बिना आंख को प्रसन्न कर रही थीं ...
हालांकि, 3 सौ साइटों के बीच "टपका हुआ" साइटें मिलीं।
भेद्यता की रेटिंग
1)। सभी प्रकार के खुले फ़ोल्डर और फ़ाइलों को एक्सेस करने की अनुमति नहीं है। (40 ~ साइटें)
2)। विभिन्न संभावित SQL और XSS स्थान। (20 ~ साइटें)
3)। खतरनाक सूचना विनिमय प्रोटोकॉल, नॉन-पासवर्ड मेम्केड और सभी प्रकार के छेदों में प्रवेश (फाइलों तक पहुंच की कोई जांच नहीं है, या एक खाली पासवर्ड = पूर्ण पासवर्ड)। (10 ~ साइटें)
4)। फ्रैंक त्रुटियां (या दोष)। व्यवस्थापक पैनल के लिए पासवर्ड की कमी (स्क्रिप्ट ने 12 फ़ाइलों की तरह शपथ ली, और यह देखने के लिए भेजा कि वहां क्या दिलचस्प था)। (2 साइटें)
5)। त्रुटि एक ही प्रतिलिपि में मिली, और फिर एक ओवरसाइट (मुझे लगता है) के कारण, रूट लॉगिन और कोई पासवर्ड (डिफ़ॉल्ट सेटिंग्स) के साथ phpmyadmin तक सीधी पहुंच। इस साइट पर कोई अधिक भेद्यता नहीं पाई गई थी, इसलिए मेरा मानना है कि यह केवल एक निरीक्षण है।
सभी उपयोगकर्ताओं की जांच नहीं की गई, सभी साइटें नहीं, सभी संभावनाओं की सभी विशेषताएं नहीं!
मुझे उम्मीद है कि यह पोस्ट किसी के लिए उपयोगी होगी (कुछ प्रशासक अचानक उसकी साइट पर कुछ जांच करेंगे)।
कमजोर साइट व्यवस्थापकों को सूचित किया। मैं आपके सिर में सकारात्मक विचारों की आशा करता हूं!