mirror of
https://github.com/sairson/Yasso.git
synced 2026-02-04 19:13:26 +08:00
59 lines
1.3 KiB
Go
59 lines
1.3 KiB
Go
package plugin
|
|
|
|
import (
|
|
"Yasso/config"
|
|
"Yasso/core/logger"
|
|
"bytes"
|
|
"encoding/hex"
|
|
"fmt"
|
|
"net"
|
|
"strings"
|
|
)
|
|
|
|
// RMIConn 识别rmi服务方式
|
|
func RMIConn(info config.ServiceConn, user, pass string) bool {
|
|
conn, err := net.DialTimeout("tcp", fmt.Sprintf("%v:%v", info.Hostname, info.Port), info.Timeout)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
msg := "\x4a\x52\x4d\x49\x00\x02\x4b"
|
|
_, 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:1]) != "4e" {
|
|
return false
|
|
}
|
|
// 这里解析出字符串
|
|
banner := byteToString(reply)
|
|
logger.Success(fmt.Sprintf("%v [%v]", fmt.Sprintf("%v:%v", info.Hostname, info.Port), banner))
|
|
return true
|
|
}
|
|
|
|
func byteToString(p []byte) string {
|
|
var w []string
|
|
var res string
|
|
for i := 0; i < len(p); i++ {
|
|
if p[i] > 32 && p[i] < 127 {
|
|
w = append(w, string(p[i]))
|
|
continue
|
|
}
|
|
asciiTo16 := fmt.Sprintf("\\x%s", hex.EncodeToString(p[i:i+1]))
|
|
w = append(w, asciiTo16)
|
|
}
|
|
res = strings.Join(w, "")
|
|
if strings.Contains(res, "\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00") {
|
|
s := strings.Split(res, "\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00")
|
|
return s[0]
|
|
}
|
|
return res
|
|
}
|