mirror of
https://github.com/shadow1ng/fscan.git
synced 2025-09-14 14:06:44 +08:00

- 将Config相关文件重构为独立的config模块 - 创建config/Types.go定义核心配置数据结构 - 新增config/ServiceDict.go管理服务认证字典(线程安全) - 新增config/PortMapping.go管理端口探测器映射(线程安全) - 新增config/ScanOptions.go提供扫描选项管理(线程安全) - 新增config/Manager.go统一配置管理器 - 新增Variables.go作为向后兼容桥接层 - 重构Config.go为兼容入口点,委托给新模块 - 删除原有的单体配置文件 - 修复用户字典和密码字典初始化问题 - 保持完全向后兼容性,现有API无需修改 - 提升代码组织性和可维护性
399 lines
13 KiB
Go
399 lines
13 KiB
Go
package Common
|
||
|
||
/*
|
||
Variables.go - 全局变量定义和config模块桥接
|
||
|
||
为了保持向后兼容性,定义Flag.go和其他文件需要的全局变量,
|
||
并将它们与新的config模块进行桥接同步。
|
||
|
||
这个文件作为过渡期间的兼容层,确保现有代码正常工作。
|
||
*/
|
||
|
||
import (
|
||
"github.com/shadow1ng/fscan/Common/config"
|
||
)
|
||
|
||
// =========================================================
|
||
// 目标配置变量
|
||
// =========================================================
|
||
var (
|
||
ExcludeHosts string // 要排除的主机列表
|
||
Ports string // 要扫描的端口列表
|
||
ExcludePorts string // 要排除的端口列表
|
||
AddPorts string // 额外添加的端口列表
|
||
HostsFile string // 包含目标主机的文件路径
|
||
PortsFile string // 包含端口列表的文件路径
|
||
HostPort []string // 主机:端口格式的目标列表
|
||
)
|
||
|
||
// =========================================================
|
||
// 扫描控制变量
|
||
// =========================================================
|
||
var (
|
||
ScanMode string // 扫描模式或指定的插件列表
|
||
ThreadNum int // 并发扫描线程数
|
||
ModuleThreadNum int // 模块内部线程数
|
||
Timeout int64 // 单个扫描操作超时时间(秒)
|
||
GlobalTimeout int64 // 整体扫描超时时间(秒)
|
||
LiveTop int // 显示的存活主机排名数量
|
||
DisablePing bool // 是否禁用主机存活性检测
|
||
UsePing bool // 是否使用ICMP Ping检测主机存活
|
||
EnableFingerprint bool // 是否启用服务指纹识别
|
||
LocalMode bool // 是否启用本地信息收集模式
|
||
)
|
||
|
||
// =========================================================
|
||
// 认证与凭据变量
|
||
// =========================================================
|
||
var (
|
||
Username string // 用于认证的用户名
|
||
Password string // 用于认证的密码
|
||
AddUsers string // 额外添加的用户名列表
|
||
AddPasswords string // 额外添加的密码列表
|
||
UsersFile string // 包含用户名列表的文件路径
|
||
PasswordsFile string // 包含密码列表的文件路径
|
||
HashFile string // 包含哈希值的文件路径
|
||
HashValue string // 用于哈希认证的单个哈希值
|
||
HashValues []string // 哈希值列表
|
||
HashBytes [][]byte // 二进制格式的哈希值列表
|
||
Domain string // Active Directory/SMB域名
|
||
SshKeyPath string // SSH私钥文件路径
|
||
Userdict map[string][]string // 用户字典
|
||
Passwords []string // 密码列表
|
||
)
|
||
|
||
// =========================================================
|
||
// Web扫描变量
|
||
// =========================================================
|
||
var (
|
||
TargetURL string // 单个目标URL
|
||
URLsFile string // 包含URL列表的文件路径
|
||
URLs []string // 解析后的URL目标列表
|
||
Cookie string // Cookie字符串
|
||
WebTimeout int64 // Web请求超时时间(秒)
|
||
HttpProxy string // HTTP代理地址
|
||
Socks5Proxy string // SOCKS5代理地址
|
||
UserAgent string // 用户代理字符串
|
||
Accept string // Accept头部
|
||
)
|
||
|
||
// =========================================================
|
||
// POC测试变量
|
||
// =========================================================
|
||
var (
|
||
PocPath string // POC脚本路径
|
||
Pocinfo config.PocInfo // POC详细信息结构
|
||
PocFull bool // 是否启用完整POC扫描
|
||
DnsLog bool // 是否启用DNS日志
|
||
PocNum int // POC并发数
|
||
DisablePocScan bool // 是否禁用POC扫描
|
||
)
|
||
|
||
// =========================================================
|
||
// Redis利用变量
|
||
// =========================================================
|
||
var (
|
||
RedisFile string // Redis利用目标文件
|
||
RedisShell string // Redis反弹Shell命令
|
||
DisableRedis bool // 是否禁用Redis利用测试
|
||
RedisWritePath string // Redis文件写入路径
|
||
RedisWriteContent string // Redis文件写入内容
|
||
RedisWriteFile string // Redis写入的源文件
|
||
)
|
||
|
||
// =========================================================
|
||
// 暴力破解控制变量
|
||
// =========================================================
|
||
var (
|
||
DisableBrute bool // 是否禁用暴力破解模块
|
||
MaxRetries int // 连接失败最大重试次数
|
||
)
|
||
|
||
// =========================================================
|
||
// 输出与显示控制变量
|
||
// =========================================================
|
||
var (
|
||
DisableSave bool // 是否禁止保存扫描结果
|
||
Silent bool // 是否启用静默模式
|
||
NoColor bool // 是否禁用彩色输出
|
||
LogLevel string // 日志输出级别
|
||
ShowProgress bool // 是否显示进度条
|
||
ShowScanPlan bool // 是否显示扫描计划详情
|
||
SlowLogOutput bool // 是否启用慢速日志输出
|
||
Language string // 界面语言设置
|
||
)
|
||
|
||
// =========================================================
|
||
// 其他变量
|
||
// =========================================================
|
||
var (
|
||
Shellcode string // 用于MS17010等漏洞利用的Shellcode
|
||
PortMap map[int][]string // 端口到探测器的映射
|
||
DefaultMap []string // 默认探测器列表
|
||
)
|
||
|
||
// =========================================================
|
||
// 向config模块同步变量的函数
|
||
// =========================================================
|
||
|
||
// SyncToConfig 将当前变量值同步到config模块
|
||
func SyncToConfig() {
|
||
cfg := config.GetGlobalConfig()
|
||
if cfg == nil {
|
||
return
|
||
}
|
||
|
||
// 同步扫描目标配置
|
||
if cfg.ScanTarget != nil {
|
||
cfg.ScanTarget.Ports = Ports
|
||
cfg.ScanTarget.ExcludePorts = ExcludePorts
|
||
cfg.ScanTarget.ExcludeHosts = ExcludeHosts
|
||
cfg.ScanTarget.AddPorts = AddPorts
|
||
cfg.ScanTarget.HostPort = HostPort
|
||
}
|
||
|
||
// 同步认证凭据配置
|
||
if cfg.Credential != nil {
|
||
cfg.Credential.Username = Username
|
||
cfg.Credential.Password = Password
|
||
cfg.Credential.AddUsers = AddUsers
|
||
cfg.Credential.AddPasswords = AddPasswords
|
||
cfg.Credential.Domain = Domain
|
||
cfg.Credential.HashValue = HashValue
|
||
cfg.Credential.HashValues = HashValues
|
||
cfg.Credential.HashBytes = HashBytes
|
||
cfg.Credential.HashFile = HashFile
|
||
cfg.Credential.SshKeyPath = SshKeyPath
|
||
}
|
||
|
||
// 同步扫描控制配置
|
||
if cfg.ScanControl != nil {
|
||
cfg.ScanControl.ScanMode = ScanMode
|
||
cfg.ScanControl.ThreadNum = ThreadNum
|
||
cfg.ScanControl.ModuleThreadNum = ModuleThreadNum
|
||
cfg.ScanControl.Timeout = Timeout
|
||
cfg.ScanControl.GlobalTimeout = GlobalTimeout
|
||
cfg.ScanControl.LiveTop = LiveTop
|
||
cfg.ScanControl.DisablePing = DisablePing
|
||
cfg.ScanControl.UsePing = UsePing
|
||
cfg.ScanControl.EnableFingerprint = EnableFingerprint
|
||
cfg.ScanControl.LocalMode = LocalMode
|
||
}
|
||
|
||
// 同步输入文件配置
|
||
if cfg.InputFile != nil {
|
||
cfg.InputFile.HostsFile = HostsFile
|
||
cfg.InputFile.UsersFile = UsersFile
|
||
cfg.InputFile.PasswordsFile = PasswordsFile
|
||
cfg.InputFile.PortsFile = PortsFile
|
||
}
|
||
|
||
// 同步Web扫描配置
|
||
if cfg.WebScan != nil {
|
||
cfg.WebScan.TargetURL = TargetURL
|
||
cfg.WebScan.URLsFile = URLsFile
|
||
cfg.WebScan.URLs = URLs
|
||
cfg.WebScan.WebTimeout = WebTimeout
|
||
cfg.WebScan.HttpProxy = HttpProxy
|
||
cfg.WebScan.Socks5Proxy = Socks5Proxy
|
||
}
|
||
|
||
// 同步漏洞利用配置
|
||
if cfg.VulnExploit != nil {
|
||
cfg.VulnExploit.PocPath = PocPath
|
||
cfg.VulnExploit.PocInfo = Pocinfo
|
||
cfg.VulnExploit.DisablePocScan = DisablePocScan
|
||
cfg.VulnExploit.RedisFile = RedisFile
|
||
cfg.VulnExploit.RedisShell = RedisShell
|
||
cfg.VulnExploit.DisableRedis = DisableRedis
|
||
cfg.VulnExploit.RedisWritePath = RedisWritePath
|
||
cfg.VulnExploit.RedisWriteContent = RedisWriteContent
|
||
cfg.VulnExploit.RedisWriteFile = RedisWriteFile
|
||
cfg.VulnExploit.Shellcode = Shellcode
|
||
}
|
||
|
||
// 同步暴力破解配置
|
||
if cfg.BruteForce != nil {
|
||
cfg.BruteForce.DisableBrute = DisableBrute
|
||
cfg.BruteForce.MaxRetries = MaxRetries
|
||
}
|
||
|
||
// 同步显示配置
|
||
if cfg.Display != nil {
|
||
cfg.Display.DisableSave = DisableSave
|
||
cfg.Display.Silent = Silent
|
||
cfg.Display.NoColor = NoColor
|
||
cfg.Display.LogLevel = LogLevel
|
||
cfg.Display.ShowProgress = ShowProgress
|
||
cfg.Display.ShowScanPlan = ShowScanPlan
|
||
cfg.Display.SlowLogOutput = SlowLogOutput
|
||
cfg.Display.Language = Language
|
||
}
|
||
|
||
// 同步输出配置(这些已经在Config.go中处理)
|
||
// Outputfile 和 OutputFormat 在Config.go中直接同步
|
||
|
||
// 同步网络配置
|
||
if cfg.Network != nil {
|
||
cfg.Network.UserAgent = UserAgent
|
||
cfg.Network.Accept = Accept
|
||
cfg.Network.Cookie = Cookie
|
||
cfg.Network.DnsLog = DnsLog
|
||
cfg.Network.PocNum = PocNum
|
||
cfg.Network.PocFull = PocFull
|
||
}
|
||
|
||
// 保存配置
|
||
config.SetGlobalManagerConfig(cfg)
|
||
}
|
||
|
||
// SyncFromConfig 从config模块同步变量值
|
||
func SyncFromConfig() {
|
||
cfg := config.GetGlobalConfig()
|
||
if cfg == nil {
|
||
return
|
||
}
|
||
|
||
// 从扫描目标配置同步
|
||
if cfg.ScanTarget != nil {
|
||
Ports = cfg.ScanTarget.Ports
|
||
ExcludePorts = cfg.ScanTarget.ExcludePorts
|
||
ExcludeHosts = cfg.ScanTarget.ExcludeHosts
|
||
AddPorts = cfg.ScanTarget.AddPorts
|
||
HostPort = cfg.ScanTarget.HostPort
|
||
}
|
||
|
||
// 从认证凭据配置同步
|
||
if cfg.Credential != nil {
|
||
Username = cfg.Credential.Username
|
||
Password = cfg.Credential.Password
|
||
AddUsers = cfg.Credential.AddUsers
|
||
AddPasswords = cfg.Credential.AddPasswords
|
||
Domain = cfg.Credential.Domain
|
||
HashValue = cfg.Credential.HashValue
|
||
HashValues = cfg.Credential.HashValues
|
||
HashBytes = cfg.Credential.HashBytes
|
||
HashFile = cfg.Credential.HashFile
|
||
SshKeyPath = cfg.Credential.SshKeyPath
|
||
}
|
||
|
||
// 从扫描控制配置同步
|
||
if cfg.ScanControl != nil {
|
||
ScanMode = cfg.ScanControl.ScanMode
|
||
ThreadNum = cfg.ScanControl.ThreadNum
|
||
ModuleThreadNum = cfg.ScanControl.ModuleThreadNum
|
||
Timeout = cfg.ScanControl.Timeout
|
||
GlobalTimeout = cfg.ScanControl.GlobalTimeout
|
||
LiveTop = cfg.ScanControl.LiveTop
|
||
DisablePing = cfg.ScanControl.DisablePing
|
||
UsePing = cfg.ScanControl.UsePing
|
||
EnableFingerprint = cfg.ScanControl.EnableFingerprint
|
||
LocalMode = cfg.ScanControl.LocalMode
|
||
}
|
||
|
||
// 从输入文件配置同步
|
||
if cfg.InputFile != nil {
|
||
HostsFile = cfg.InputFile.HostsFile
|
||
UsersFile = cfg.InputFile.UsersFile
|
||
PasswordsFile = cfg.InputFile.PasswordsFile
|
||
PortsFile = cfg.InputFile.PortsFile
|
||
}
|
||
|
||
// 从Web扫描配置同步
|
||
if cfg.WebScan != nil {
|
||
TargetURL = cfg.WebScan.TargetURL
|
||
URLsFile = cfg.WebScan.URLsFile
|
||
URLs = cfg.WebScan.URLs
|
||
WebTimeout = cfg.WebScan.WebTimeout
|
||
HttpProxy = cfg.WebScan.HttpProxy
|
||
Socks5Proxy = cfg.WebScan.Socks5Proxy
|
||
}
|
||
|
||
// 从漏洞利用配置同步
|
||
if cfg.VulnExploit != nil {
|
||
PocPath = cfg.VulnExploit.PocPath
|
||
Pocinfo = cfg.VulnExploit.PocInfo
|
||
DisablePocScan = cfg.VulnExploit.DisablePocScan
|
||
RedisFile = cfg.VulnExploit.RedisFile
|
||
RedisShell = cfg.VulnExploit.RedisShell
|
||
DisableRedis = cfg.VulnExploit.DisableRedis
|
||
RedisWritePath = cfg.VulnExploit.RedisWritePath
|
||
RedisWriteContent = cfg.VulnExploit.RedisWriteContent
|
||
RedisWriteFile = cfg.VulnExploit.RedisWriteFile
|
||
Shellcode = cfg.VulnExploit.Shellcode
|
||
}
|
||
|
||
// 从暴力破解配置同步
|
||
if cfg.BruteForce != nil {
|
||
DisableBrute = cfg.BruteForce.DisableBrute
|
||
MaxRetries = cfg.BruteForce.MaxRetries
|
||
}
|
||
|
||
// 从显示配置同步
|
||
if cfg.Display != nil {
|
||
DisableSave = cfg.Display.DisableSave
|
||
Silent = cfg.Display.Silent
|
||
NoColor = cfg.Display.NoColor
|
||
LogLevel = cfg.Display.LogLevel
|
||
ShowProgress = cfg.Display.ShowProgress
|
||
ShowScanPlan = cfg.Display.ShowScanPlan
|
||
SlowLogOutput = cfg.Display.SlowLogOutput
|
||
Language = cfg.Display.Language
|
||
}
|
||
|
||
// 从网络配置同步
|
||
if cfg.Network != nil {
|
||
UserAgent = cfg.Network.UserAgent
|
||
Accept = cfg.Network.Accept
|
||
Cookie = cfg.Network.Cookie
|
||
DnsLog = cfg.Network.DnsLog
|
||
PocNum = cfg.Network.PocNum
|
||
PocFull = cfg.Network.PocFull
|
||
}
|
||
}
|
||
|
||
// init 初始化函数,设置默认值并同步
|
||
func init() {
|
||
// 设置默认值
|
||
ScanMode = "all"
|
||
ThreadNum = 600
|
||
Timeout = 3
|
||
ModuleThreadNum = 10
|
||
GlobalTimeout = 180
|
||
LiveTop = 10
|
||
WebTimeout = 5
|
||
PocNum = 20
|
||
MaxRetries = 3
|
||
LogLevel = LogLevelBaseInfoSuccess
|
||
Language = "zh"
|
||
|
||
// 初始化用户字典
|
||
Userdict = make(map[string][]string)
|
||
|
||
// 从config模块初始化用户字典和密码字典
|
||
serviceDict := config.GetGlobalServiceDict()
|
||
if serviceDict != nil {
|
||
Userdict = serviceDict.GetAllUserDicts()
|
||
Passwords = serviceDict.GetPasswords()
|
||
}
|
||
|
||
// 初始化端口映射
|
||
PortMap = make(map[int][]string)
|
||
DefaultMap = make([]string, 0)
|
||
|
||
// 从config模块初始化端口映射
|
||
probeMapping := config.GetGlobalProbeMapping()
|
||
if probeMapping != nil {
|
||
PortMap = probeMapping.GetAllPortMappings()
|
||
DefaultMap = probeMapping.GetDefaultProbes()
|
||
}
|
||
|
||
// 初始化其他切片
|
||
HostPort = make([]string, 0)
|
||
URLs = make([]string, 0)
|
||
HashValues = make([]string, 0)
|
||
HashBytes = make([][]byte, 0)
|
||
|
||
// 从config模块同步初始值
|
||
SyncFromConfig()
|
||
} |