
ماسح ضوئي قائم على الإضافات يساعد الباحثين في مجال الأمن على تحديد المشكلات في العديد من أنظمة إدارة المحتوى، خاصة دروبال وسيلفرسترايب.
ماسح ضوئي قائم على الإضافات يساعد باحثي الأمن في تحديد المشكلات المتعلقة بعدة أنظمة إدارة محتوى (CMS).
استخدام droopescan لمهاجمة أهداف دون موافقة مسبقة متبادلة غير قانوني. تقع على عاتق المستخدم النهائي مسؤولية الامتثال لجميع القوانين المحلية والولائية والفيدرالية المعمول بها. لا يتحمل المطورون أي مسؤولية ولا يتحملون مسؤولية أي إساءة استخدام أو ضرر يسببه هذا البرنامج. يرجى ملاحظة أنه على الرغم من أن droopescan يخرج الإصدار الأكثر احتمالاً لنظام إدارة المحتوى المثبت على المضيف البعيد، إلا أن أي ارتباط بين أرقام الإصدارات والثغرات الأمنية يجب أن يتم يدويًا بواسطة المستخدم.
أنظمة إدارة المحتوى المدعومة هي:
وظائف جزئية لـ:
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 package (يتم صيانتها بواسطة طرف ثالث):
sudo pacman -S droopescan
يمكنك بناء صورة docker وتشغيل droopescan من Docker:
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
يمكن مسح عناوين URL متعددة باستخدام المعامل -U أو --url-file. يجب تعيين هذا المعامل إلى مسار ملف يحتوي على قائمة عناوين URL.
droopescan scan drupal -U list_of_urls.txt
يمكن أيضًا حذف المعامل drupal في هذا المثال. لكل موقع، سيقوم بعدة طلبات GET لتحديد CMS، وإذا تم اعتبار الموقع 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.org لـ wordpress)، لكن المواقع الرسمية نادرًا ما تعمل بتثبيتات عادية لأنظمة إدارة المحتوى الخاصة بها أو تقوم بأشياء غير تقليدية. على سبيل المثال، يعمل wordpress.org على الإصدار الأحدث من wordpress، والذي لن يتم التعرف عليه على أنه wordpress بواسطة droopescan على الإطلاق لأن المجاميع الاختبارية لا تتطابق مع أي إصدار معروف من 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، وإلا قد تكون النتائج غير دقيقة.
يمكنك إضافة دعم لنظام إدارة المحتوى المفضل لديك. العملية بسيطة في الواقع، ويمكن الحصول على الكثير من المعلومات من خلال عرض ملف example.py في مجلد plugins/.
يجب أن يكون هذا الملف بمثابة قاعدة جيدة لتطبيقك.
يمكنك إنشاء الإضافة الخاصة بك لـ 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. هذا مطلوب لضمان تحديث الإضافات.
طلبات السحب التي تنشئ إضافات جديدة مرحب بها بشرط أن تتم صيانة تلك الإضافات تلقائيًا.
يرجى تذكر توجيه طلبات السحب الخاصة بك إلى فرع development بدلاً من master. يمكن رفع المشكلات في متتبع المشكلات هنا على 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.