package core import ( "github.com/shadow1ng/fscan/common" "github.com/shadow1ng/fscan/common/parsers" "github.com/shadow1ng/fscan/plugins" "sort" ) // init 初始化并注册所有扫描插件 // 包括标准端口服务扫描、特殊扫描类型和本地信息收集等 func init() { // 1. 标准网络服务扫描插件 // 文件传输和远程访问服务 common.RegisterPlugin("ftp", common.ScanPlugin{ Name: "FTP", Ports: []int{21}, ScanFunc: Plugins.FtpScan, Types: []string{common.PluginTypeService}, }) common.RegisterPlugin("ssh", common.ScanPlugin{ Name: "SSH", Ports: []int{22, 2222}, ScanFunc: Plugins.SshScan, Types: []string{common.PluginTypeService}, }) common.RegisterPlugin("telnet", common.ScanPlugin{ Name: "Telnet", Ports: []int{23}, ScanFunc: Plugins.TelnetScan, Types: []string{common.PluginTypeService}, }) // Windows网络服务 common.RegisterPlugin("findnet", common.ScanPlugin{ Name: "FindNet", Ports: []int{135}, ScanFunc: Plugins.Findnet, Types: []string{common.PluginTypeService}, }) common.RegisterPlugin("netbios", common.ScanPlugin{ Name: "NetBIOS", Ports: []int{139}, ScanFunc: Plugins.NetBIOS, Types: []string{common.PluginTypeService}, }) common.RegisterPlugin("smb", common.ScanPlugin{ Name: "SMB", Ports: []int{445}, ScanFunc: Plugins.SmbScan, Types: []string{common.PluginTypeService}, }) // 数据库服务 common.RegisterPlugin("mssql", common.ScanPlugin{ Name: "MSSQL", Ports: []int{1433, 1434}, ScanFunc: Plugins.MssqlScan, Types: []string{common.PluginTypeService}, }) common.RegisterPlugin("oracle", common.ScanPlugin{ Name: "Oracle", Ports: []int{1521, 1522, 1526}, ScanFunc: Plugins.OracleScan, Types: []string{common.PluginTypeService}, }) common.RegisterPlugin("mysql", common.ScanPlugin{ Name: "MySQL", Ports: []int{3306, 3307, 13306, 33306}, ScanFunc: Plugins.MysqlScan, Types: []string{common.PluginTypeService}, }) // 中间件和消息队列服务 common.RegisterPlugin("elasticsearch", common.ScanPlugin{ Name: "Elasticsearch", Ports: []int{9200, 9300}, ScanFunc: Plugins.ElasticScan, Types: []string{common.PluginTypeService}, }) common.RegisterPlugin("rabbitmq", common.ScanPlugin{ Name: "RabbitMQ", Ports: []int{5672, 5671, 15672, 15671}, ScanFunc: Plugins.RabbitMQScan, Types: []string{common.PluginTypeService}, }) common.RegisterPlugin("kafka", common.ScanPlugin{ Name: "Kafka", Ports: []int{9092, 9093}, ScanFunc: Plugins.KafkaScan, Types: []string{common.PluginTypeService}, }) common.RegisterPlugin("activemq", common.ScanPlugin{ Name: "ActiveMQ", Ports: []int{61613}, ScanFunc: Plugins.ActiveMQScan, Types: []string{common.PluginTypeService}, }) // 目录和认证服务 common.RegisterPlugin("ldap", common.ScanPlugin{ Name: "LDAP", Ports: []int{389, 636}, ScanFunc: Plugins.LDAPScan, Types: []string{common.PluginTypeService}, }) // 邮件服务 common.RegisterPlugin("smtp", common.ScanPlugin{ Name: "SMTP", Ports: []int{25, 465, 587}, ScanFunc: Plugins.SmtpScan, Types: []string{common.PluginTypeService}, }) common.RegisterPlugin("imap", common.ScanPlugin{ Name: "IMAP", Ports: []int{143, 993}, ScanFunc: Plugins.IMAPScan, Types: []string{common.PluginTypeService}, }) common.RegisterPlugin("pop3", common.ScanPlugin{ Name: "POP3", Ports: []int{110, 995}, ScanFunc: Plugins.POP3Scan, Types: []string{common.PluginTypeService}, }) // 网络管理和监控服务 common.RegisterPlugin("snmp", common.ScanPlugin{ Name: "SNMP", Ports: []int{161, 162}, ScanFunc: Plugins.SNMPScan, Types: []string{common.PluginTypeService}, }) common.RegisterPlugin("modbus", common.ScanPlugin{ Name: "Modbus", Ports: []int{502, 5020}, ScanFunc: Plugins.ModbusScan, Types: []string{common.PluginTypeService}, }) // 数据同步和备份服务 common.RegisterPlugin("rsync", common.ScanPlugin{ Name: "Rsync", Ports: []int{873}, ScanFunc: Plugins.RsyncScan, Types: []string{common.PluginTypeService}, }) // NoSQL数据库 common.RegisterPlugin("cassandra", common.ScanPlugin{ Name: "Cassandra", Ports: []int{9042}, ScanFunc: Plugins.CassandraScan, Types: []string{common.PluginTypeService}, }) common.RegisterPlugin("neo4j", common.ScanPlugin{ Name: "Neo4j", Ports: []int{7687}, ScanFunc: Plugins.Neo4jScan, Types: []string{common.PluginTypeService}, }) // 远程桌面和显示服务 common.RegisterPlugin("rdp", common.ScanPlugin{ Name: "RDP", Ports: []int{3389, 13389, 33389}, ScanFunc: Plugins.RdpScan, Types: []string{common.PluginTypeService}, }) common.RegisterPlugin("postgres", common.ScanPlugin{ Name: "PostgreSQL", Ports: []int{5432, 5433}, ScanFunc: Plugins.PostgresScan, Types: []string{common.PluginTypeService}, }) common.RegisterPlugin("vnc", common.ScanPlugin{ Name: "VNC", Ports: []int{5900, 5901, 5902}, ScanFunc: Plugins.VncScan, Types: []string{common.PluginTypeService}, }) // 缓存和键值存储服务 common.RegisterPlugin("redis", common.ScanPlugin{ Name: "Redis", Ports: []int{6379, 6380, 16379}, ScanFunc: Plugins.RedisScan, Types: []string{common.PluginTypeService}, }) common.RegisterPlugin("memcached", common.ScanPlugin{ Name: "Memcached", Ports: []int{11211}, ScanFunc: Plugins.MemcachedScan, Types: []string{common.PluginTypeService}, }) common.RegisterPlugin("mongodb", common.ScanPlugin{ Name: "MongoDB", Ports: []int{27017, 27018}, ScanFunc: Plugins.MongodbScan, Types: []string{common.PluginTypeService}, }) // 2. 特殊漏洞扫描插件 common.RegisterPlugin("ms17010", common.ScanPlugin{ Name: "MS17010", Ports: []int{445}, ScanFunc: Plugins.MS17010, Types: []string{common.PluginTypeService}, }) common.RegisterPlugin("smbghost", common.ScanPlugin{ Name: "SMBGhost", Ports: []int{445}, ScanFunc: Plugins.SmbGhost, Types: []string{common.PluginTypeService}, }) // 3. Web应用扫描插件 common.RegisterPlugin("webtitle", common.ScanPlugin{ Name: "WebTitle", Ports: parsers.ParsePortsFromString(common.WebPorts), ScanFunc: Plugins.WebTitle, Types: []string{common.PluginTypeWeb}, }) common.RegisterPlugin("webpoc", common.ScanPlugin{ Name: "WebPoc", Ports: parsers.ParsePortsFromString(common.WebPorts), ScanFunc: Plugins.WebPoc, Types: []string{common.PluginTypeWeb}, }) // 4. Windows系统专用插件 common.RegisterPlugin("smb2", common.ScanPlugin{ Name: "SMBScan2", Ports: []int{445}, ScanFunc: Plugins.SmbScan2, Types: []string{common.PluginTypeService}, }) // 5. 本地信息收集插件 common.RegisterPlugin("localinfo", common.ScanPlugin{ Name: "LocalInfo", Ports: []int{}, ScanFunc: Plugins.LocalInfoScan, Types: []string{common.PluginTypeLocal}, }) common.RegisterPlugin("dcinfo", common.ScanPlugin{ Name: "DCInfo", Ports: []int{}, ScanFunc: Plugins.DCInfoScan, Types: []string{common.PluginTypeLocal}, }) common.RegisterPlugin("minidump", common.ScanPlugin{ Name: "MiniDump", Ports: []int{}, ScanFunc: Plugins.MiniDump, Types: []string{common.PluginTypeLocal}, }) } // GetAllPlugins 返回所有已注册插件的名称列表 func GetAllPlugins() []string { pluginNames := make([]string, 0, len(common.PluginManager)) for name := range common.PluginManager { pluginNames = append(pluginNames, name) } sort.Strings(pluginNames) return pluginNames }