w12scan 完全部署

安装前说明:

本文将介绍在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端展示。w12scan

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’ # 搜索存在的某个漏洞
  • 自定义资产配置
    • 通过自定义某公司相关域名或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_HOSTREDIS_PASSWORD为对应redis地址与密码
      • 修改NODE_NAME为这个节点取个名字吧
    • 启动!
      docker-compose up -d

       

相关问题

  1. 根据服务器配置修改docker-compose.yml参数,设置elasticsearch内存占用大小,默认设置是521M,如果你是1G内存可以设置为128M。
  2. 在Windows上安装,需要注意.sh文件格式问题 https://github.com/boy-hack/w12scan/issues/12 (感谢 @Hotsunrize).
  3. Q:如何分布式部署?A:部署方案
  4. Q:启动后搜索数为0?A:需要添加扫描目标
  5. 不要边扫描边搜索,elastisearch在插入数据时会作分析,分词等等操作(此时效率不高),如果在此时搜索可能会返回503,建议扫描完毕后在进行搜索。(后期会使用数据迁移解决)

分布式文档一处小错误

部署Web与Redis

  • 如果Elasticsearch需要验证,在docker-compose.yml的web中加入环境变量ELASTICSEARCH_AUTH = user:passELASTICSEARCH_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

     

文 / Aex
LEAVE A REPLY
loading