package Plugins import ( "database/sql" "fmt" _ "github.com/denisenkom/go-mssqldb" "github.com/shadow1ng/fscan/common" "time" ) type MssqlConn struct{} func MssqlScan(info *common.HostInfo) (tmperr error) { if common.IsBrute { return } mssqlConn := &MssqlConn{} bt := common.InitBruteThread("mssql", info, common.Timeout, mssqlConn) return bt.Run() } func (m *MssqlConn) Attack(info *common.HostInfo, user string, pass string, timeout int64) (flag bool, err error) { flag = false Host, Port, Username, Password := info.Host, info.Ports, user, pass dataSourceName := fmt.Sprintf("server=%s;user id=%s;password=%s;port=%v;encrypt=disable;timeout=%v", Host, Username, Password, Port, time.Duration(common.Timeout)*time.Second) db, err := sql.Open("mssql", dataSourceName) if err == nil { db.SetConnMaxLifetime(time.Duration(timeout) * time.Second) db.SetConnMaxIdleTime(time.Duration(timeout) * time.Second) db.SetMaxIdleConns(0) defer db.Close() err = db.Ping() if err == nil { result := fmt.Sprintf("[+] mssql:%v:%v:%v %v", Host, Port, Username, Password) common.LogSuccess(result) flag = true } } return flag, err }