Droopescan – 基于CMS的插件化安全扫描器

Droopescan是一款基于插件的扫描器,可帮助安全研究人员发现Drupal,SilverStripe,Wordpress,Joomla(枚举版本信息和可利用URL地址)和Moodle的问题。
安装:
使用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
特点:
扫描类型
Droopescan的准确率在默认情况下是最精准的,而不会因为过多的并发请求而超载目标服务器。由于这一点,所以在默认情况下将使用四个线程对目标进行大量数据请求;你也可以使用-number和-threads参数分别更改这些设置。
这个工具可以使用四种测试模式。默认情况下所有测试模式都在运行,但是您可以使用-e或--enumerate来指定以下内容:
p -- Plugin checks:执行数千个HTTP请求,并返回目标主机上已安装所有插件的列表。
t -- Theme checks:如上所述,但仅检查主题。
v -- Version checks:下载多个文件,根据这些文件的校验和,返回一个所有可能版本的列表。
i -- Interesting URL checks检查有价值的URL(例如:管理面板,Readme等)


目标说明
您可以通过-u或--url参数指定特定的主机来扫描:
droopescan scan drupal -u example.org
您可以通过-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参数也可以省略。对于每个站点,它将会发出几个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),但是官方网站很少在他们的CMS系统上运行vainilla,或者做一些其他改版的事情。例如,WordPress.org运行最新版本的WordPress,因为droopescan在所有的WordPress扫描中发现校验和不匹配,所以不会被确定为任何已知的WordPress版本。
身份验证
应用程序完全支持.netrc文件和http_proxy环境变量。
使用.netrc文件进行基本身份验证。一个示例netrc(一个名为.netrc的文件放在根目录主目录中)文件可以如下所示:
machine secret.google.com
    login admin@google.com
    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的WEB应用程序测试,droopescan必须允许自签名或其他无效的证书。
输出
该应用程序既支持“标准输出”,也支持JSON,后者更适合机耗。这个稳定输出只在主要版本之间。
这可以用 --output控制。一些示例JSON输出如下所示(除去多余的空格):

[sourcecode language="plain"]
{
"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...]
]
}
}
[/sourcecode]

如果不运行部分扫描,JSON对象可能缺少一些属性。
这就是多站点输出的样子;每一行都包含一个有效的JSON对象,如下所示。

[sourcecode language="plain"]
$ 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"]}}
[/sourcecode]

调试
当事情不按您的方式进行时,您可以通过使用 --debug-requests 命令来检查原因。
某些输出可能如下所示:

[sourcecode language="plain"]
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)
[/sourcecode]

--debug该调试参数也可用于调试应用程序内部部件。

统计
通过运行以下命令,您可以获得扫描器功能的最新报告
droopescan stats
一些示例输出可能如下所示:

[sourcecode language="plain"]
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.)
[/sourcecode]

验证在droopescan中可用于CMS安装的最新版本非常重要,否则结果可能不准确。

文章:http://www.effecthacking.com/2018/02/droopescan.html
本文由华盟网翻译排版,转载请注明文章出处。

本文由 华盟网 作者:AlexFrankly 发表,其版权均为 华盟网 所有,文章内容系作者个人观点,不代表 华盟网 对观点赞同或支持。如需转载,请注明文章来源。

0

发表评论