mirror of
https://github.com/sairson/Yasso.git
synced 2026-02-04 11:04:25 +08:00
79 lines
2.5 KiB
Go
79 lines
2.5 KiB
Go
package plugin
|
|
|
|
import (
|
|
"Yasso/config"
|
|
"Yasso/core/logger"
|
|
"Yasso/pkg/grdp"
|
|
"Yasso/pkg/grdp/glog"
|
|
"bytes"
|
|
"encoding/hex"
|
|
"fmt"
|
|
"net"
|
|
)
|
|
|
|
func RdpConn(info config.ServiceConn, user, pass string) (bool, error) {
|
|
var err error
|
|
var host = fmt.Sprintf("%v:%v", info.Hostname, info.Port)
|
|
g := grdp.NewClient(host, glog.NONE)
|
|
//SSL协议登录测试
|
|
err = g.LoginForSSL(info.Domain, user, pass)
|
|
if err == nil {
|
|
return true, nil
|
|
}
|
|
if err.Error() != "PROTOCOL_RDP" {
|
|
return false, err
|
|
}
|
|
//RDP协议登录测试
|
|
err = g.LoginForRDP(info.Domain, user, pass)
|
|
if err == nil {
|
|
return true, nil
|
|
} else {
|
|
return false, nil
|
|
}
|
|
}
|
|
|
|
func VersionRdp(info config.ServiceConn, user, pass string) (bool, string) {
|
|
conn, err := net.DialTimeout("tcp", fmt.Sprintf("%v:%v", info.Hostname, info.Port), info.Timeout)
|
|
if err != nil {
|
|
return false, ""
|
|
}
|
|
msg := "\x03\x00\x00\x2b\x26\xe0\x00\x00\x00\x00\x00\x43\x6f\x6f\x6b\x69\x65\x3a\x20\x6d\x73\x74\x73\x68\x61\x73\x68\x3d\x75\x73\x65\x72\x30\x0d\x0a\x01\x00\x08\x00\x00\x00\x00\x00"
|
|
_, err = conn.Write([]byte(msg))
|
|
if err != nil {
|
|
return false, ""
|
|
}
|
|
reply := make([]byte, 256)
|
|
_, _ = conn.Read(reply)
|
|
if conn != nil {
|
|
_ = conn.Close()
|
|
}
|
|
|
|
var buffer [256]byte
|
|
if bytes.Equal(reply[:], buffer[:]) {
|
|
return false, ""
|
|
} else if hex.EncodeToString(reply[0:8]) != "030000130ed00000" {
|
|
return false, ""
|
|
}
|
|
|
|
os := map[string]string{}
|
|
os["030000130ed000001234000209080000000000"] = "Windows 7/Windows Server 2008 R2"
|
|
os["030000130ed000001234000200080000000000"] = "Windows 7/Windows Server 2008"
|
|
os["030000130ed000001234000201080000000000"] = "Windows Server 2008 R2"
|
|
os["030000130ed000001234000207080000000000"] = "Windows 8/Windows server 2012"
|
|
os["030000130ed00000123400020f080000000000"] = "Windows 8.1/Windows Server 2012 R2"
|
|
os["030000130ed000001234000300080001000000"] = "Windows 10/Windows Server 2016"
|
|
os["030000130ed000001234000300080005000000"] = "Windows 10/Windows 11/Windows Server 2019"
|
|
var banner string
|
|
for k, v := range os {
|
|
if k == hex.EncodeToString(reply[0:19]) {
|
|
banner = v
|
|
logger.Info(fmt.Sprintf("%v [%v]", fmt.Sprintf("%v:%v", info.Hostname, info.Port), banner))
|
|
return true, fmt.Sprintf("%v [%v]", fmt.Sprintf("%v:%v", info.Hostname, info.Port), banner)
|
|
}
|
|
}
|
|
banner = hex.EncodeToString(reply[0:19])
|
|
_ = reply
|
|
logger.Info(fmt.Sprintf("%v [%v]", fmt.Sprintf("%v:%v", info.Hostname, info.Port), banner))
|
|
return true, fmt.Sprintf("%v [%v]", fmt.Sprintf("%v:%v", info.Hostname, info.Port), banner)
|
|
}
|