Python的简单实现:ssh综合密码爆破

一、项目地址

https://github.com/W01fh4cker/W01f-ssh-crack

二、代码思路

1. 首先导入库:

在这里插入图片描述

2. 定义函数getConfig(section, key),方便从data.conf中读取数据

在这里插入图片描述

3. 定义连接ssh的函数

这部分内容参考了刘江师傅的博客:用paramiko实现Python内的ssh功能
在这里插入图片描述
在这里插入图片描述
这部分代码写的很shi,繁琐得要命,其实无密码的情况下直接按回车就可以了,但是当天很晚才开始写,懒得改了。

插曲-发现问题

在参考刘江师傅的博客、其他人写的代码的时候,发现他们连接ssh所用到的关键代码有些问题。
我想实现的是任意IP的ssh爆破;他们的代码是:

ssh.load_system_host_keys()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

但是我这么写却发现连接不了。我用bitvise测试了下,发现在我第一次连接的时候,是需要接受对方发来的key的(写代码的时候我还没了解ssh握手的原理),而这个方法却没有接受功能。
我该怎么办呢?

插曲-解决问题

方法很简单,参考官方文档:https://docs.paramiko.org/en/stable/api/client.html。我们可以看到,set_missing_host_key_policy()可以有多种:
在这里插入图片描述
此时,我注意到了上图中的WarningPolicy()这个选项:
我们看看官方是怎么解释的:
在这里插入图片描述

Policy for logging a Python-style warning for an unknown host key, but accepting it.

翻译过来就是:
在这里插入图片描述
很棒,是我们想要的结果,它可以接受警告,并且接受key。
ok,很棒,问题解决了。

4.smtp连接

在这里插入图片描述
在这里插入图片描述
看似多此一举,实则多此一举的代码。
写了纯粹是好玩,没有测试这个代码,遇到了bug可以和我反馈。

5. 邮件通知

在这里插入图片描述
由于是引用了别人的代码,所以贴出来,点击蓝字即可访问:
使用Python发送邮件通知,作者秋刀鱼的炼丹工坊

def send_msg():
    server = "smtp.qq.com"
    port = 465
    sender = getConfig("data", "sender")
    pw = getConfig("data", "pw")
    receivers = getConfig("data", "receivers")
    machine_name = socket.gethostname()
    msg_root = MIMEMultipart('mixed')
    msg_root['From'] = Header(f'{machine_name} <{sender}>')
    msg_root['Subject'] = Header(f'Message from {machine_name}', 'utf-8')
    mail_msg = f"""
	<html>
	  <body>
	  <p>[{datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}]<br>
		 Message from {machine_name}</p>
	<p>Path: {os.getcwd()}<br>
	   Args: {' '.join(sys.argv)}</p>
       您的扫描任务已经完成,如果觉得本软件还不错的话请给个star,谢谢您!
       仓库地址:https://github.com/W01fh4cker/comprehensive-ssh-brute-crack
       有任何问题、建议,可以联系邮箱sharecat2022@gmail.com或者直接在github上面提出issues,地址为:https://github.com/W01fh4cker/comprehensive-ssh-brute-crack/issues。感谢您的每一个建议!祝您生活愉快!                               From W01fh4cker
	</body>
	</html>"""

    msg_root.attach(MIMEText(mail_msg, 'html', 'utf-8'))

    smtp = smtplib.SMTP_SSL(server, port)
    smtp.login(sender, pw)
    smtp.sendmail(sender, receivers, msg_root.as_string())
    print("[√]发送成功")
    smtp.quit()

代码写死了是QQ邮箱,可以修改smtp的地址和端口来换成谷歌邮箱等。

6. 主函数

在这里插入图片描述

三、配置文件

[data]
sender = 
pw = 
receivers = 

四、使用说明

  1. 先填写data.conf,参数说明:
参数说明
sender发送人的QQ邮箱,例如xxxxxx@qq.com
pwhttps://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256可以查看,注意填写的是授权码,不是QQ邮箱密码。
receivers接收人的QQ邮箱,例如xxxxxxxx@qq.com
  1. 本程序的1.0版本提供了三种选择,分别是-C-R-T
参数说明
-C采用sshclient+账号密码的方式登录(爆破账号密码)
-R采用sshclient+公钥秘钥的方式登录(爆破密码)
-T采用sftp上传、下载文件(爆破账号密码)
  1. 本程序提供两个参数:

     ①以上的三种选择三选一;
    
     ②IP地址。
    
     使用示例为:
    
python W01f-ssh-crack.py -C 192.168.137.150
  1. 须确保您的data.confW01f-ssh-crack.pyusername.txtpassword.txt在同一目录下。

  2. 目前已写好的代码里面邮件发送功能只支持QQ邮箱,您也可以自行改成其他的,如smtp.gmail.com、端口587,详情请参考网上的教程。

  3. 在爆破的过程中,由于使用了set_missing_host_key_policy(paramiko.WarningPolicy())这个方法,会导致大量的错误显示,但是这并不会影响结果,请耐心等待最终的输出结果即可。

  4. 结果展示
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传在这里插入图片描述

五、注意

1. 本程序仅供学习交流,若用本程序行违法之事,后果自负。
2. 如果您在使用中遇到任何问题,您有两种途径可以反馈:
①mailto:sharecat2022@gmail.com

②https://github.com/W01fh4cker/W01f-ssh-crack/issues
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值