mirror of
https://github.com/shadow1ng/fscan.git
synced 2026-09-26 05:01:53 +08:00
fix: 修复RDP爆破高误报率问题 (#555)
- 移除 screen.go 中错误的认证结果覆盖逻辑 - 启用 NLA 协议的 ErrorCode 字段检测 - 添加 PubKeyAuth 验证确保认证真正成功 - 修复 io.go 中错误被静默忽略的问题 - 修复 socket.go/io.go 中可能导致 panic 的代码 - 修复 screen.go 中文件句柄泄漏和 log.Panic
This commit is contained in:
@@ -26,7 +26,10 @@ func ReadBytes(len int, r io.Reader) ([]byte, error) {
|
||||
|
||||
func ReadByte(r io.Reader) (byte, error) {
|
||||
b, err := ReadBytes(1, r)
|
||||
return b[0], err
|
||||
if err != nil || len(b) == 0 {
|
||||
return 0, err
|
||||
}
|
||||
return b[0], nil
|
||||
}
|
||||
|
||||
func ReadUInt8(r io.Reader) (uint8, error) {
|
||||
@@ -42,7 +45,7 @@ func ReadUint16LE(r io.Reader) (uint16, error) {
|
||||
b := make([]byte, 2)
|
||||
_, err := io.ReadFull(r, b)
|
||||
if err != nil {
|
||||
return 0, nil
|
||||
return 0, err
|
||||
}
|
||||
return binary.LittleEndian.Uint16(b), nil
|
||||
}
|
||||
@@ -51,7 +54,7 @@ func ReadUint16BE(r io.Reader) (uint16, error) {
|
||||
b := make([]byte, 2)
|
||||
_, err := io.ReadFull(r, b)
|
||||
if err != nil {
|
||||
return 0, nil
|
||||
return 0, err
|
||||
}
|
||||
return binary.BigEndian.Uint16(b), nil
|
||||
}
|
||||
@@ -60,7 +63,7 @@ func ReadUInt32LE(r io.Reader) (uint32, error) {
|
||||
b := make([]byte, 4)
|
||||
_, err := io.ReadFull(r, b)
|
||||
if err != nil {
|
||||
return 0, nil
|
||||
return 0, err
|
||||
}
|
||||
return binary.LittleEndian.Uint32(b), nil
|
||||
}
|
||||
@@ -69,7 +72,7 @@ func ReadUInt32BE(r io.Reader) (uint32, error) {
|
||||
b := make([]byte, 4)
|
||||
_, err := io.ReadFull(r, b)
|
||||
if err != nil {
|
||||
return 0, nil
|
||||
return 0, err
|
||||
}
|
||||
return binary.BigEndian.Uint32(b), nil
|
||||
}
|
||||
|
||||
@@ -69,6 +69,13 @@ func (s *SocketLayer) TlsPubKey() ([]byte, error) {
|
||||
if s.tlsConn == nil {
|
||||
return nil, errors.New("TLS conn does not exist")
|
||||
}
|
||||
pub := s.tlsConn.ConnectionState().PeerCertificates[0].PublicKey.(*rsa.PublicKey)
|
||||
certs := s.tlsConn.ConnectionState().PeerCertificates
|
||||
if len(certs) == 0 {
|
||||
return nil, errors.New("no peer certificates")
|
||||
}
|
||||
pub, ok := certs[0].PublicKey.(*rsa.PublicKey)
|
||||
if !ok {
|
||||
return nil, errors.New("invalid public key type")
|
||||
}
|
||||
return asn1ber.Marshal(*pub)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user