解读Pydictor
原作者git项目地址:https://github.com/LandGrey/pydictor
0x01:
Pydictor是一款轻量级字典**工具,linux安装如下:
git clone --depth=1 --branch=master https://www.github.com/landgrey/pydictor.git
cd pydictor/
python pydictor.py
我们主要是讲解其参数的作用:
-base 基本类型
-char 字符型
-chunk 块
-extend 延伸
-plug 插件
--conf 基于配置文件的词汇表
-sedb 社会工程学
-o 指定生成的txt的文件路径
-tool 使用工具 如·:组合,比较器,计数器,处理器,uniqbiner,uniqifer
--len 长度范围
--head 添加头文件
--tail 添加尾部文件
--encode 加密功能模块
--occur 发生功能模块
--types 类型功能模块
--regex 正则表达式函数
--level 等级
--leet leet表
我们可以去研究一下这个工具的源代码:
我们看看git上项目的插件模块ftp这部分:
ftp.py
from __future__ import unicode_literals
from lib.fun.fun import cool
from lib.fun.decoator import magic
from lib.data.data import pyoptions
def ftp_magic(*args):
"""[keyword1][keyword2][keyword3]"""
args=list(args[0])
if len(args)==1:
exit(pyoptions.CRLF+cool.fuchsia("[!]Usage:{} {}".format(args[0],pyoptions.plugins_info_get(args[0]))))
@magic(装饰器)
def ftp():
results=[]
default_password=('ftp','anonymous','[email protected]','xbox','lampp','admin')
results+=defalut_password
weak_passwd=('root','123456','111111','666666','ftppass')
results+=weak_passwd
for r in results:
yield r
tails=['1','01','001','123','abc','!QAZ','1q2w3e','2016','2017','2018']
for keyword in args:
for tail in tails:
yield keyword+tail
其实我们可以看到这个代码其实很简单,核心代码就是ftp()函数,使用两个循环将其passwd组合起来,最后返回一个keyword+tail出去
当然我们也可以自己添加插件
0x01:
首先我们要导入下面的模块然后写入自己的名字:
#! usr/bin/env python
#coding:utf-8
#author:liuyang
from __future__ import unicode_literals
from lib.fun.decorator import magic
from lib.data.data import pyoptions
0x02:
定义一个"name_magic(*args)函数",并且编写函数用法的doc,获取参数值:
def name_magic(*args):
"""[keyword1][keyword2][keyword3]"""
args=list(arg[0])
0x03:
处理用户输入的异常参数:
if len(args)==1:
exit(pyoptions.CRLF+cool.fuchsia("[!] Usage:{}{}".format(arg[0],pyoptions.plugins_info.get(arg[0]))))
0x04:
使用magic装饰器,warp “name()”功能:
@magic
def name():
0x05:
在name()函数中,生成你的单词列表或者产生值:
0x051:
results=[]
append something to results
return results
0x052:
results is python generator
for r in results:
yeild r
如果你想在最后的单词列表中添加上自己的弱密码列表,那么你可以把你的单词表(lib/data/data.py脚本中定义)
如下所示:
from lib.data.data import paths
from lib.fun.fun import walk_all_files
@magic
def name():
for _ in walks_all_files(paths.weblist_path):
yield "".join(_)
这样编写的脚本支持pydictor中的所有手型函数。
如果他是"/plugins/ftp.py"脚本,并且他的名字必须是"ftp",一个简单的例子:
from __future__ import unicode_literals
from lib.fun.fun import cool
from lib.fun.decoator import magic
from lib.data.data import pyoptions
def ftp_magic(*args):
"""[keyword1][keyword2][keyword3]"""
args=list(args[0])
if len(args)==1:
exit(pyoptions.CRLF+cool.fuchsia("[!]Usage:{} {}".format(args[0],pyoptions.plugins_info_get(args[0]))))
@magic(装饰器)
def ftp():
results=[]
default_password=('ftp','anonymous','[email protected]','xbox','lampp','admin')
results+=defalut_password
weak_passwd=('root','123456','111111','666666','ftppass')
results+=weak_passwd
for r in results:
yield r
tails=['1','01','001','123','abc','!QAZ','1q2w3e','2016','2017','2018']
for keyword in args:
for tail in tails:
yield keyword+tail
调用ftp插件,用命令"python pydictor.py -plug ftp [keyword1][keyword2]..."
0x06:
编写编码函数:
只需要在"lib/fun/encode.py"脚本中编写函数即可.
比如我们编写一个base64加密的函数:
from base64 import b64encode
def b64_encode(item):
"""base64 encode """
try:
return(b64encode(item.encode('utf-8'))).decode()
except:
return ''
使用命令"python pydictor.py --encode name"调用编码函数