安装前说明:
本文将介绍在ubuntu16.04系统下安装和升级docker、docker-compose、docker-machine。
docker:有两个版本:docker-ce(社区版)和docker-ee(企业版)。
笔者这里介绍安装或升级的是最新版docker-ce(社区版)。
参考官网地址:https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/#os-requirements
docker-compse:可运行和管理多个docker容器。
docker-machine:docker官方提供的docker管理工具。可管理多个docker主机,可搭建swarm集群。
docker安装
1,卸载旧版本docker
全新安装时,无需执行该步骤
sudo apt-get remove docker docker-engine docker.io
2,更新系统软件
sudo apt-get update
3,安装依赖包
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
4,添加官方密钥
执行该命令时,如遇到长时间没有响应说明网络连接不到docker网站,需要使用代-理进行。
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
5,添加仓库
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
6,再次更新软件
经实践,这一步不能够省略,我们需要再次把软件更新到最新,否则下一步有可能会报错。
sudo apt-get update
7,安装docker
如果想指定安装某一版本,可使用 sudo apt-get install docker-ce=<VERSION> 命令,把<VERSION>替换为具体版本即可。
以下命令没有指定版本,默认就会安装最新版
sudo apt-get install docker-ce
8,查看docker版本
docker -v
docker-compose安装
1,下载docker-compose
sudo curl -L https://github.com/docker/compose/releases/download/1.17.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
2,授权
sudo chmod +x /usr/local/bin/docker-compose
3,查看版本信息
docker-compose --version
docker-machine安装
说明:docker-machine的使用是要基于virtualBox的。如果没有安装安装过,请先安装virtualBox。
1,安装virtualBox
登录virtualBox官网:https://www.virtualbox.org/wiki/Linux_Downloads
找到”Ubuntu 16.04 (“Xenial”) i386 | AMD64″字样,点击“AMD64”进行下载。
下载后,执行以下命令进行安装:
sudo dpkg -i virtualbox-5.2_5.2.0-118431_Ubuntu_xenial_amd64.deb
2,下载并安装docker-machine
curl -L https://github.com/docker/machine/releases/download/v0.13.0/docker-machine-`uname -s`-`uname -m` >/tmp/docker-machine &&
chmod +x /tmp/docker-machine &&
sudo cp /tmp/docker-machine /usr/local/bin/docker-machine
3,查看版本信息
docker-machine version
Masscan扫描器安装
安装依赖包
apt-get install clang git gcc make libpcap-dev
复制git镜像
git clone https://github.com/robertdavidgraham/masscan
cd masscan
make
cd ..
cp masscan/bin/masscan /bin
当安装完成是可以测试一下是否安装成功:
make regress
成功显示:
bin/masscan --regress
selftest: success!
扫描
单ip多端口
扫描115.115.115.115 ip 的0-20000端口
masscan 115.115.115.115 -p0-20000
扫描115.115.115.115 ip 的21和80端口
masscan 115.115.115.115 -p21,80
多ip单端口
扫描115.115.0.0-115.115.255.255 ip 的80端口
masscan 115.115.0.0-115.115.255.255 -p80
快速扫描
默认情况下,Masscan扫描速度为每秒100个数据包,这是相当慢的。为了增加这一点,只需提供该-rate选项并指定一个值。
每秒10000个数据包:
masscan 115.115.0.0-115.115.255.255 -p1-65535 --rate 10000
结果保存
masscan 115.115.0.0-115.115.255.255 -p1-65535 --rate 10000 > 1.txt
扫描结果会保存到当前目录下的1.txt里
配置文件扫描
vim masscan.conf
rate = 5000.00
output-format = xml
output-filename = masscan.xml
ports = 1723,27017,6379,9100,80,898,5800,6000
range = 192.168.0.1-192.168.0.255,192.168.10.0-192.168.10.255
masscan -c masscan.conf
详细参数
<ip/range> IP地址范围,有三种有效格式,1、单独的IPv4地址 2、类似”10.0.0.1-10.0.0.233″的范围地址 3、CIDR地址 类似于”0.0.0.0/0″,多个目标可以用都好隔开
-p <ports,–ports <ports>> 指定端口进行扫描
–banners 获取banner信息,支持少量的协议
–rate <packets-per-second> 指定发包的速率
-c <filename>, –conf <filename> 读取配置文件进行扫描
–echo 将当前的配置重定向到一个配置文件中
-e <ifname> , –adapter <ifname> 指定用来发包的网卡接口名称
–adapter-ip <ip-address> 指定发包的IP地址
–adapter-port <port> 指定发包的源端口
–adapter-mac <mac-address> 指定发包的源MAC地址
–router-mac <mac address> 指定网关的MAC地址
–exclude <ip/range> IP地址范围黑名单,防止masscan扫描
–excludefile <filename> 指定IP地址范围黑名单文件
–includefile,-iL <filename> 读取一个范围列表进行扫描
–ping 扫描应该包含ICMP回应请求
–append-output 以附加的形式输出到文件
–iflist 列出可用的网络接口,然后退出
–retries 发送重试的次数,以1秒为间隔
–nmap 打印与nmap兼容的相关信息
–http-user-agent <user-agent> 设置user-agent字段的值
–show [open,close] 告诉要显示的端口状态,默认是显示开放端口
–noshow [open,close] 禁用端口状态显示
–pcap <filename> 将接收到的数据包以libpcap格式存储
–regress 运行回归测试,测试扫描器是否正常运行
–ttl <num> 指定传出数据包的TTL值,默认为255
–wait <seconds> 指定发送完包之后的等待时间,默认为10秒
–offline 没有实际的发包,主要用来测试开销
-sL 不执行扫描,主要是生成一个随机地址列表
–readscan <binary-files> 读取从-oB生成的二进制文件,可以转化为XML或者JSON格式.
–connection-timeout <secs> 抓取banners时指定保持TCP连接的最大秒数,默认是30秒。
w12scan主程序部署
w12scan是一款网络资产发现引擎,通过WEB接口下发任务,w12scan会自动将相关的资产聚合在一起方便分析使用。
w12scan分为WEB端(用于展示显示数据)和Client端(用于搜索相关资产数据)。
基于python3 + django + elasticsearch + redis(去重+web与client通信中间件),使用WEB API添加扫描目标,扫描完成后会在WEB端展示。
WEB端
- 强大的搜索语法
- 通过搜索语法可搜索cms,服务名称,标题,国家地区等等,能够迅速找到相关目标。
- title=“abc” # 从标题中搜索
- header=“abc” # 从http头搜索
- body=“123” # 从body搜索
- url = “*.baidu.com” # 搜索baidu.com的子域名,
*号是通配符
- ip = ‘1.1.1.1’ # 搜索IP,支持CIDR
'192.168.1.0/24'
和通配符搜索'192.168.1.*'
- port = ‘80’ # 搜索端口
- app = ’nginx’ # 搜索组件
- country = ‘cn’ # 搜索国家
- service = ‘mysql’ # 搜索服务
- bug = ‘xx’ # 搜索存在的某个漏洞
- 通过搜索语法可搜索cms,服务名称,标题,国家地区等等,能够迅速找到相关目标。
- 自定义资产配置
- 通过自定义某公司相关域名或ip资产,w12scan会自动帮你找到对应的资产目标,当你浏览该目标时,有醒目的标识提醒你该目标的归属。
- 自动关联
- 进入目标详情,若目标为ip,则会自动关联该ip上的所有域名和该c段上的所有域名。若目标为域名,则自动关联旁站,c段和子域名。
- 多节点管理
- WEB端会每隔几分钟检测一次节点的运行状况,你可以看到节点扫描的数量以及节点扫描日志。
- 任务restful
- 提供添加任务的接口,你可以在WEB端添加或者在任何软件中集成该接口。
扫描端(Client)端
- 及时的poc验证
- 通过对接airbug接口api,在线调用最新的poc验证脚本,airbug保证了漏洞更新的及时性,你也可以fork airbug项目后自行添加poc规则。
- 验证性攻击
- 扫描端内置有常见的漏洞验证服务,每扫描一次网址,都会运行这些服务,结果最终会反馈到w12scan的WEB端展现。
- 扫描与识别
- 端口扫描使用masscan,端口识别使用nmap,web应用识别调用wappalyzer和精简版的w11scan(指纹识别)
- 容易的分布式
- 在程序架构设计就考虑到了这一点,扫描端只接受任务,最后的结果只和WEB端进行交互,所以在分布式上十分容易,直接在另一台机器上运行扫描端即可。能基于docker进行分布式,也能很方便集成celery服务。
基于docker一键部署
git clone https://github.com/boy-hack/w12scan
cd w12scan
docker-compose up -d
等待一段时间后访问http://127.0.0.1:8000
默认用户名密码boyhack:boyhack
基于Docker的分布式多机部署方案
w12scan依赖四种服务,web,client,redis,elasticsearch。redis在其中扮演着消息队列的角色,所有的任务分配都由redis分发,所以,redis需要部署到可以访问到的地方(最好外网),其他服务web,client,elasticsearch内外网均可(web与elasticsearch能够互ping即可)。在多机部署中,你至少需要三台服务器,web和redis部署在一起,client与elasticsearch单独部署。为了部署方便,全部以docker部署为例,你需要做的是修改一些配置文件。
部署Elasticsearch
在一台机器上,执行如下指令
mkdir /data #elasticsearch 数据存储目录
git clone https://github.com/boy-hack/w12scan
cd w12scan/doc/distributed/elasticsearch
docker-compose up -d
将会启动elasticsearch服务,并开放9200端口。
部署Web与Redis
- 如果Elasticsearch需要验证,在
docker-compose.yml
的web中加入环境变量ELASTICSEARCH_AUTH: user:pass
- 默认会将redis部署到公网的6379端口上,并且设置密码为
hellow12scan
,在doc/distributed/web/docker-compose.yml
中修改此密码 在一台机器上,执行如下指令git clone https://github.com/boy-hack/w12scan cd w12scan/doc/distributed/web docker-compose up -d
部署Client
在启动client之前你需要做这些事
git clone https://github.com/boy-hack/w12scan cd w12scan/doc/distributed/client
- 修改
docker-compose.yml
- 修改
WEB_INTERFACE
为对应WEB的ip与端口 - 修改
REDIS_HOST
、REDIS_PASSWORD
为对应redis地址与密码 - 修改
NODE_NAME
为这个节点取个名字吧
- 修改
- 启动!
docker-compose up -d
- 修改
相关问题
- 根据服务器配置修改
docker-compose.yml
参数,设置elasticsearch内存占用大小,默认设置是521M,如果你是1G内存可以设置为128M。 - 在Windows上安装,需要注意
.sh
文件格式问题 https://github.com/boy-hack/w12scan/issues/12 (感谢 @Hotsunrize). - Q:如何分布式部署?A:部署方案
- Q:启动后搜索数为0?A:需要添加扫描目标
- 不要边扫描边搜索,elastisearch在插入数据时会作分析,分词等等操作(此时效率不高),如果在此时搜索可能会返回503,建议扫描完毕后在进行搜索。(后期会使用数据迁移解决)
分布式文档一处小错误
部署Web与Redis
- 如果Elasticsearch需要验证,在
docker-compose.yml
的web中加入环境变量ELASTICSEARCH_AUTH = user:pass
ELASTICSEARCH_AUTH: user:pass
- 默认会将redis部署到公网的6379端口上,并且设置密码为
hellow12scan
,在doc/distributed/web/docker-compose.yml
中修改此密码 在一台机器上,执行如下指令git clone https://github.com/boy-hack/w12scan cd w12scan/doc/distributed/web docker-compose up -d