fscan/Plugins/MSSQL.go

82 lines
1.8 KiB
Go
Raw Normal View History

2020-12-29 17:17:10 +08:00
package Plugins
import (
"database/sql"
"fmt"
_ "github.com/denisenkom/go-mssqldb"
2024-12-18 22:00:18 +08:00
"github.com/shadow1ng/fscan/Common"
2020-12-29 17:17:10 +08:00
"strings"
"time"
)
// MssqlScan 执行MSSQL服务扫描
2024-12-19 16:15:53 +08:00
func MssqlScan(info *Common.HostInfo) (tmperr error) {
2024-12-20 03:46:09 +08:00
if Common.DisableBrute {
2021-11-25 10:16:39 +08:00
return
}
2021-03-30 18:12:54 +08:00
starttime := time.Now().Unix()
// 尝试用户名密码组合
2024-12-18 22:00:18 +08:00
for _, user := range Common.Userdict["mssql"] {
for _, pass := range Common.Passwords {
// 替换密码中的用户名占位符
2020-12-29 17:17:10 +08:00
pass = strings.Replace(pass, "{user}", user, -1)
2020-12-29 17:17:10 +08:00
flag, err := MssqlConn(info, user, pass)
if flag && err == nil {
return err
}
// 记录错误信息
errlog := fmt.Sprintf("[-] MSSQL %v:%v %v %v %v", info.Host, info.Ports, user, pass, err)
Common.LogError(errlog)
tmperr = err
if Common.CheckErrs(err) {
return err
}
// 超时检查
if time.Now().Unix()-starttime > (int64(len(Common.Userdict["mssql"])*len(Common.Passwords)) * Common.Timeout) {
2020-12-29 17:17:10 +08:00
return err
}
}
}
return tmperr
}
// MssqlConn 尝试MSSQL连接
2024-12-19 16:15:53 +08:00
func MssqlConn(info *Common.HostInfo, user string, pass string) (bool, error) {
host, port, username, password := info.Host, info.Ports, user, pass
timeout := time.Duration(Common.Timeout) * time.Second
// 构造连接字符串
connStr := fmt.Sprintf(
"server=%s;user id=%s;password=%s;port=%v;encrypt=disable;timeout=%v",
host, username, password, port, timeout,
)
// 建立数据库连接
db, err := sql.Open("mssql", connStr)
if err != nil {
return false, err
2020-12-29 17:17:10 +08:00
}
defer db.Close()
// 设置连接参数
db.SetConnMaxLifetime(timeout)
db.SetConnMaxIdleTime(timeout)
db.SetMaxIdleConns(0)
// 测试连接
if err = db.Ping(); err != nil {
return false, err
}
// 连接成功
result := fmt.Sprintf("[+] MSSQL %v:%v:%v %v", host, port, username, password)
Common.LogSuccess(result)
return true, nil
2020-12-29 17:17:10 +08:00
}