弱口令扫描器
0x00 弱口令扫描器插件的实现
弱口令扫描器的代码结构
● cmd包为命令行入口的实现。
● logger包为log模块的实现。
● models包为扫描器数据结构的实现。
● plugins包为扫描插件包。
● util包为工具函数的实现,如读取文件、扫描任务调度等。
● vars包定义了项目中用到的全局变量。
0x01 简单的实现
弱口令扫描器的原理是使用服务的客户端与服务器建立连接后, 用常见的弱口令字典中的用户名和密码不断地尝试登录,如果能登录 成功,说明存在弱口令
package main
import (
"golang.org/x/crypto/ssh"
"fmt"
"net"
"time"
)
func ScanSsh(ip string, port int, timeout time.Duration, service, username, password string) (result bool, err error) {
config := &ssh.ClientConfig{
User: username,
Auth: []ssh.AuthMethod{
ssh.Password(password),
},
Timeout: timeout,
HostKeyCallback: func(hostname string, remote net.Addr, key ssh.PublicKey) error {
return nil
},
}
client, err := ssh.Dial("tcp", fmt.Sprintf("%v:%v", ip, port), config)
if err == nil {
defer client.Close()
session, err := client.NewSession()
errRet := session.Run("echo xsec")
if err == nil && errRet == nil {
defer session.Close()
result = true
}
}
return result, err
}
func main() {
ip := "127.0.0.1"
port := 22
timeout := 3 * time.Second
service := "ssh"
username := "root"
password := "123456"
result, err := ScanSsh(ip, port, timeout, service, username, password)
fmt.Printf("check %v service, %v:%v, result: %v, err: %v\n", service, ip, port, result, err)
}
type ClientConfig
type ClientConfig struct {
//配置包含客户端和服务器之间共享的配置。
Config
//User包含要进行身份验证的用户名。
User string
// Auth包含与服务器一起使用的可能的身份验证方法。在身份验证过程中只使用特定RFC
//4252方法的第一个实例。
Auth []AuthMethod
// 在加密握手期间调用HostKeyCallback,以验证服务器的主机密钥。客户端配置必须提
//供此回调,以便连接成功。函数InsecureIgnoreHostKey或FixedHostKey可用于简单的
//主机密钥检查
HostKeyCallback HostKeyCallback
// 在SSH跳转期间调用BannerCallback以显示自定义服务器的消息。客户端配置可以提供
//这个回调来按需要处理它。函数BannerDisplayStderr可用于Stde上的简单显示
BannerCallback BannerCallback
// ClientVersion包含将用于连接的版本标识字符串。如果为空,则使用合理的默认值。
ClientVersion string
// HostKeyAlgorithms列出了客户端将从服务器接受的用于主机密钥身份验证的公钥算
//法,按优先级排序。如果为空,则使用合理的默认值。从PublicKey返回的任何字符
//串。可以使用类型方法,也可以使用任何CertAlgo和KeyAlgo常量。
HostKeyAlgorithms []string
// Timeout是TCP连接建立的最大时间。
// Timeout为零表示没有超时。
Timeout time.Duration
}
运行结果:
go run main.go
check ssh service, 127.0.0.1:22, result: false, err: dial tcp 127.0.0.1:22: connectex: No connection could be made because the target machine actively refused it