
एक प्लगिन-आधारित स्कैनर जो सुरक्षा शोधकर्ताओं को कई CMS (मुख्य रूप से Drupal और Silverstripe) में समस्याओं की पहचान करने में सहायता करता है।
एक प्लगइन-आधारित स्कैनर जो सुरक्षा शोधकर्ताओं को कई CMS के साथ समस्याओं की पहचान करने में सहायता करता है।
बिना पूर्व आपसी सहमति के लक्ष्यों पर हमला करने के लिए droopescan का उपयोग करना अवैध है। अंतिम उपयोगकर्ता की जिम्मेदारी है कि वह सभी लागू स्थानीय, राज्य और संघीय कानूनों का पालन करे। डेवलपर्स कोई दायित्व नहीं लेते हैं और इस प्रोग्राम के किसी भी दुरुपयोग या क्षति के लिए जिम्मेदार नहीं हैं। कृपया ध्यान दें कि जबकि droopescan दूरस्थ होस्ट पर स्थापित सबसे संभावित CMS संस्करण का आउटपुट देता है, संस्करण संख्याओं और कमजोरियों के बीच कोई भी सहसंबंध उपयोगकर्ता द्वारा मैन्युअल रूप से किया जाना चाहिए।
समर्थित CMS हैं:
आंशिक कार्यक्षमता:
computer:~/droopescan$ droopescan scan drupal -u http://example.org/ -t 32
[+] No themes found.
[+] Possible interesting urls found:
Default changelog file - https://www.example.org/CHANGELOG.txt
Default admin - https://www.example.org/user/login
[+] Possible version(s):
7.34
[+] Plugins found:
views https://www.example.org/sites/all/modules/views/
https://www.example.org/sites/all/modules/views/README.txt
https://www.example.org/sites/all/modules/views/LICENSE.txt
token https://www.example.org/sites/all/modules/token/
https://www.example.org/sites/all/modules/token/README.txt
https://www.example.org/sites/all/modules/token/LICENSE.txt
pathauto https://www.example.org/sites/all/modules/pathauto/
https://www.example.org/sites/all/modules/pathauto/README.txt
https://www.example.org/sites/all/modules/pathauto/LICENSE.txt
https://www.example.org/sites/all/modules/pathauto/API.txt
libraries https://www.example.org/sites/all/modules/libraries/
https://www.example.org/sites/all/modules/libraries/CHANGELOG.txt
https://www.example.org/sites/all/modules/libraries/README.txt
https://www.example.org/sites/all/modules/libraries/LICENSE.txt
entity https://www.example.org/sites/all/modules/entity/
https://www.example.org/sites/all/modules/entity/README.txt
https://www.example.org/sites/all/modules/entity/LICENSE.txt
google_analytics https://www.example.org/sites/all/modules/google_analytics/
https://www.example.org/sites/all/modules/google_analytics/README.txt
https://www.example.org/sites/all/modules/google_analytics/LICENSE.txt
ctools https://www.example.org/sites/all/modules/ctools/
https://www.example.org/sites/all/modules/ctools/CHANGELOG.txt
https://www.example.org/sites/all/modules/ctools/LICENSE.txt
https://www.example.org/sites/all/modules/ctools/API.txt
features https://www.example.org/sites/all/modules/features/
https://www.example.org/sites/all/modules/features/CHANGELOG.txt
https://www.example.org/sites/all/modules/features/README.txt
https://www.example.org/sites/all/modules/features/LICENSE.txt
https://www.example.org/sites/all/modules/features/API.txt
[... snip for README ...]
[+] Scan finished (0:04:59.502427 elapsed)
आप निम्न कमांड चलाकर विकल्पों की पूरी सूची प्राप्त कर सकते हैं:
droopescan --help
droopescan scan --help
क्योंकि droopescan:
pip का उपयोग करके स्थापना आसान है:
apt-get install python-pip
pip install droopescan
मैन्युअल स्थापना इस प्रकार है:
git clone https://github.com/droope/droopescan.git
cd droopescan
pip install -r requirements.txt
./droopescan scan --help
master शाखा नवीनतम रिलीज़ (pypi में क्या है) से मेल खाती है। development शाखा अस्थिर है और सभी पुल अनुरोध इसके विरुद्ध किए जाने चाहिए।
BlackArch पैकेज स्थापना (तीसरे पक्ष द्वारा रखरखाव):
sudo pacman -S droopescan
आप एक Docker इमेज बना सकते हैं और Docker से droopescan चला सकते हैं:
git clone https://github.com/droope/droopescan.git
cd droopescan
docker build -t droope/droopescan .
# सहायता प्रदर्शित करें
docker run --rm droope/droopescan
# एक drupal साइट स्कैन करने का उदाहरण
docker run --rm droope/droopescan scan drupal -u https://drupal.example.com
Droopescan का लक्ष्य डिफ़ॉल्ट रूप से सबसे सटीक होना है, जबकि अत्यधिक समवर्ती अनुरोधों के कारण लक्ष्य सर्वर को ओवरलोड नहीं करना है। इस वजह से, डिफ़ॉल्ट रूप से, चार थ्रेड्स के साथ बड़ी संख्या में अनुरोध किए जाएंगे; इन सेटिंग्स को क्रमशः --number और --threads तर्कों का उपयोग करके बदलें।
यह उपकरण चार प्रकार के परीक्षण करने में सक्षम है। डिफ़ॉल्ट रूप से सभी परीक्षण चलाए जाते हैं, लेकिन आप -e या --enumerate फ्लैग के साथ निम्न में से एक निर्दिष्ट कर सकते हैं:
आप -u या --url पैरामीटर पास करके स्कैन करने के लिए एक विशेष होस्ट निर्दिष्ट कर सकते हैं:
droopescan scan drupal -u example.org
आप drupal तर्क को छोड़ भी सकते हैं। यह "CMS पहचान" को ट्रिगर करेगा, जैसे:
droopescan scan -u example.org
-U या --url-file पैरामीटर का उपयोग करके कई URL स्कैन किए जा सकते हैं। यह पैरामीटर उस फ़ाइल के पथ पर सेट किया जाना चाहिए जिसमें URL की सूची हो।
droopescan scan drupal -U list_of_urls.txt
इस उदाहरण में drupal पैरामीटर को भी छोड़ा जा सकता है। प्रत्येक साइट के लिए, CMS पहचान करने के लिए कई GET अनुरोध किए जाएंगे, और यदि साइट को समर्थित CMS माना जाता है, तो इसे स्कैन किया जाता है और आउटपुट सूची में जोड़ा जाता है। यह उपयोगी हो सकता है, उदाहरण के लिए, आपके संगठन की सभी साइटों पर droopescan चलाने के लिए।
droopescan scan -U list_of_urls.txt
नीचे दिए गए कोड ब्लॉक में URL की एक उदाहरण सूची है, प्रति पंक्ति एक:
http://localhost/drupal/6.0/
http://localhost/drupal/6.1/
http://localhost/drupal/6.10/
http://localhost/drupal/6.11/
http://localhost/drupal/6.12/
URL और डिफ़ॉल्ट होस्ट हेडर को ओवरराइड करने के लिए एक मान वाली फ़ाइल, जो टैब या स्पेस द्वारा अलग की गई हो, URL फ़ाइलों के लिए भी ठीक है। यह तब काम आ सकता है जब आप होस्ट की एक बड़ी श्रृंखला में स्कैन कर रहे हों और अनावश्यक DNS क्वेरी को रोकना चाहते हों। स्पष्ट करने के लिए, नीचे एक उदाहरण:
192.168.1.1 example.org
http://192.168.1.1/ example.org
http://192.168.1.2/drupal/ example.org
यह परीक्षण करने के लिए कि क्या स्कैनर किसी विशेष CMS के लिए काम करता है, आधिकारिक साइट (जैसे wordpress के लिए wordpress.org) को स्कैन करना काफी आकर्षक है, लेकिन आधिकारिक साइटें शायद ही कभी अपने संबंधित CMS के वैनिला इंस्टॉलेशन चलाती हैं या गैर-पारंपरिक चीजें करती हैं। उदाहरण के लिए, wordpress.org wordpress का ब्लीडिंग एज संस्करण चलाता है, जिसे droopescan द्वारा wordpress के रूप में बिल्कुल भी पहचाना नहीं जाएगा क्योंकि चेकसम किसी भी ज्ञात wordpress संस्करण से मेल नहीं खाते।
एप्लिकेशन .netrc फ़ाइलों और http_proxy पर्यावरण चर को पूरी तरह से समर्थन करता है।
बुनियादी प्रमाणीकरण के लिए .netrc फ़ाइल का उपयोग करें। एक उदाहरण netrc फ़ाइल (आपके रूट होम डायरेक्टरी में रखी गई .netrc नामक फ़ाइल) इस प्रकार दिख सकती है:
machine secret.google.com
login [email protected]
password Winter01
आप http_proxy और https_proxy चर सेट कर सकते हैं। ये आपको एक मूल HTTP प्रॉक्सी सेट करने की अनुमति देते हैं, जिसमें आप अधिक जटिल प्रकार के प्रमाणीकरण (जैसे Fiddler, ZAP, Burp) को संभाल सकते हैं।
export http_proxy='user:password@localhost:8080'
export https_proxy='user:password@localhost:8080'
droopescan scan drupal --url http://localhost/drupal
चेतावनी: डिज़ाइन के अनुसार, इंटरसेप्टिंग प्रॉक्सी और खराब SSL वाले एप्लिकेशन के परीक्षण की अनुमति देने के लिए, droopescan स्व-हस्ताक्षरित या अन्यथा अमान्य प्रमाणपत्रों की अनुमति देता है। ˙ ͜ʟ˙
यह एप्लिकेशन दोनों "मानक आउटपुट" का समर्थन करता है, जो मानव उपभोग के लिए है, या JSON, जो मशीन उपभोग के लिए अधिक उपयुक्त है। यह आउटपुट प्रमुख संस्करणों के बीच स्थिर है।
इसे --output फ्लैग से नियंत्रित किया जा सकता है। कुछ नमूना JSON आउटपुट इस प्रकार दिखेगा (अत्यधिक व्हाइटस्पेस को छोड़कर):
{
"themes": {
"is_empty": true,
"finds": [
]
},
"interesting urls": {
"is_empty": false,
"finds": [
{
"url": "https:\/\/www.drupal.org\/CHANGELOG.txt",
"description": "Default changelog file."
},
{
"url": "https:\/\/www.drupal.org\/user\/login",
"description": "Default admin."
}
]
},
"version": {
"is_empty": false,
"finds": [
"7.29",
"7.30",
"7.31"
]
},
"plugins": {
"is_empty": false,
"finds": [
{
"url": "https:\/\/www.drupal.org\/sites\/all\/modules\/views\/",
"name": "views"
},
[...snip...]
]
}
}
JSON ऑब्जेक्ट से कुछ विशेषताएँ गायब हो सकती हैं यदि स्कैन के कुछ भाग नहीं चलाए गए हैं।
मल्टी-साइट आउटपुट इस प्रकार दिखता है; प्रत्येक पंक्ति में ऊपर दिखाए गए अनुसार एक मान्य JSON ऑब्जेक्ट होता है।
$ droopescan scan drupal -U six_and_above.txt -e v
{"host": "http://localhost/drupal-7.6/", "version": {"is_empty": false, "finds": ["7.6"]}}
{"host": "http://localhost/drupal-7.7/", "version": {"is_empty": false, "finds": ["7.7"]}}
{"host": "http://localhost/drupal-7.8/", "version": {"is_empty": false, "finds": ["7.8"]}}
{"host": "http://localhost/drupal-7.9/", "version": {"is_empty": false, "finds": ["7.9"]}}
{"host": "http://localhost/drupal-7.10/", "version": {"is_empty": false, "finds": ["7.10"]}}
{"host": "http://localhost/drupal-7.11/", "version": {"is_empty": false, "finds": ["7.11"]}}
{"host": "http://localhost/drupal-7.12/", "version": {"is_empty": false, "finds": ["7.12"]}}
{"host": "http://localhost/drupal-7.13/", "version": {"is_empty": false, "finds": ["7.13"]}}
{"host": "http://localhost/drupal-7.14/", "version": {"is_empty": false, "finds": ["7.14"]}}
{"host": "http://localhost/drupal-7.15/", "version": {"is_empty": false, "finds": ["7.15"]}}
{"host": "http://localhost/drupal-7.16/", "version": {"is_empty": false, "finds": ["7.16"]}}
{"host": "http://localhost/drupal-7.17/", "version": {"is_empty": false, "finds": ["7.17"]}}
{"host": "http://localhost/drupal-7.18/", "version": {"is_empty": false, "finds": ["7.18"]}}
{"host": "http://localhost/drupal-7.19/", "version": {"is_empty": false, "finds": ["7.19"]}}
{"host": "http://localhost/drupal-7.20/", "version": {"is_empty": false, "finds": ["7.20"]}}
{"host": "http://localhost/drupal-7.21/", "version": {"is_empty": false, "finds": ["7.21"]}}
{"host": "http://localhost/drupal-7.22/", "version": {"is_empty": false, "finds": ["7.22"]}}
{"host": "http://localhost/drupal-7.23/", "version": {"is_empty": false, "finds": ["7.23"]}}
{"host": "http://localhost/drupal-7.24/", "version": {"is_empty": false, "finds": ["7.24"]}}
{"host": "http://localhost/drupal-7.25/", "version": {"is_empty": false, "finds": ["7.25"]}}
{"host": "http://localhost/drupal-7.26/", "version": {"is_empty": false, "finds": ["7.26"]}}
{"host": "http://localhost/drupal-7.27/", "version": {"is_empty": false, "finds": ["7.27"]}}
{"host": "http://localhost/drupal-7.28/", "version": {"is_empty": false, "finds": ["7.28"]}}
{"host": "http://localhost/drupal-7.29/", "version": {"is_empty": false, "finds": ["7.29"]}}
{"host": "http://localhost/drupal-7.30/", "version": {"is_empty": false, "finds": ["7.30"]}}
{"host": "http://localhost/drupal-7.31/", "version": {"is_empty": false, "finds": ["7.31"]}}
{"host": "http://localhost/drupal-7.32/", "version": {"is_empty": false, "finds": ["7.32"]}}
{"host": "http://localhost/drupal-7.33/", "version": {"is_empty": false, "finds": ["7.33"]}}
{"host": "http://localhost/drupal-7.34/", "version": {"is_empty": false, "finds": ["7.34"]}}
जब चीजें आपके अनुसार नहीं चल रही हों, तो आप --debug-requests कमांड का उपयोग करके कारण जांच सकते हैं।
कुछ आउटपुट इस तरह दिख सकता है:
computer:~/droopescan# droopescan scan silverstripe -u http://localhost -n 10 -e p --debug-requests
[head] http://localhost/framework/... 403
[head] http://localhost/cms/css/layout.css... 404
[head] http://localhost/framework/css/UploadField.css... 200
[head] http://localhost/misc/test/error/404/ispresent.html... 404
[head] http://localhost/widgetextensions/... 404
[head] http://localhost/orbit/... 404
[head] http://localhost/sitemap/... 404
[head] http://localhost/simplestspam/... 404
[head] http://localhost/ecommerce_modifier_example/... 404
[head] http://localhost/silverstripe-hashpath/... 404
[head] http://localhost/timeline/... 404
[head] http://localhost/silverstripe-hiddenfields/... 404
[head] http://localhost/addressable/... 404
[head] http://localhost/silverstripe-description/... 404
[+] No plugins found.
[+] Scan finished (0:00:00.058422 elapsed)
--debug पैरामीटर भी मौजूद है और इसका उपयोग एप्लिकेशन इंटरनल को डीबग करने के लिए किया जा सकता है।
आप निम्न कमांड चलाकर स्कैनर की क्षमताओं पर एक अप-टू-डेट रिपोर्ट प्राप्त कर सकते हैं:
droopescan stats
कुछ नमूना आउटपुट इस प्रकार दिख सकता है:
Functionality available for ‘drupal’:
- Enumerate plugins (XXXX plugins.)
- Enumerate themes (XXXX themes.)
- Enumerate interesting urls (X urls.)
- Enumerate version (up to version X.X.X-alphaXX, X.XX, X.XX.)
Functionality available for ‘joomla’:
- Enumerate interesting urls (X urls.)
- Enumerate version (up to version XX.X, X.X.X, X.X.XX.rcX.)
Functionality available for ‘wordpress’:
- Enumerate interesting urls (X urls.)
- Enumerate version (up to version X.X.X, X.X.X, X.X.X.)
Functionality available for ‘silverstripe’:
- Enumerate plugins (XXX plugins.)
- Enumerate themes (XX themes.)
- Enumerate interesting urls (X urls.)
- Enumerate version (up to version X.X.XX, X.X.XX, X.X.XX.)
यह सत्यापित करना महत्वपूर्ण है कि CMS स्थापना के लिए उपलब्ध नवीनतम संस्करण droopescan में उपलब्ध है, अन्यथा परिणाम गलत हो सकते हैं।
आप अपने पसंदीदा CMS के लिए समर्थन जोड़ सकते हैं। यह प्रक्रिया वास्तव में काफी सरल है, और plugins/ फ़ोल्डर में example.py फ़ाइल को देखकर बहुत सारी जानकारी प्राप्त की जा सकती है।
यह फ़ाइल आपके कार्यान्वयन के लिए आधार के रूप में अच्छी तरह से काम करेगी।
आप Joomla के लिए अपना खुद का प्लगइन बना सकते हैं और इसे निम्नानुसार सक्षम कर सकते हैं:
$ cp plugins/example.py plugins/joomla.py
$ cp plugins.d/example.conf plugins.d/joomla.conf
फिर आपको plugins/joomla.py पर जाना होगा और कुछ चीजें बदलनी होंगी:
@controller.expose(help='example scanner')
def joomla(self):
self.plugin_init()
हमें plugins.d/joomla.conf फ़ाइल को भी बदलना होगा, और इसे निम्नलिखित में बदलना होगा:
[joomla]
enable_plugin = true
अब हमें ऐसी स्थिति में होना चाहिए जो इस प्रकार दिखे:
$ droopescan scan joomla
[+] --url parameter is required.
आपका अगला कदम एक मान्य प्लगइन वर्डलिस्ट, एक मान्य थीम वर्डलिस्ट, एक versions.xml फ़ाइल, और वैकल्पिक रूप से दिलचस्प URL की एक सूची उत्पन्न करना होगा, साथ ही joomla.py में मौजूद सभी चरों को उन मानों से बदलना होगा जो आपके कार्यान्वयन के लिए सही हैं।
पुल अनुरोध स्वीकार किए जाने के लिए प्लगइन को स्वचालित रूप से अपडेट करने की आवश्यकता है। आगे के दस्तावेज़ बाद में उपलब्ध हो सकते हैं, लेकिन अभी के लिए, ध्यान रखें कि update_version_check, update_version, update_plugins_check और update_plugins को लागू किया जाना चाहिए। संदर्भ के लिए, कृपया drupal.py फ़ाइल की समीक्षा करें। प्लगइन्स को अद्यतित रखने के लिए यह आवश्यक है।
नए प्लगइन बनाने वाले पुल अनुरोधों का स्वागत है, बशर्ते कि उन प्लगइनों का रखरखाव स्वचालित रूप से किया जाता हो।
कृपया याद रखें कि अपने पुल अनुरोध master के बजाय development शाखा के विरुद्ध करें। मुद्दे GitHub पर मुद्दा ट्रैकर पर उठाए जा सकते हैं।
परीक्षण चलाने के लिए, कुछ निर्भरताएँ स्थापित की जानी चाहिए। निम्न कमांड चलाने से वे स्थापित हो जाएँगी और परीक्षण चल जाएँगे:
apt-get install libxslt1-dev libxml2-dev zlib1g-dev python python-pip python-dev python3 python3-pip python3-dev
pip install -r requirements.txt -r requirements_test.txt
pip3 install -r requirements.txt -r requirements_test.txt
./droopescan test
आप -s फ्लैग के साथ अलग-अलग परीक्षण चला सकते हैं।
./droopescan test -s test_integration_drupal
यह प्रोजेक्ट AGPL लाइसेंस के तहत लाइसेंस प्राप्त है। LICENSE फ़ाइल देखें।