Giter Site home page Giter Site logo

ctf-missfeng / goscan Goto Github PK

View Code? Open in Web Editor NEW
705.0 24.0 158.0 11.39 MB

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

Dockerfile 0.05% Go 45.18% CSS 2.77% HTML 15.61% JavaScript 26.70% Less 4.82% SCSS 4.88%

goscan's Introduction

GoScan

GoScan是采用Golang语言编写的一款分布式综合资产管理系统,Web端负责展示数据和接受输入,Client端负责任务运行。

下载地址:https://github.com/CTF-MissFeng/GoScan/releases

一、项目特点

往往在开发此类工具时,需要调用各种不同的三方工具(python、java、go)等语言编写好的资产搜集工具,调用时通过fork进程启动资产搜集工具,对于执行效率、部署都不太友好。

本项目所有模块均为Go开发:(子域名探测、端口扫描及指纹识别、web爬虫、web指纹识别、web漏洞扫描、服务漏洞破解等等),只需要执行Client即可,不需要其他依赖环境,分布式docker部署方便。

分布式简单:通过golang语言编写的nsq消息队列进行分布式调度,排除了如redis、其它大型的MQ环境(本项目只有三个可执行文件:web、nsq、client)

二、模块介绍

  • 子域名探测:使用rapid7源和被动搜索(30余个接口)、web主动爬虫寻找子域名、多个dns源探测、识别CDN等

  • 端口扫描:自写的端口扫描及指纹识别,速度比nmap+masscan块,加上waf识别及空间探测结果

  • web探测:主动爬虫搜集js、url、子域名、敏感信息等

  • web指纹:提供web页面自编写web指纹

  • web漏洞扫描等等模块:待开发中

三、部署教程

以ubuntu系统为例

1、Web端

# 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文件

# 3、Nsq消息队列运行,防火墙开放以下端口
$ nohub ./nsqd -tcp-address 本机IP:4150 -http-address 本机IP:4151 -max-msg-timeout 1h > nsq.log &

# 4、config.toml编辑,配置数据库、web、nsq

# 5、运行web
$ nohub ./Web > web.log &

# 6、浏览器打开web,进入到扫描引擎中进行配置

2、Client端

# 1、配置config.toml

# 2、运行Client或使用docker编译运行多个Client

$ nohub ./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

四、项目截图

index

index

index

index

index

五、开发进度

2021.02.09

1、修复分布式任务执行超时问题

2、分布式结果反馈使用http提交

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探测+精简服务指纹库)

goscan's People

Contributors

ctf-missfeng avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

goscan's Issues

前端代码的bug?烦请确认

作者您好,感谢提供了这个开源工具,最近在改造过程中发现前端代码webinfo.html中没有正确将后台返回的指纹信息解析显示到前端:
image
但好像现在在多指纹识别后,数据库里的指纹字段没有排版,且返回到前端的只会有第一个指纹。

域名泛解析的问题

简单试用了一下,发现泛解析的问题比较严重,可否考虑后续添加泛解析过滤呢?

安装相关问题

环境安装

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)))
}

static.go源文件

作者您好: 我对您在代码中写的static.go中data比较感兴趣, 不知道您可以提供下data数据吗?

关于动态加载插件

请问师傅是否有考虑过动态加载插件,比如动态加载一个poc直接的思路?我目前是一直卡在这里,想跟师傅交流一下,不知道师傅有没有好的思路

服务端空指针错误

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

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

升级问题

V0.01版本如何升级到0.2,或0.2是否有部署文档。

关于端口扫描实现方式

通过readme看到端口扫描用的是nmap的指纹,请问是调用nmap的二进制文件还是,使用golang解析nmap的指纹库呢?这部分代码能否开源呢?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.