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