Python开发爆破字典

这里只是分享一下Python如何生成爆破字典

关于爆破工具编写我会在下一篇提到

其实有了爆破字典的话,直接使用Burp,Hydra等一些工具就可以做爆破了!

Burp的使用在我以前的博客中有写过,至于Hydra工具就更简单了,百度即可 

 

实例1:

如果我知道某个账户的密码一定是数字并且只有4位(其实这种情况也不少见)

那么我就可以开发一个0000-9999的字典:

# -*-coding:utf-8 -*-

# 生成密码字典:0000-9999

chars = [
    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
]
f = open("dict.txt", 'w')
base = len(chars)
end = len(chars) ** 4
for i in range(0, end):
    n = i
    ch0 = chars[n % base]
    n /= base
    ch1 = chars[n % base]
    n /= base
    ch2 = chars[n % base]
    n /= base
    ch3 = chars[n % base]
    f.write(ch3 + ch2 + ch1 + ch0 + '\n')
f.close()

 

运行后就可以在当前目录生成一个dict.txt字典

 

实例2:

如果我想暴力破解一个Web后台

那么我会想到:密码信息通常和这个网站的域名有所关联

比如https://www.cnblogs.com/xuyiqing

假设它存在后来管理密码,那么很大可能会结合xuyiqing,cnblogs

如果再配合一些常见的弱密码比如:admin,root,manager

再加上一些特殊字符,比如!@#,那么生成的字典将会是一个高精度,有针对性的

 

这里需要用一个Python的第三方库:

exrex

官方解释:Irregular methods for regular expressions

 

这里简单:pip install exrex

 

 

代码部分也不难:

我这里只是一个抛砖引玉的效果,具体的可以根据自己的需求进行修改:

 

create_dic.py:

# -*-coding:utf-8 -*-
import exrex
import sys

# 过滤关键字
web_white = ['com', 'cn', 'org', 'edu', 'gov', 'www']


def host_para(host):
    """
    根据输入网址得到域名等特征信息
    例如输入:https://www.cnblogs.com/xxx
    得到结果:www.cnblogs.com.xxx
    :param host: 输入URL
    :return: 特征字符串
    """
    if '://' in host:
        host = host.split('://')[1]
    if '/' in host:
        host = host.replace('/', '.')
    return host


def dic_create(host):
    """
    生产密码字典
    :param host:经过处理的URL
    :return: None
    """

    # 比如传入www.cnblogs.comxxx
    # 得到[www,cnblogs,comxxx]
    web_dics = host.split('.')

    # 读取正则规则
    f_rule = open('rule.ini', 'r')
    rule = ""
    for i in f_rule:
        if '#' != i[0]:
            rule = i

    # 创建字典文件
    f_dic = open('dic.txt', 'w')
    f_dic.close()

    for web_dic in web_dics:
        if web_dic not in web_white:
            # 读取参考密码进行组合
            f_pass = open('pass.txt', 'r')
            for dic_pass in f_pass:
                dics = list(exrex.generate(rule.format(web_dic=web_dic, dic_pass=dic_pass.strip('\n'))))
                for dic in dics:
                    # 过滤过于简单的密码
                    if len(dic) > 4:
                        f_dic = open('dic.txt', 'a+')
                        f_dic.write(dic + "\n")
                        f_dic.close()
                        print dic.strip('\n')


if __name__ == '__main__':
    if len(sys.argv) == 2:
        dic_create(host_para(sys.argv[1]))
        sys.exit()
    else:
        print "[*]Usage:python create_dic.py [URL]"

 

它用到了一个参考字典:

pass.txt:存放一些常见的弱密码,用来进行组合

 

我这里随意加入了一些:

admin
administrator
root
guest
manage
manager

 

还有一个文件rule.ini存放正则表达式进行匹配:

对域名信息web_dic和参考字典dic_pass进行匹配,再加入一些特殊字符!@#

如果有需求,可以把特殊字符修改为姓名电话号码等等

最后就是年份的匹配,我这里匹配的是2014-2019

实际也可以匹配其他的一些字符

#字典生产程序的配置文件
#规则:{web_dic}[!@#]{dic_pass}
(|{web_dic})(|!|@|#)(|{dic_pass})(|!|@|#)(|201[456789]|)

 

使用:

 

回车即可在当前目录生成字典文件

posted @ 2019-01-22 10:21  4ra1n  阅读(1984)  评论(1编辑  收藏  举报