一、项目地址
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 =
四、使用说明
- 先填写
data.conf
,参数说明:
参数 | 说明 |
---|---|
sender | 发送人的QQ邮箱,例如xxxxxx@qq.com |
pw | 在https://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256 可以查看,注意填写的是授权码,不是QQ邮箱密码。 |
receivers | 接收人的QQ邮箱,例如xxxxxxxx@qq.com |
- 本程序的
1.0
版本提供了三种选择,分别是-C
、-R
、-T
:
参数 | 说明 |
---|---|
-C | 采用sshclient +账号密码的方式登录(爆破账号密码) |
-R | 采用sshclient +公钥秘钥的方式登录(爆破密码) |
-T | 采用sftp 上传、下载文件(爆破账号密码) |
-
本程序提供两个参数:
①以上的三种选择三选一; ②IP地址。 使用示例为:
python W01f-ssh-crack.py -C 192.168.137.150
-
须确保您的
data.conf
、W01f-ssh-crack.py
、username.txt
、password.txt
在同一目录下。 -
目前已写好的代码里面邮件发送功能只支持
QQ
邮箱,您也可以自行改成其他的,如smtp.gmail.com
、端口587
,详情请参考网上的教程。 -
在爆破的过程中,由于使用了
set_missing_host_key_policy(paramiko.WarningPolicy())
这个方法,会导致大量的错误显示,但是这并不会影响结果,请耐心等待最终的输出结果即可。 -
结果展示
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
五、注意
1. 本程序仅供学习交流,若用本程序行违法之事,后果自负。
2. 如果您在使用中遇到任何问题,您有两种途径可以反馈:
①mailto:sharecat2022@gmail.com
②https://github.com/W01fh4cker/W01f-ssh-crack/issues