GoScan是采用Golang语言编写的一款分布式综合资产管理系统,适合红队、SRC等使用

GoScan

GoScan是采用Golang语言编写的一款分布式综合资产管理系统,适合红队、SRC等使用。

该项目是自己空余时间所写,进度较慢;特公开源代码,有能力的人可以二次开发。

示例:http://112.74.169.239:9999/ (暂不开放,测试稳定性)

一、开发进度

2021.02.04

1、修复致命错误:nsq生产者断线重连

2、web探测加入主动爬虫模块,进行二次搜集子域名;敏感信息搜集、url、js等文件链接收集

3、web探测加入截图功能,使用谷歌无头浏览器进行驱动,由web端进行

2021.02.1

1、更换web框架,不使用gin框架

2、优化端口扫描、新增子域名探测模块、web指纹探测模块(所有模块都为go写,不调用三方组件)

3、web指纹探测模块 指纹规则为json格式,支持自定义添加

4、添加扫描引擎,配置信息统一下发到客户端

5、消息队列nsq采用两组,避免消息流过大及单点故障

6、新增综合扫描(一条龙服务)

2021.01.03

1、Web框架整体完成:

后台管理:用户登录、添加用户、登录锁定、删除用户、日志管理、消息通知设置(邮件、server酱)等

实用功能:杀毒进程检测、分布式端口扫描

2、客户端:

端口扫描:采用golang开发端口扫描器(Syn探测+精简服务指纹库)

二、部署教程

web和client端都推荐linux运行

web端

# 以ubuntu为例,照顾小白

# 1、数据库安装:

$ apt-get install postgresql postgresql-client # 安装数据库
$ su postgres
$ psql -U postgres     # 默认安装密码为空
$ ALTER USER postgres WITH PASSWORD 'xxxxxx';     # 修改postgre用户数据库密码
$ CREATE DATABASE goscan;     # 创建数据库
$ \q    # 退出

# 2、数据库导入,使用数据库管理工具连接postgresql数据库,导入项目路径下的sql文件: /Web/document/sql/GoScan.sql

# 3、Nsq消息队列服务运行,需要运行2个nsq进程,4150和4151分别用于web端push消息,和client端push消息
$ nohup ./client/nsqd -tcp-address 本机IP:4151 -http-address 127.0.0.1:10002 --data-path=./client > client.log 2>&1 &
$ nohup ./server/nsqd -max-msg-timeout 1h -tcp-address 本机ip:4150 -http-address 127.0.0.1:10001 --data-path=./server > server.log 2>&1 &

# 4、Web端运行:

$ chmod +x Web
# 编写config配置文件,参考项目中:GoScan/blob/main/Web/config/config.toml
$ ./Web    # 配置完成,运行看是否成功
$ nohup ./Web > web.log 2>&1 &       # 若运行成功则进行后台运行

# 浏览器访问该web地址,默认账户密码:admin/admin888@A,登录后修改密码

Client端

# config配置文件参考:GoScan/blob/main/Client/config.toml

三、演示

index

index

index

Similar Resources
Comments
  • 安装相关问题

    安装相关问题

    环境安装

    1、Postgresql数据库安装 $ apt-get install postgresql postgresql-client # 安装数据库 $ su postgres $ psql -U postgres # 默认安装密码为空 $ ALTER USER postgres WITH PASSWORD 'xxxxxx'; # 修改postgre用户数据库密码 $ CREATE DATABASE goscan; # 创建数据库 $ \q # 退出

    2、sql文件导入,使用数据库管理工具或命令行导入sql文件 sql里没有插入任何数据,需要执行完sql后手动插入一些数据 psql -h 127.0.0.1 -U postgres -W -f public.sql

    3、Nsq消息队列运行,防火墙开放以下端口

    0.0.0.0表示监听所有,在外网的要小心

    $ nohub ./nsqd -tcp-address 0.0.0.0:4150 -http-address 0.0.0.0:4151 -max-msg-timeout 1h > nsq.log &

    正式使用 三部曲

    初始配置

    1. 标记config.toml编辑,配置数据库、web、nsq address改为0.0.0.0可以在外网使用 password同步密码,一定要和clinet配置文件的一样 postgres按照安装的信息填上就行

    连上数据库: psql -U postgres -h 127.0.0.1 -W sql里没有添加数据,这个是为了添加账号 依次执行以下命令 \c goscan INSERT INTO users(id, username, password, nick_name) values(1, 'root', '$2a$04$4AA4bbrAQfFgjBC31D889.WdfIYkdIC6nRa6UewENsoS.adMv6rr2', 'root'); 执行完毕后你将拥有一个账户, 账号 root 密码Admin@&%F^111 这个密码完全是为了符合后台验证 更新密码: UPDATE users SET password='$2a$04$4AA4bbrAQfFgjBC31D889.WdfIYkdIC6nRa6UewENsoS.adMv6rr2';

    开启web

    ./Web > web.log & 登陆后,在扫描引擎处配置消息队列, tcp 地址为: 0.0.0.0:4150 http地址为:0.0.0.0:4151

    开启扫描agent

    配置client下的config.toml 密码一定要和server的一致 然后运行就好了 ./client 或者使用docker编译成images,启动多个实例(Client、config.toml、Dockerfile三个文件单独放一个目录进行编译) $ docker build -t goscan:v1 . $ docker run -itd --name scan1 goscan:v1 $ docker run -itd --name scan2 goscan:v1 $ docker run -itd --name scan3 goscan:v1

    一点小坑 踩完了 采集速度还可, 再体验体验

    密码也可以自己build 附送代码:

    
    package main
    
    import (
        "fmt"
    	"golang.org/x/crypto/bcrypt"
    )
    
    func HashAndSalt(pwd []byte) string {
    	hash, err := bcrypt.GenerateFromPassword(pwd, bcrypt.MinCost)
    	if err != nil {
    
    	}
    	return string(hash)
    }
    func main(){
        password := "Admin@&%F^111"
        fmt.Print(HashAndSalt([]byte(password)))
    }
    
  • 嗨, 正则匹配无法完全使用

    嗨, 正则匹配无法完全使用

    https://github.com/CTF-MissFeng/GoScan/blob/96b40f47ed42a9b8b25660e3771bfbaaf34d1fb5/GoScan/Client/plug/portscan/probe/nmap.go#L201 使用regexp 这个库,无法完全使用 nmap-service-probes指纹库里的正则. 建议使用go-pcre, 但是此库只支持 linux 和 mac. 未针对 windows 做适配. https://github.com/geeksmy/go-pcre.git 这个对windows, linux, mac 做了兼容.

  • 服务端空指针错误

    服务端空指针错误

    服务端时不时报错,然后停止运行,是不是网络不稳定的问题?

    panic: runtime error: invalid memory address or nil pointer dereference
    [signal SIGSEGV: segmentation violation code=0x1 addr=0x28 pc=0xb1b47f]
    
    goroutine 24 [running]:
    github.com/CTF-MissFeng/GoScan/Web/library/nsq/suddomain.subDomainPush(0xc000032380, 0x2, 0x4, 0x5, 0xffffffffffffffff)
            /Users/miss/data/Project/go/github.com/CTF-MissFeng/GoScan/Web/library/nsq/suddomain/subdomain.go:77 +0x1bf
    github.com/CTF-MissFeng/GoScan/Web/library/nsq/suddomain.(*Handler).HandleMessage(0xc0002d2780, 0xc0005821e0, 0xd821c0, 0xc0002d2780)
            /Users/miss/data/Project/go/github.com/CTF-MissFeng/GoScan/Web/library/nsq/suddomain/subdomain.go:66 +0x17f
    github.com/nsqio/go-nsq.(*Consumer).handlerLoop(0xc00020c580, 0xfce820, 0xc0002d2780)
            /Users/miss/go/pkg/mod/github.com/nsqio/[email protected]/consumer.go:1113 +0x13f
    created by github.com/nsqio/go-nsq.(*Consumer).AddConcurrentHandlers
            /Users/miss/go/pkg/mod/github.com/nsqio/[email protected]/consumer.go:1095 +0x7b