前言
本人有10+台VPS,大多数仅仅是用来传输流量,并不经常登陆,但是一旦登陆就能看到提示上万条登陆失败记录,很烦。


为了更好的“利用”VPS资源,就搞了一下伪造SSH,抓取扫爆口令,获取属于自己的字典
简介&代码
使用github.com/gliderlabs/ssh
简单造个轮子。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
| package main
import ( "flag" "fmt" "github.com/gliderlabs/ssh" gossh "golang.org/x/crypto/ssh" "io/ioutil" "log" "os" "os/exec" "path/filepath" "time" )
var ( port int local string )
func main() { hostKeySigner, err := createOrLoadKeySigner() if err != nil { log.Fatal(err) } flag.StringVar(&local, "local", "0.0.0.0", "local listening port") flag.IntVar(&port, "p", 22, "SSH Server Port") flag.Parse() s := &ssh.Server{ Addr: fmt.Sprintf("%v:%v", local, port), Handler: SSHHandler, PasswordHandler: passwordHandler, } s.AddHostKey(hostKeySigner) log.Fatal(s.ListenAndServe()) }
func passwordHandler(ctx ssh.Context, password string) bool { data := fmt.Sprintf("[%s]< %s:%s >from:%s\n", time.Now().Format("2006-01-02 15:04:05"), ctx.User(), password, ctx.RemoteAddr()) fmt.Print(data) file, err := os.OpenFile("pw.txt", os.O_RDWR|os.O_APPEND|os.O_CREATE, 0666) if err != nil { fmt.Println("文件打开失败", err) } defer file.Close() file.Write([]byte(data)) return false } func SSHHandler(s ssh.Session) { s.Write([]byte("log")) s.Exit(1)
}
func createOrLoadKeySigner() (gossh.Signer, error) { keyPath := filepath.Join(os.TempDir(), "fssh.rsa") if _, err := os.Stat(keyPath); os.IsNotExist(err) { os.MkdirAll(filepath.Dir(keyPath), os.ModePerm) stderr, err := exec.Command("ssh-keygen", "-f", keyPath, "-t", "rsa", "-N", "").CombinedOutput() output := string(stderr) if err != nil { return nil, fmt.Errorf("Fail to generate private key: %v - %s", err, output) } } privateBytes, err := ioutil.ReadFile(keyPath) if err != nil { return nil, err } return gossh.ParsePrivateKey(privateBytes) }
|
使用方法
更换sshd服务监听端口
1.修改配置文件
1 2 3 4
| vim /etc/ssh/sshd_config #修改Port 22 为 Port 222 或者 sed 's/Port 22/Port 222/' /etc/ssh/sshd_config
|
注意:此时222端口一定要添加到防火墙放行,否则可能失联。
2.重启sshd服务
3.断开连接,重新使用222端口 ssh 登陆vps
获取软件
上面代码编译 or github获取
启动软件
正常启动
sage of ./main:
-local string
local listening port (default “0.0.0.0”)
-p int
SSH Server Port (default 22)
chmod +x main && ./main
就可以,获取到的密码保存到pw.txt
后台启动
1 2 3 4 5
| chmod +x main
nohup ./main &
screen -S fakessh ./main
|
数据读取
获取字典
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| [root@w39tPyBEu4 sshf]# awk '{print $3}' pw.txt root:ads root:minecraftserver kjayroe:kjayroe root:minecraftserver root:1qaz2wsx3edc oracle:oracle root:1qazZAQ! [root@w39tPyBEu4 sshf]# awk '{print $3}' pw.txt | sed 's/:/ /' root ads root minecraftserver kjayroe kjayroe root minecraftserver root 1qaz2wsx3edc oracle oracle root 1qazZAQ! [root@w39tPyBEu4 sshf]# grep root pw.txt |awk '{print $3}' | sed 's/:/ /' root ads root minecraftserver root minecraftserver root 1qaz2wsx3edc root 1qazZAQ
|
只获取密码
1
| awk -F'[: ]' '{print $7}' pw.txt
|