CentOS 7安装Cobra
官方文档:http://cobra.feei.cn/installation
(注:按照文档一步步操作,遇到了一些小问题,记录下安装过程)
系统环境:
[root@Cobra-VM2 ~]# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
[root@Cobra-VM2 local]# python -V
Python 2.7.5
按官网文档提示,安装CentOS 依赖:
[root@Cobra-VM2 ~]# yum install flex bison phantomjs
安装git:
[root@Cobra-VM2 ~]# yum -y install git
创建 /data目录,进入,执行 git clone:
[root@Cobra-VM2 data]# git clone https://github.com/WhaleShark-Team/cobra.git && cd cobra
执行 pip install -r requirements.txt:
[root@Cobra-VM2 cobra]# pip install -r requirements.txt
-bash: pip: 未找到命令
好吧,没有预装pip,安装一下:
[root@Cobra-VM2 cobra]# yum -y install epel-release
[root@Cobra-VM2 cobra]# yum install python-pip
[root@Cobra-VM2 cobra]# pip install --upgrade pip
再执行pip install -r requirements.txt:
嗯,系统回显
Successfully installed ConcurrentLogHandler-0.9.1 Flask-1.0 Flask-RESTful-0.3.6 Jinja2-2.10.1 MarkupSafe-1.1.1 Werkzeug-0.15.3 aniso8601-7.0.0 certifi-2019.6.16 chardet-3.0.4 click-7.0 idna-2.7 itsdangerous-1.1.0 phply-1.0.0 pip-9.0.1 ply-3.11 prettytable-0.7.2 py-1.8.0 pytest-3.0.6 pytz-2019.2 rarfile-2.7 requests-2.20.0 six-1.12.0 urllib3-1.24.3
看上去一切正常,然而:
[root@Cobra-VM2 cobra]# python cobra.py --help
Traceback (most recent call last):
File "cobra.py", line 18, in <module>
from cobra import main
File "/data/cobra/cobra/__init__.py", line 22, in <module>
from . import cli, api, config
File "/data/cobra/cobra/api.py", line 27, in <module>
from flask import Flask, request, render_template, Blueprint
File "/usr/lib/python2.7/site-packages/flask/__init__.py", line 21, in <module>
from .app import Flask, Request, Response
File "/usr/lib/python2.7/site-packages/flask/app.py", line 23, in <module>
from werkzeug.routing import BuildError, Map, RequestRedirect, Rule
File "/usr/lib/python2.7/site-packages/werkzeug/routing.py", line 948
exec(code, globs, locs)
SyntaxError: unqualified exec is not allowed in function '_compile_builder' it contains a nested function with free variables
报错了,google了一下报错原因,貌似是python 2版本的一个bug,不好解决。(自己python能力不行,没法细致分析报错部分的代码和修改。)
看到cobra官方文档说也支持python 3,于是换个思路,计划升级到python3再装一次试试:
[root@Cobra-VM2 tmp]# wget https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tgz
安装依赖包:
[root@Cobra-VM2 Python-3.7.3]# yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc libffi-devel
[root@Cobra-VM2 tmp]# tar -zxf Python-3.7.3.tgz
[root@Cobra-VM2 tmp]# cd Python-3.7.3
[root@Cobra-VM2 Python-3.7.3]# ./configure --prefix=/usr/local/python3.7
[root@Cobra-VM2 Python-3.7.3]# make && make install
python 3安装完之后,替换一下软链接
[root@Cobra-VM2 Python-3.7.3]# mv /usr/bin/python /usr/bin/python.bak
[root@Cobra-VM2 Python-3.7.3]# ln -s /usr/local/python3.7/bin/python3.7 /usr/bin/python
此时看到,python默认执行已经是3.7.3版本。
[root@Cobra-VM2 Python-3.7.3]# python -V
Python 3.7.3
(补充:yum需要使用python2,将/usr/bin/python改为python3后,yum就不能正常运行了,因此需要更改一下yum的配置
vi /usr/bin/yum
vi /usr/libexec/urlgrabber-ext-down
编辑这两个文件,将文件头的#!/usr/bin/python改为#!/usr/bin/python2即可。)
好,python3升级完了,再来装一次cobra:
[root@Cobra-VM2 cobra]# python cobra.py --help
Traceback (most recent call last):
File "cobra.py", line 18, in <module>
from cobra import main
File "/data/cobra/cobra/__init__.py", line 21, in <module>
from .log import logger
File "/data/cobra/cobra/log.py", line 19, in <module>
import cloghandler
ModuleNotFoundError: No module named 'cloghandler'
还是报错,提示找不到cloghandler这个module.
看上去可能和环境变量设置有关系。
查了一下cloghandler.py这个文件路径:
[root@Cobra-VM2 cobra]# find * / -name cloghandler.py
/usr/lib/python2.7/site-packages/cloghandler.py
修改/etc/profile文件
[root@Cobra-VM2 cobra]# vi /etc/profile
最后增加两行
export PATH=$PATH:/usr/lib
export PATH=$PATH:/usr/local/python3.7/bin
执行resouce /etc/profile命令使环境变量立即生效,使用export命令查看PATH变量,确实已生效。
[root@Cobra-VM2 cobra]# source /etc/profile
[root@Cobra-VM2 cobra]# export
declare -x PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/lib:/usr/lib:/usr/local/python3.7/bin"
再来一次,还是报同样的错误。
[root@Cobra-VM2 cobra]# python cobra.py --help
Traceback (most recent call last):
File "cobra.py", line 18, in <module>
from cobra import main
File "/data/cobra/cobra/__init__.py", line 21, in <module>
from .log import logger
File "/data/cobra/cobra/log.py", line 19, in <module>
import cloghandler
ModuleNotFoundError: No module named 'cloghandler'
有点小崩溃。
思考了一阵,再仔细看了一下Cobra的官方安装步骤,我再做了一次尝试,在上一步pip install -r requirements.txt命令时,我用python3版本的pip试试。
[root@Cobra-VM2 cobra]# pip3 install -r requirements.txt
执行成功,又更新了一堆的依赖组件:
Successfully installed ConcurrentLogHandler-0.9.1 Flask-1.0 Flask-RESTful-0.3.6 Jinja2-2.10.1 MarkupSafe-1.1.1 Werkzeug-0.15.3 aniso8601-7.0.0 certifi-2019.6.16 chardet-3.0.4 click-7.0 idna-2.7 itsdangerous-1.1.0 phply-1.0.0 pip-9.0.1 ply-3.11 prettytable-0.7.2 py-1.8.0 pytest-3.0.6 pytz-2019.2 rarfile-2.7 requests-2.20.0 six-1.12.0 urllib3-1.24.3
再次测试启动cobra,终于不报错了。^_^
[root@Cobra-VM2 cobra]# python cobra.py --help
usage: cobra [-h] [-t <target>] [-f <format>] [-o <output>] [-r <rule_id>]
[-d] [-sid SID] [-dels] [-rp] [-m] [-H <host>] [-P <port>]
Usage:
python cobra.py -t tests/vulnerabilities
python cobra.py -t tests/vulnerabilities -r cvi-190001,cvi-190002
python cobra.py -t tests/vulnerabilities -f json -o /tmp/report.json
python cobra.py -t https://github.com/ethicalhack3r/DVWA -f json -o feei@feei.cn
python cobra.py -t https://github.com/ethicalhack3r/DVWA -f json -o http://push.to.com/api
python cobra.py -H 127.0.0.1 -P 8888
本来也可以直接用命令行执行cobra,但是还是想看一下web页面
[root@Cobra-VM2 cobra]# python cobra.py -H 10.9.41.111 -P 80
[14:19:23] [INFO] Start 10.9.41.111:80
* Serving Flask app "cobra.api" (lazy loading)
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://10.9.41.111:80/ (Press CTRL+C to quit)
(注意:如果-H后面参数写127.0.0.1,只能本机打开此页面,没法通过网络访问,如果本地没装图形界面,这个web页面启用和没启用就没差异了。
如果要通过网络访问,-H后面参数,还是得写可以从网络中访问到的IP地址,还得写本地防火墙规则或者直接禁用防火墙)
[root@Cobra-VM2 ~]# yum install net-tools
做完这些,我终于在自己的物理PC上通过浏览器打开了这个cobra虚拟机的web页面,不容易。
如果要在web页面提交自己准备的web程序包来执行扫描,需要执行一下初始化配置,否则会提示upload错误。
在cobra.py文件所在目录,有个配置文件模板 config.template
cp config.template config
最后回顾分析了一下,python2时的错误,我看不懂也解决不了,感觉需要改代码。
python3刚开始的报错,应该还是和python搜索关联lib文件的路径设置有关系,升级完Python3之后,执行pip命令,依赖的库还是装在了python2.7的目录里,当时cloghandler.py文件在/usr/lib/python2.7/site-packages路径下:
[root@Cobra-VM2 cobra]# find * / -name cloghandler.py
/usr/lib/python2.7/site-packages/cloghandler.py
使用pip3来执行官网的安装步骤后,cloghandler.py文件在/usr/local/python3.7/lib/python3.7/路径下:
[root@Cobra-VM ~]# find * / -name cloghandler.py
/usr/local/python3.7/lib/python3.7/site-packages/cloghandler.py
这应该是和python pip库管理器的机制有关,google了一下找到了大神们写的相关文章,文中说到,如果使用python3执行程序,那么就不能import python2.7/site-packages中的库,我遇到的问题应该就是命中了这个。