Python编写渗透工具学习笔记一 | 0x08字典生成程序

0x08字典生成程序

这里主要用到了exrex模块,这个模块的主要功能是:

  • 生成所有匹配的字符串
  • 生成随机匹配的字符串
  • 计算匹配字符串的数量
  • 简化正则表达式

这里主要用到了这个模块的generate方法

generate(s,limit = 20)

  • 函数的作用:创建一个生成器,生成给定正则表达式的所有匹配字符串
  • 参数s:正则表达式
  • limit:范围限制,要求limit的类型为整型数
  • 返回一个字符串生成器对象

这里给两个个使用例子

例子一

结果

例子二

结果

实现思路:

根据web网站的url生成响应的密码字典文件,主要是通过规则进行匹配生成,大致思路为输入一个Web站点的URL,然后根据白名单过滤提取出该URL的中间部分,然后结合密码字典文件和时间等内容进行组合来生成字典

最后生成的密码字典会储存在pass_1.txt文件中

工具源码:

#!/usr/bin/python
#-*-coding:utf-8-*-
import exrex
import sys
'''

传入一个host,demo.webdic.com

那么deme,webdic都可能作为字典的一部分

'''
#白名单过滤掉url中的这些字串
web_white=['com','cn','gov','edu','org','www']
def host_para(host):
#对host进行分析,处理成我们想要的格式
#去掉http://和输入的url中的/
if '://' in host:
host=host.split('://')[1].replace('/','')
if '/' in host:
host=host.replace('/','')
return host
'''
#dics=list(exrex.generate(web_dic+'[!@#]'+dic_pass))
#为了将核心规则写入配置文件,
实现可以实时修改规则,使用以下定义方法
#dics=list(exrex.generate
('{web_dic}[!@#]{dic_pass}'.
format(web_dic=web_dic,dic_pass=dic_pass)))
'''
def dic_creat(hosts):
web_dics=hosts.split('.')
#取出有用的东西,如demo,webdic,
#放入字典生成的地方,生成字典
f_rule=open('rule.ini','r')
#逐行读取文本
#直到遇到的不是#开头的就当做是规则处理
for i in f_rule:
if '#' !=i[0]:
rule=i
#创建储存生成的密码字典的文件
f_pass_out=open('pass_1.txt','w')
f_pass_out.close()
#生成字典
for web_dic in web_dics:
#白名单过滤
if web_dic not in web_white:
f_pass=open('pass_0.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:
#只取长度大于4的密码
if len(dic) >4:
f_pass_out=open('pass_1.txt','a+')
f_pass_out.write(dic+'\n')
f_pass_out.close()
print dic
if __name__ == '__main__':
if len(sys.argv)==2:
dic_creat(host_para(sys.argv[1]))
sys.exit(0)
else:
print 'Usage:%s www.demo.com'%sys.argv[0]
sys.exit(-1)

原文发布于微信公众号 - 安恒网络空间安全讲武堂(gh_fa1e45032807)

原文发表时间:2017-12-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏LinkedBear的个人空间

唠唠SE的多线程-01——线程 原

2.如果线程对象直接调用run(),那么JVN不会当作线程来运行,会认为是普通的方法调用。

823
来自专栏C/C++基础

C++构造函数体内赋值与初始化列表的区别

问题描述下: Linux环境运行,使用g++编译,贴上如下代码出错处已标注于代码中。 代码如下:

1052
来自专栏Java编程

Java中volatile关键字的含义

在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉。

5670
来自专栏博岩Java大讲堂

Java虚拟机--类加载机制

3057
来自专栏swag code

XML文档树形结构图解

  3)<book>节点下有许多的子节点<title>、< author>、<year>、<price>

973
来自专栏向治洪

volatile和Synchronized区别

volatile和Synchronized区别 volatile Java语言规范中指出:为了获得最佳速度,允许线程保存共享成员变量的私有拷贝,而且只当线程进...

1838
来自专栏企鹅号快讯

python学习爬虫获取糗事百科段子

利用前面学到的文件、正则表达式、urllib的知识,综合运用,爬取糗事百科的段子 先用urllib库获取糗事百科热帖第一页的数据。并打开文件进行保存,正好可以熟...

2165
来自专栏二进制文集

Java 代码模拟死锁

1013
来自专栏二进制文集

Java 代码模拟死锁

1242
来自专栏蓝天

Google的dense_hash注意点

使用Google的dense_hash_map,在插入数据之前,需要先调用set_empty_key()设置一个空Key,Key的值可以为任意符合类型的。但请...

631

扫码关注云+社区

领取腾讯云代金券