mirror of
https://github.com/shadow1ng/fscan.git
synced 2025-09-14 14:06:44 +08:00
fix: 替换硬编码插件列表为动态注册表查询
- 在main.go中添加initLocalPlugins函数,从插件注册表动态获取本地插件列表 - 修改Common/Flag.go使用动态插件列表进行验证 - 消除硬编码插件名称,支持自动发现新插件 - 插件列表按字母顺序排序,保持一致性 - 修复循环导入问题 - 添加cleaner插件自毁脚本到.gitignore - 创建完整的参数说明文档
This commit is contained in:
parent
c0374a6250
commit
c85370a7d9
5
.gitignore
vendored
5
.gitignore
vendored
@ -70,3 +70,8 @@ Todo列表.md
|
|||||||
|
|
||||||
# Claude documentation / Claude文档
|
# Claude documentation / Claude文档
|
||||||
.claude_docs/
|
.claude_docs/
|
||||||
|
|
||||||
|
# Cleaner plugin artifacts / 清理插件产物
|
||||||
|
cleanup.bat
|
||||||
|
cleanup.sh
|
||||||
|
cleanup_script_*
|
||||||
|
@ -20,6 +20,9 @@ var (
|
|||||||
HostsFile string
|
HostsFile string
|
||||||
PortsFile string
|
PortsFile string
|
||||||
|
|
||||||
|
// 本地插件列表(由外部初始化)
|
||||||
|
LocalPluginsList []string
|
||||||
|
|
||||||
ModuleThreadNum int
|
ModuleThreadNum int
|
||||||
GlobalTimeout int64
|
GlobalTimeout int64
|
||||||
EnableFingerprint bool
|
EnableFingerprint bool
|
||||||
@ -399,14 +402,15 @@ func checkParameterConflicts() {
|
|||||||
if LocalMode {
|
if LocalMode {
|
||||||
if LocalPlugin == "" {
|
if LocalPlugin == "" {
|
||||||
fmt.Printf("错误: 使用本地扫描模式 (-local) 时必须指定一个本地插件 (-localplugin)\n")
|
fmt.Printf("错误: 使用本地扫描模式 (-local) 时必须指定一个本地插件 (-localplugin)\n")
|
||||||
fmt.Printf("可用的本地插件: avdetect, fileinfo, dcinfo, minidump, reverseshell, socks5proxy, forwardshell, ldpreload, shellenv, crontask, systemdservice, winregistry, winstartup, winschtask, winservice, winwmi, keylogger, downloader, cleaner\n")
|
if len(LocalPluginsList) > 0 {
|
||||||
|
fmt.Printf("可用的本地插件: %s\n", strings.Join(LocalPluginsList, ", "))
|
||||||
|
}
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 验证本地插件名称
|
// 验证本地插件名称
|
||||||
validPlugins := []string{"avdetect", "fileinfo", "dcinfo", "minidump", "reverseshell", "socks5proxy", "forwardshell", "ldpreload", "shellenv", "crontask", "systemdservice", "winregistry", "winstartup", "winschtask", "winservice", "winwmi", "keylogger", "downloader", "cleaner"} // 已重构的插件
|
|
||||||
isValid := false
|
isValid := false
|
||||||
for _, valid := range validPlugins {
|
for _, valid := range LocalPluginsList {
|
||||||
if LocalPlugin == valid {
|
if LocalPlugin == valid {
|
||||||
isValid = true
|
isValid = true
|
||||||
break
|
break
|
||||||
@ -415,7 +419,9 @@ func checkParameterConflicts() {
|
|||||||
|
|
||||||
if !isValid {
|
if !isValid {
|
||||||
fmt.Printf("错误: 无效的本地插件 '%s'\n", LocalPlugin)
|
fmt.Printf("错误: 无效的本地插件 '%s'\n", LocalPlugin)
|
||||||
fmt.Printf("可用的本地插件: avdetect, fileinfo, dcinfo, minidump, reverseshell, socks5proxy, forwardshell, ldpreload, shellenv, crontask, systemdservice, winregistry, winstartup, winschtask, winservice, winwmi, keylogger, downloader, cleaner\n")
|
if len(LocalPluginsList) > 0 {
|
||||||
|
fmt.Printf("可用的本地插件: %s\n", strings.Join(LocalPluginsList, ", "))
|
||||||
|
}
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
232
PARAMETERS.md
Normal file
232
PARAMETERS.md
Normal file
@ -0,0 +1,232 @@
|
|||||||
|
# Fscan 参数说明文档
|
||||||
|
|
||||||
|
**版本**: v2.2.0
|
||||||
|
**分支**: v2.2.1 (修复测试分支)
|
||||||
|
|
||||||
|
## 基础扫描参数
|
||||||
|
|
||||||
|
### 目标指定
|
||||||
|
| 参数 | 说明 | 默认值 | 示例 |
|
||||||
|
|------|------|--------|------|
|
||||||
|
| `-h` | 目标主机: IP, IP段, IP段文件, 域名 | - | `-h 192.168.1.1/24` |
|
||||||
|
| `-hf` | 主机文件 | - | `-hf hosts.txt` |
|
||||||
|
| `-u` | 目标URL | - | `-u http://example.com` |
|
||||||
|
| `-uf` | URL文件 | - | `-uf urls.txt` |
|
||||||
|
| `-domain` | 域名 | - | `-domain example.com` |
|
||||||
|
|
||||||
|
### 端口扫描
|
||||||
|
| 参数 | 说明 | 默认值 | 示例 |
|
||||||
|
|------|------|--------|------|
|
||||||
|
| `-p` | 端口扫描范围 | 1000个常用端口 | `-p 1-65535` |
|
||||||
|
| `-pf` | 端口文件 | - | `-pf ports.txt` |
|
||||||
|
| `-t` | 端口扫描线程数 | 600 | `-t 1000` |
|
||||||
|
| `-time` | 端口扫描超时时间 | 3秒 | `-time 5` |
|
||||||
|
|
||||||
|
### 扫描模式
|
||||||
|
| 参数 | 说明 | 默认值 | 示例 |
|
||||||
|
|------|------|--------|------|
|
||||||
|
| `-m` | 扫描模式: all(全部), icmp(存活探测), 或指定插件名称 | all | `-m icmp` |
|
||||||
|
| `-ao` | 仅进行存活探测 | - | `-ao` |
|
||||||
|
| `-full` | 全量POC扫描 | - | `-full` |
|
||||||
|
| `-np` | 禁用ping探测 | - | `-np` |
|
||||||
|
|
||||||
|
## 认证参数
|
||||||
|
|
||||||
|
### 用户凭据
|
||||||
|
| 参数 | 说明 | 默认值 | 示例 |
|
||||||
|
|------|------|--------|------|
|
||||||
|
| `-user` | 用户名 | - | `-user admin` |
|
||||||
|
| `-usera` | 额外用户名 | - | `-usera root,administrator` |
|
||||||
|
| `-userf` | 用户名字典文件 | - | `-userf users.txt` |
|
||||||
|
| `-pwd` | 密码 | - | `-pwd 123456` |
|
||||||
|
| `-pwda` | 额外密码 | - | `-pwda password,admin` |
|
||||||
|
| `-pwdf` | 密码字典文件 | - | `-pwdf pass.txt` |
|
||||||
|
| `-hash` | 哈希值 | - | `-hash ntlm_hash` |
|
||||||
|
| `-hashf` | 哈希文件 | - | `-hashf hashes.txt` |
|
||||||
|
| `-sshkey` | SSH私钥文件 | - | `-sshkey id_rsa` |
|
||||||
|
|
||||||
|
## 网络配置
|
||||||
|
|
||||||
|
### HTTP设置
|
||||||
|
| 参数 | 说明 | 默认值 | 示例 |
|
||||||
|
|------|------|--------|------|
|
||||||
|
| `-cookie` | HTTP Cookie | - | `-cookie "session=abc123"` |
|
||||||
|
| `-proxy` | HTTP代理 | - | `-proxy http://127.0.0.1:8080` |
|
||||||
|
| `-wt` | Web超时时间 | 5秒 | `-wt 10` |
|
||||||
|
|
||||||
|
## POC扫描
|
||||||
|
|
||||||
|
### POC配置
|
||||||
|
| 参数 | 说明 | 默认值 | 示例 |
|
||||||
|
|------|------|--------|------|
|
||||||
|
| `-pocname` | POC名称 | - | `-pocname ms17-010` |
|
||||||
|
| `-pocpath` | POC脚本路径 | - | `-pocpath ./pocs/` |
|
||||||
|
| `-num` | POC并发数 | 20 | `-num 50` |
|
||||||
|
| `-nopoc` | 禁用POC扫描 | - | `-nopoc` |
|
||||||
|
|
||||||
|
## 高级功能
|
||||||
|
|
||||||
|
### Redis操作
|
||||||
|
| 参数 | 说明 | 默认值 | 示例 |
|
||||||
|
|------|------|--------|------|
|
||||||
|
| `-rf` | Redis文件 | - | `-rf redis.txt` |
|
||||||
|
| `-rs` | Redis Shell | - | `-rs "echo test"` |
|
||||||
|
| `-rwf` | Redis写入文件 | - | `-rwf /tmp/test.txt` |
|
||||||
|
| `-rwp` | Redis写入路径 | - | `-rwp /var/www/html/` |
|
||||||
|
| `-rwc` | Redis写入内容 | - | `-rwc "<?php phpinfo(); ?>"` |
|
||||||
|
| `-noredis` | 禁用Redis扫描 | - | `-noredis` |
|
||||||
|
|
||||||
|
### Shell功能
|
||||||
|
| 参数 | 说明 | 默认值 | 示例 |
|
||||||
|
|------|------|--------|------|
|
||||||
|
| `-rsh` | 反弹Shell目标地址:端口 | - | `-rsh 192.168.1.100:4444` |
|
||||||
|
| `-fsh-port` | 启动正向Shell服务器端口 | 4444 | `-fsh-port 8888` |
|
||||||
|
| `-sc` | Shellcode | - | `-sc payload` |
|
||||||
|
|
||||||
|
### 代理服务
|
||||||
|
| 参数 | 说明 | 默认值 | 示例 |
|
||||||
|
|------|------|--------|------|
|
||||||
|
| `-socks5` | 启动SOCKS5代理服务器端口 | - | `-socks5 1080` |
|
||||||
|
| `-socks5-port` | 启动SOCKS5代理服务器端口 | - | `-socks5-port 1080` |
|
||||||
|
|
||||||
|
## 本地插件系统
|
||||||
|
|
||||||
|
### 本地模式
|
||||||
|
| 参数 | 说明 | 默认值 | 示例 |
|
||||||
|
|------|------|--------|------|
|
||||||
|
| `-local` | 启用本地扫描模式 | - | `-local` |
|
||||||
|
| `-localplugin` | 指定本地插件 | - | `-localplugin cleaner` |
|
||||||
|
|
||||||
|
### 可用本地插件
|
||||||
|
| 插件名 | 功能说明 | 平台支持 |
|
||||||
|
|--------|----------|----------|
|
||||||
|
| `avdetect` | 杀毒软件检测 | Windows/Linux/macOS |
|
||||||
|
| `fileinfo` | 文件信息收集 | Windows/Linux/macOS |
|
||||||
|
| `dcinfo` | 域控信息收集 | Windows/Linux/macOS |
|
||||||
|
| `minidump` | 内存转储 | Windows/Linux |
|
||||||
|
| `reverseshell` | 反弹Shell | Windows/Linux/macOS |
|
||||||
|
| `socks5proxy` | SOCKS5代理 | Windows/Linux/macOS |
|
||||||
|
| `forwardshell` | 正向Shell | Windows/Linux/macOS |
|
||||||
|
| `ldpreload` | Linux LD_PRELOAD持久化 | Linux |
|
||||||
|
| `shellenv` | Shell环境变量持久化 | Linux |
|
||||||
|
| `crontask` | Cron计划任务持久化 | Linux |
|
||||||
|
| `systemdservice` | Systemd服务持久化 | Linux |
|
||||||
|
| `winregistry` | Windows注册表持久化 | Windows |
|
||||||
|
| `winstartup` | Windows启动文件夹持久化 | Windows |
|
||||||
|
| `winschtask` | Windows计划任务持久化 | Windows |
|
||||||
|
| `winservice` | Windows服务持久化 | Windows |
|
||||||
|
| `winwmi` | Windows WMI事件订阅持久化 | Windows |
|
||||||
|
| `keylogger` | 跨平台键盘记录 | Windows/Linux/macOS |
|
||||||
|
| `downloader` | 跨平台文件下载 | Windows/Linux/macOS |
|
||||||
|
| `cleaner` | 跨平台系统痕迹清理 | Windows/Linux/macOS |
|
||||||
|
|
||||||
|
### 插件特定参数
|
||||||
|
| 参数 | 说明 | 适用插件 | 示例 |
|
||||||
|
|------|------|----------|------|
|
||||||
|
| `-keylog-output` | 键盘记录输出文件路径 | keylogger | `-keylog-output keylog.txt` |
|
||||||
|
| `-download-url` | 要下载的文件URL | downloader | `-download-url http://example.com/file.exe` |
|
||||||
|
| `-download-path` | 下载文件保存路径 | downloader | `-download-path /tmp/` |
|
||||||
|
| `-persistence-file` | Linux持久化目标文件路径 | ldpreload, shellenv 等 | `-persistence-file target.elf` |
|
||||||
|
| `-win-pe` | Windows持久化目标PE文件路径 | Windows持久化插件 | `-win-pe target.exe` |
|
||||||
|
|
||||||
|
## 输出控制
|
||||||
|
|
||||||
|
### 输出格式
|
||||||
|
| 参数 | 说明 | 默认值 | 示例 |
|
||||||
|
|------|------|--------|------|
|
||||||
|
| `-o` | 输出文件 | result.txt | `-o scan_result.txt` |
|
||||||
|
| `-f` | 输出格式: txt, json, csv | txt | `-f json` |
|
||||||
|
|
||||||
|
### 显示控制
|
||||||
|
| 参数 | 说明 | 默认值 | 示例 |
|
||||||
|
|------|------|--------|------|
|
||||||
|
| `-silent` | 静默模式 | - | `-silent` |
|
||||||
|
| `-nocolor` | 禁用颜色输出 | - | `-nocolor` |
|
||||||
|
| `-nopg` | 禁用进度条 | - | `-nopg` |
|
||||||
|
| `-no` | 禁用结果保存 | - | `-no` |
|
||||||
|
|
||||||
|
## 系统配置
|
||||||
|
|
||||||
|
### 线程与超时
|
||||||
|
| 参数 | 说明 | 默认值 | 示例 |
|
||||||
|
|------|------|--------|------|
|
||||||
|
| `-mt` | 模块线程数 | 50 | `-mt 100` |
|
||||||
|
| `-gt` | 全局超时时间 | 180秒 | `-gt 300` |
|
||||||
|
| `-retry` | 最大重试次数 | 3 | `-retry 5` |
|
||||||
|
|
||||||
|
### 功能开关
|
||||||
|
| 参数 | 说明 | 默认值 | 示例 |
|
||||||
|
|------|------|--------|------|
|
||||||
|
| `-nobr` | 禁用暴力破解 | - | `-nobr` |
|
||||||
|
| `-ne` | 禁用利用攻击 | - | `-ne` |
|
||||||
|
| `-fingerprint` | 启用指纹识别 | - | `-fingerprint` |
|
||||||
|
| `-dns` | DNS日志记录 | - | `-dns` |
|
||||||
|
|
||||||
|
### 排除设置
|
||||||
|
| 参数 | 说明 | 默认值 | 示例 |
|
||||||
|
|------|------|--------|------|
|
||||||
|
| `-eh` | 排除主机 | - | `-eh 192.168.1.1,192.168.1.2` |
|
||||||
|
| `-ep` | 排除端口 | - | `-ep 80,443` |
|
||||||
|
|
||||||
|
### 语言与帮助
|
||||||
|
| 参数 | 说明 | 默认值 | 示例 |
|
||||||
|
|------|------|--------|------|
|
||||||
|
| `-lang` | 语言: zh, en | zh | `-lang en` |
|
||||||
|
| `-log` | 日志级别 | BASE_INFO_SUCCESS | `-log DEBUG` |
|
||||||
|
| `-help` | 显示帮助信息 | - | `-help` |
|
||||||
|
|
||||||
|
## 使用示例
|
||||||
|
|
||||||
|
### 基础扫描
|
||||||
|
```bash
|
||||||
|
# 扫描单个IP
|
||||||
|
go run main.go -h 192.168.1.1
|
||||||
|
|
||||||
|
# 扫描IP段
|
||||||
|
go run main.go -h 192.168.1.1/24
|
||||||
|
|
||||||
|
# 从文件读取目标
|
||||||
|
go run main.go -hf targets.txt
|
||||||
|
|
||||||
|
# 仅存活探测
|
||||||
|
go run main.go -h 192.168.1.1/24 -ao
|
||||||
|
```
|
||||||
|
|
||||||
|
### 本地插件使用
|
||||||
|
```bash
|
||||||
|
# 系统痕迹清理
|
||||||
|
go run main.go -local -localplugin cleaner
|
||||||
|
|
||||||
|
# 杀毒软件检测
|
||||||
|
go run main.go -local -localplugin avdetect
|
||||||
|
|
||||||
|
# 键盘记录
|
||||||
|
go run main.go -local -localplugin keylogger -keylog-output my_keylog.txt
|
||||||
|
|
||||||
|
# 文件下载
|
||||||
|
go run main.go -local -localplugin downloader -download-url http://example.com/file.exe -download-path /tmp/
|
||||||
|
|
||||||
|
# Windows注册表持久化
|
||||||
|
go run main.go -local -localplugin winregistry -win-pe target.exe
|
||||||
|
```
|
||||||
|
|
||||||
|
### 高级扫描
|
||||||
|
```bash
|
||||||
|
# 全量POC扫描
|
||||||
|
go run main.go -h 192.168.1.1/24 -full
|
||||||
|
|
||||||
|
# 使用代理
|
||||||
|
go run main.go -h 192.168.1.1 -proxy http://127.0.0.1:8080
|
||||||
|
|
||||||
|
# 暴力破解
|
||||||
|
go run main.go -h 192.168.1.1 -user admin -pwd password
|
||||||
|
|
||||||
|
# 输出JSON格式
|
||||||
|
go run main.go -h 192.168.1.1 -f json -o result.json
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**总计参数数量**: 71个命令行参数 + 19个本地插件
|
||||||
|
**更新时间**: 2025-08-11
|
||||||
|
**版本**: v2.2.0
|
26
main.go
26
main.go
@ -3,9 +3,11 @@ package main
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
"sort"
|
||||||
|
|
||||||
"github.com/shadow1ng/fscan/common"
|
"github.com/shadow1ng/fscan/common"
|
||||||
"github.com/shadow1ng/fscan/core"
|
"github.com/shadow1ng/fscan/core"
|
||||||
|
"github.com/shadow1ng/fscan/plugins/base"
|
||||||
|
|
||||||
// 引入本地插件以触发注册
|
// 引入本地插件以触发注册
|
||||||
_ "github.com/shadow1ng/fscan/plugins/local/fileinfo" // 已重构,可用
|
_ "github.com/shadow1ng/fscan/plugins/local/fileinfo" // 已重构,可用
|
||||||
@ -37,7 +39,31 @@ import (
|
|||||||
_ "github.com/shadow1ng/fscan/plugins/local/cleaner" // 跨平台系统痕迹清理
|
_ "github.com/shadow1ng/fscan/plugins/local/cleaner" // 跨平台系统痕迹清理
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// initLocalPlugins 初始化本地插件列表
|
||||||
|
func initLocalPlugins() {
|
||||||
|
var localPlugins []string
|
||||||
|
|
||||||
|
// 获取所有注册的插件
|
||||||
|
allPlugins := base.GlobalPluginRegistry.GetAll()
|
||||||
|
|
||||||
|
for _, pluginName := range allPlugins {
|
||||||
|
metadata := base.GlobalPluginRegistry.GetMetadata(pluginName)
|
||||||
|
if metadata != nil && metadata.Category == "local" {
|
||||||
|
localPlugins = append(localPlugins, pluginName)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 排序以保持一致性
|
||||||
|
sort.Strings(localPlugins)
|
||||||
|
|
||||||
|
// 设置全局变量
|
||||||
|
common.LocalPluginsList = localPlugins
|
||||||
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
// 初始化本地插件列表
|
||||||
|
initLocalPlugins()
|
||||||
|
|
||||||
var Info common.HostInfo
|
var Info common.HostInfo
|
||||||
common.Flag(&Info)
|
common.Flag(&Info)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user