转载  通过模拟ssh服务器端找回 ssh客户端存储密码(比如:MobaXterm)即 fake ssh

分类:运维 2020-12-09T20:52:53    247人阅读   

题记:

上周服务器断了,本地登录处理·记不起root 密码,抓瞎了。MobaXterm 客户端上是保存了密码的,但是免费版无法查看。

于是想着可不可以假冒个服务器接收登录请求,解析出密码。

使用GO语言假冒一个服务器,代码如下:

package main
 
import (
	"github.com/gliderlabs/ssh"
	gossh "golang.org/x/crypto/ssh"
	"io/ioutil"
	"log"
)
 



func homeHandler(s ssh.Session) {
 
}
 
func passwordHandler(ctx ssh.Context, password string) bool {
	log.Printf("username:%s, password:%s\n", ctx.User(), password)
	return true
}
 
func main() {
	keyPath := "id_rsa"
	keyData, err := ioutil.ReadFile(keyPath)
	if err != nil {
		log.Fatal(err)
		return
	}
	key, err := gossh.ParsePrivateKey(keyData)
	if err != nil {
		log.Fatal(err)
		return
	}
 
	s := &ssh.Server{
		Addr:    "127.0.0.1:10005",
		Handler: homeHandler, //
		//PublicKeyHandler:
		PasswordHandler: passwordHandler,
	}
	s.AddHostKey(key)
	log.Fatal(s.ListenAndServe())
}

使用说明:

1、当前目录需要一个id_rsa文件,到用户目录.ssh拷贝一个就行

2、Addr: "127.0.0.1:10005" 改成自己的地址和端口

3、添加hosts映射,将你连接的服务器地址映射到127.0.0.1,比如

127.0.0.1  ddns.weiqinxue.cn

使用如下运行GO脚本(fake_ssh.go 为文件名):

go run fake_ssh.go

点击ssh连接服务器,可以看到账号密码如图:



点击广告?(赏赐笔者)