一个基于 Golang 开发的 Web 批量连接测试工具,专为红队攻防演练和安全测试设计,支持批量测试多种服务的连接状态和未授权访问检测。
下载:
https://pan.quark.cn/s/e375e4fc07f5
公众号:知攻善防实验室
开发者:ChinaRan404
http://localhost:18921# 克隆项目
git clone https://github.com/ChinaRan0/Attack_login.git
cd attack_login
# 安装依赖
go mod download
# 运行
go run main.go
服务器将在 http://localhost:18921 启动。
http://localhost:18921config.json 文件中配置(默认:admin123)访问系统后,输入配置文件中设置的密码即可登录。登录状态会保存在 Cookie 中,7 天内有效。
CSV 文件必须包含以下列(表头必须存在):
| 列名 | 说明 | 必填 | 示例 |
|---|---|---|---|
| Type | 服务类型 | ✅ | Redis, MySQL, SSH |
| IP | IP 地址 | ✅ | 192.168.1.100 |
| Port | 端口号 | ✅ | 3306 |
| User | 用户名 | ❌ | root |
| Pass | 密码 | ❌ | password123 |
Type,IP,Port,User,Pass
Redis,192.168.1.100,6379,,
MySQL,192.168.1.101,3306,root,password123
SSH,192.168.1.102,22,admin,admin123
PostgreSQL,192.168.1.103,5432,postgres,
MongoDB,192.168.1.104,27017,,
SQLServer,192.168.1.107,1433,sa,Password123!
RabbitMQ,192.168.1.105,5672,guest,guest
SMB,192.168.1.106,445,administrator,P@ssw0rd!
WMI,192.168.1.120,,administrator,P@ssw0rd!
MQTT,192.168.1.108,1883,admin,admin123
Oracle,192.168.1.109,1521,scott,tiger
Elasticsearch,192.168.1.150,9200,,
Zookeeper,192.168.1.151,2181,admin,secret
https://host:9200/_cat/indices?pretty;Zookeeper 可填写多个节点 10.0.0.1,10.0.0.2 并自动补全端口)┌─────────────────────────────────────────────────────────┐
│ Web 前端层 │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ HTML模板 │ │ CSS样式 │ │ JavaScript│ │
│ └──────────┘ └──────────┘ └──────────┘ │
└──────────────────────┬──────────────────────────────────┘
│ HTTP/HTTPS
│ RESTful API
┌──────────────────────▼──────────────────────────────────┐
│ HTTP 服务层 │
│ ┌──────────────────────────────────────────┐ │
│ │ Gin Web Framework │ │
│ │ - 路由管理 │ │
│ │ - 中间件(认证、CORS等) │ │
│ │ - 请求处理 │ │
│ └──────────────────────────────────────────┘ │
└──────────────────────┬──────────────────────────────────┘
│
┌──────────────────────▼──────────────────────────────────┐
│ 业务逻辑层 │
│ ┌──────────────────────────────────────────┐ │
│ │ Handlers (HTTP 处理器) │ │
│ │ - 请求解析和验证 │ │
│ │ - 调用 Service 层 │ │
│ │ - 响应格式化 │ │
│ └──────────────────────────────────────────┘ │
│ ┌──────────────────────────────────────────┐ │
│ │ Services (业务服务) │ │
│ │ - ConnectorService: 连接管理 │ │
│ │ - 连接测试逻辑 │ │
│ │ - 异步任务调度 │ │
│ └──────────────────────────────────────────┘ │
└──────────────────────┬──────────────────────────────────┘
│
┌──────────────────────▼──────────────────────────────────┐
│ 数据持久层 │
│ ┌──────────────────────────────────────────┐ │
│ │ SQLite 数据库 │ │
│ │ - 连接信息存储 │ │
│ │ - 状态和日志记录 │ │
│ │ - WAL 模式(写前日志) │ │
│ └──────────────────────────────────────────┘ │
└──────────────────────┬──────────────────────────────────┘
│
┌──────────────────────▼──────────────────────────────────┐
│ 协议连接层 │
│ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ │
│ │Redis │ │MySQL │ │PostgreSQL│SSH │ │MongoDB│ │
│ └──────┘ └──────┘ └──────┘ └──────┘ └──────┘ │
│ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ │
│ │ FTP │ │SMB │ │WMI │ │MQTT │ │Oracle│ │
│ └──────┘ └──────┘ └──────┘ └──────┘ └──────┘ │
└─────────────────────────────────────────────────────────┘
// 需要认证的路由组 authorized := r.Group("/") authorized.Use(authMiddleware()) ```
config.json)ConnectorService 核心功能:
type ConnectorService struct {
db *sql.DB // SQLite 数据库连接
}
AddConnection(): 添加连接记录GetConnection(): 获取单个连接GetAllConnections(): 获取所有连接UpdateConnection(): 更新连接状态
连接测试:
Connect(): 执行连接测试(异步)数据库设计:
sql
CREATE TABLE connections (
id TEXT PRIMARY KEY, -- UUID
type TEXT NOT NULL, -- 服务类型
ip TEXT NOT NULL, -- IP 地址
port TEXT NOT NULL, -- 端口
user TEXT, -- 用户名
pass TEXT, -- 密码
status TEXT NOT NULL, -- 状态:pending/success/failed
message TEXT, -- 连接结果消息
result TEXT, -- 详细信息(SSH命令结果等)
logs TEXT, -- JSON 格式的日志数组
created_at TEXT NOT NULL, -- 创建时间
connected_at TEXT -- 连接成功时间
);
特性:
每种服务类型都有独立的连接函数:
github.com/go-redis/redis/v8github.com/go-sql-driver/mysqlgithub.com/lib/pqgolang.org/x/crypto/sshgo.mongodb.org/mongo-drivergithub.com/sijms/go-ora/v2(纯 Go 实现,无需 Instant Client)github.com/samuel/go-zookeeper/zk(支持多节点、digest 认证、SOCKS5 代理,默认执行 ls /)// 连接测试采用异步执行
go h.service.Connect(conn)
实时更新状态到数据库
状态流转:
pending → success/failed
每种服务都有特定的未授权检测策略:
配置文件:config.json
json
{
"password": "admin123",
"port": "18921",
"proxy": {
"enabled": false,
"type": "socks5",
"host": "127.0.0.1",
"port": "1080",
"user": "",
"pass": ""
}
}
配置加载:使用单例模式,首次加载后缓存
| 服务 | 默认端口 | 默认账户 | 未授权检测 |
|---|---|---|---|
| MySQL | 3306 | root | root 无密码 |
| PostgreSQL | 5432 | postgres | postgres 无密码 |
| SQL Server | 1433 | sa | sa 账户 |
| Oracle | 1521 | sys/system, scott/tiger | 自动尝试多个服务名 |
| MongoDB | 27017 | - | 无认证连接 |
| Redis | 6379 | - | 无密码连接 |
| 服务 | 默认端口 | 默认账户 | 未授权检测 |
|---|---|---|---|
| FTP | 21 | anonymous | anonymous/anonymous |
| SMB | 445 | administrator | administrator 账户 |
| SSH | 22 | root, admin | 密钥认证或无密码 |
| 服务 | 默认端口 | 默认账户 | 未授权检测 |
|---|---|---|---|
| RabbitMQ | 5672 | guest | guest/guest |
| MQTT | 1883 | admin | admin/admin 或无认证 |
| 服务 | 默认端口 | 默认路径 | 说明 |
|---|---|---|---|
| Elasticsearch | 9200 | /_cat/indices?pretty |
可自定义路径 & Basic Auth,HTTP(S)+SOCKS5 |
| 服务 | 默认端口 | 默认命令 | 说明 |
|---|---|---|---|
| Zookeeper | 2181 | ls / |
支持多节点输入、digest 认证、SOCKS5 代理 |
多节点支持:
- 在 IP 地址字段可以填写多个节点,使用逗号、分号或空格分隔
- 示例:10.0.0.1,10.0.0.2,10.0.0.3 或 10.0.0.1:2181;10.0.0.2:2181
- 如果只提供 IP 地址(不含端口),会自动使用默认端口 2181
- 如果节点已包含端口号,则使用指定的端口
认证方式: - 支持 digest 认证(用户名:密码格式) - 如果提供了用户名但未提供密码,会尝试无密码 digest 认证 - 留空用户名和密码表示尝试未授权访问(无 ACL)
连接特性:
- 自动建立 ZooKeeper 会话(会话超时 10 秒)
- 连接成功后自动执行 ls / 命令,列出根节点下的所有子节点
- 显示节点统计信息(czxid、mzxid、version、创建时间、修改时间)
- 支持 SOCKS5 代理连接
- 连接超时时间:15 秒
使用示例:
- 单节点:192.168.1.100 或 192.168.1.100:2181
- 多节点:192.168.1.100,192.168.1.101,192.168.1.102
- 带认证:用户名填写 admin,密码填写 secret
| 服务 | 默认端口 | 默认账户 | 说明 |
|---|---|---|---|
| WMI | 135 | administrator | 执行 wmic nic get 命令 |
Oracle 连接支持自动尝试多个常见服务名: - XE - ORCL - XEPDB1 - ORCLPDB - ORCLCDB - PDBORCL
编辑 config.json 文件:
{
"password": "your_new_password",
"port": "18921"
}
修改后重启服务生效。
编辑 config.json 文件中的 port 字段,然后重启服务。
connections.dbconnections.db 文件即可批量连接器/
├── main.go # 程序入口,路由配置
├── go.mod # Go 模块定义
├── go.sum # 依赖版本锁定
├── config.json # 配置文件(密码、端口)
├── connections.db # SQLite 数据库文件
├── build.sh # Linux/macOS 编译脚本
├── build.bat # Windows 编译脚本
├── example.csv # CSV 导入示例文件
├── README.md # 项目文档
│
├── internal/ # 内部包
│ ├── config/ # 配置管理
│ │ └── config.go # 配置加载和读取
│ │
│ ├── handlers/ # HTTP 处理器
│ │ └── handler.go # API 路由处理函数
│ │
│ ├── models/ # 数据模型
│ │ └── connection.go # Connection 结构体定义
│ │
│ └── services/ # 业务逻辑层
│ ├── connector.go # 连接服务核心逻辑
│ ├── connectors.go # 各协议连接实现
│ └── database.go # 数据库操作
│
└── web/ # Web 前端资源
├── templates/ # HTML 模板
│ ├── index.html # 主页面
│ └── login.html # 登录页面
│
└── static/ # 静态资源
├── style.css # 样式文件
└── script.js # 前端逻辑
项目提供了交叉编译脚本,支持编译到多个平台和架构。
# 编译所有平台
./build.sh
# 编译指定平台
./build.sh -p linux/amd64
# 指定版本号
./build.sh -v 1.1.0
# 清理构建目录
./build.sh -c
# 查看帮助
./build.sh -h
# 编译所有平台
build.bat
# 指定版本号(需要先设置环境变量)
set VERSION=1.1.0
build.bat
编译后的文件会输出到 build/ 目录,包含:
- 可执行文件
- web 目录(前端资源)
- README.md
- example.csv
- 压缩包(.tar.gz 或 .zip)
SSH 连接成功后,工具会自动执行以下命令并显示结果:
whoami: 显示当前登录用户ip addr: 显示网络接口信息执行结果会保存在连接的 result 字段中,可通过"详情"按钮查看。
Q: 为什么 Oracle 连接失败?
A: Oracle 连接会自动尝试多个常见服务名,如果都失败,请检查服务名是否正确。
Q: 如何清除使用须知弹窗?
A: 在浏览器控制台执行:localStorage.removeItem('notice_read')
Q: 如何重置登录密码?
A: 编辑 config.json 文件,修改 password 字段后重启服务。
Q: 数据库文件在哪里?
A: 在程序运行目录下的 connections.db 文件。
/_cat/indices?prettyls / 并支持 digest 认证/多节点MIT License
$ claude mcp add Attack_login \
-- python -m otcore.mcp_server <graph>