cansina 目录_GitHub - JameKing2018/dirmap: An advanced web directory scanning tool that will be more p...

dirmap是一个功能强大的Web目录扫描工具,支持并发扫描、字典与爆破模式、爬虫动态字典等,具有自定义请求与响应处理等功能。用户可以配置递归扫描、请求超时、代理等高级选项,适用于多种扫描场景。
摘要由CSDN通过智能技术生成

dirmap

一个高级web目录扫描工具,功能将会强于DirBuster、Dirsearch、cansina、御剑

需求分析

经过大量调研,总结一个优秀的web目录扫描工具至少具备以下功能:

并发引擎

能使用字典

能纯爆破

能爬取页面动态生成字典

能fuzz扫描

自定义请求

自定义响应结果处理...

那么接下来看看dirmap的特点吧

功能特点

支持n个target*n个payload并发

支持递归扫描

支持自定义需要递归扫描的状态码

支持(单|多)字典扫描

支持自定义字符集爆破

支持爬虫动态字典扫描

支持自定义标签fuzz目标url

自定义请求User-Agent

自定义请求随机延时

自定义请求超时时间

自定义请求代理

自定义正则表达式匹配假性404页面

自定义要处理的响应状态码

自定义跳过大小为x的页面

自定义显示content-type

自定义显示页面大小

按域名去重复保存结果

使用方法

环境准备

git clone https://github.com/H4ckForJob/dirmap.git && cd dirmap && python3 -m pip install -r requirement.txt

快速使用

单个目标

python3 dirmap.py -iU https://target.com -lcf

多个目标

python3 dirmap.py -iF urls.txt -lcf

结果保存

结果将自动保存在项目根目录下的output文件夹中

每一个目标生成一个txt,命名格式为目标域名.txt

结果自动去重复,不用担心产生大量冗余

高级使用

自定义dirmap配置,开始探索dirmap高级功能

暂时采用加载配置文件的方式进行详细配置,不支持使用命令行参数进行详细配置!

编辑项目根目录下的dirmap.conf,进行配置

dirmap.conf配置详解

#递归扫描处理配置

[RecursiveScan]

#是否开启递归扫描:关闭:0;开启:1

conf.recursive_scan = 0

#遇到这些状态码,开启递归扫描。默认配置[301,403]

conf.recursive_status_code = [301,403]

#设置排除扫描的目录。默认配置空。其他配置:e.g:['/test1','/test2']

#conf.exclude_subdirs = ['/test1','/test2']

conf.exclude_subdirs = ""

#扫描模式处理配置(4个模式,1次只能选择1个)

[ScanModeHandler]

#字典模式:关闭:0;单字典:1;多字典:2

conf.dict_mode = 1

#单字典模式的路径

conf.dict_mode_load_single_dict = "dict_mode_dict.txt"

#多字典模式的路径,默认配置dictmult

conf.dict_mode_load_mult_dict = "dictmult"

#爆破模式:关闭:0;开启:1

conf.blast_mode = 0

#生成字典最小长度。默认配置3

conf.blast_mode_min = 3

#生成字典最大长度。默认配置3

conf.blast_mode_max = 3

#默认字符集:a-z。暂未使用。

conf.blast_mode_az = "abcdefghijklmnopqrstuvwxyz"

#默认字符集:0-9。暂未使用。

conf.blast_mode_num = "0123456789"

#自定义字符集。默认配置"abc"。使用abc构造字典

conf.blast_mode_custom_charset = "abc"

#自定义继续字符集。默认配置空。

conf.blast_mode_resume_charset = ""

#爬虫模式:关闭:0;开启:1

conf.crawl_mode = 0

#解析robots.txt文件。暂未实现。

conf.crawl_mode_parse_robots = 0

#解析html页面的xpath表达式

conf.crawl_mode_parse_html = "//*/@href | //*/@src | //form/@action"

#是否进行动态爬虫字典生成:关闭:0;开启:1

conf.crawl_mode_dynamic_fuzz = 0

#Fuzz模式:关闭:0;单字典:1;多字典:2

conf.fuzz_mode = 0

#单字典模式的路径。

conf.fuzz_mode_load_single_dict = "fuzz_mode_dir.txt"

#多字典模式的路径。默认配置:fuzzmult

conf.fuzz_mode_load_mult_dict = "fuzzmult"

#设置fuzz标签。默认配置{dir}。使用{dir}标签当成字典插入点,将http://target.com/{dir}.php替换成http://target.com/字典中的每一行.php。其他配置:e.g:{dir};{ext}

#conf.fuzz_mode_label = "{ext}"

conf.fuzz_mode_label = "{dir}"

#处理payload配置。暂未实现。

[PayloadHandler]

#处理请求配置

[RequestHandler]

#自定义请求头。默认配置空。其他配置:e.g:test1=test1,test2=test2

#conf.request_headers = "test1=test1,test2=test2"

conf.request_headers = ""

#自定义请求User-Agent。默认配置chrome的ua。

conf.request_header_ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"

#自定义请求cookie。默认配置空,不设置cookie。其他配置e.g:cookie1=cookie1; cookie2=cookie2;

#conf.request_header_cookie = "cookie1=cookie1; cookie2=cookie2"

conf.request_header_cookie = ""

#自定义401认证。暂未实现。因为自定义请求头功能可满足该需求(懒XD)

conf.request_header_401_auth = ""

#自定义请求方法。默认配置get方法。其他配置:e.g:get;head

#conf.request_method = "head"

conf.request_method = "get"

#自定义每个请求超时时间。默认配置3秒。

conf.request_timeout = 3

#随机延迟(0-x)秒发送请求。参数必须是整数。默认配置0秒,无延迟。

conf.request_delay = 0

#自定义单个目标,请求协程线程数。默认配置30线程

conf.request_limit = 30

#自定义最大重试次数。暂未实现。

conf.request_max_retries = 1

#设置持久连接。是否使用session()。暂未实现。

conf.request_persistent_connect = 0

#302重定向。默认False,不重定向。其他配置:e.g:True;False

conf.redirection_302 = False

#payload后添加后缀。默认空,扫描时,不添加后缀。其他配置:e.g:txt;php;asp;jsp

#conf.file_extension = "txt"

conf.file_extension = ""

#处理响应配置

[ResponseHandler]

#设置要记录的响应状态。默认配置[200],记录200状态码。其他配置:e.g:[200,403,301]

#conf.response_status_code = [200,403,301]

conf.response_status_code = [200]

#是否记录content-type响应头。默认配置1记录

#conf.response_header_content_type = 0

conf.response_header_content_type = 1

#是否记录页面大小。默认配置1记录

#conf.response_size = 0

conf.response_size = 1

#自定义匹配404页面正则

#conf.custom_404_page = "fake 404"

conf.custom_404_page = ""

#自定义匹配503页面正则。暂未实现。感觉用不着,可能要废弃。

#conf.custom_503_page = "page 503"

conf.custom_503_page = ""

#自定义正则表达式,匹配页面内容

#conf.custom_response_page = "([0-9]){3}([a-z]){3}test"

conf.custom_response_page = ""

#跳过显示页面大小为x的页面,若不设置,请配置成"None",默认配置“None”。其他大小配置参考e.g:None;0b;1k;1m

#conf.skip_size = "0b"

conf.skip_size = "None"

#代理选项

[ProxyHandler]

#代理配置。默认设置“None”,不开启代理。其他配置e.g:{"http":"http://127.0.0.1:8080","https":"https://127.0.0.1:8080"}

#conf.proxy_server = {"http":"http://127.0.0.1:8080","https":"https://127.0.0.1:8080"}

conf.proxy_server = None

#Debug选项

[DebugMode]

#打印payloads并退出

conf.debug = 0

#update选项

[CheckUpdate]

#github获取更新。暂未实现。

conf.update = 0

TODO

命令行参数解析全局初始化

engine初始化

设置线程数

target初始化

单个url(-iU,inputUrl)

多个url(-iL,inputLocalFile)

ip范围

Start-End(-iR)

IP/MASK(-iN)

bruter初始化

加载配置方式()

读取命令行参数值

读取配置文件(-lcf,loadConfigFile)

递归模式选项(RecursiveScan)

递归扫描(-rs,recursive_scan)

需要递归的状态码(-rd,recursive_status_code)

排除某些目录(-es,exclude_subdirs)

扫描模式选项(ScanModeHandler)

字典模式(-dm,dict_mode)

加载单个字典(-dmlsd,dict_mode_load_single_dict)

加载多个字典(-dmlmd,dict_mode_load_mult_dict)

爆破模式(-bm,blast_mode)

爆破目录长度范围(必选)

最小长度(-bmmin,blast_mode_min)

最大长度(-bmmax,blast_mode_max)

基于默认字符集

基于a-z

基于0-9

基于自定义字符集(-bmcc,blast_mode_custom_charset)

断点续生成payload(-bmrc,blast_mode_resume_charset)

爬虫模式(-cm,crawl_mode)

自定义解析标签(-cmph,crawl_mode_parse_html)(a:href,img:src,form:action,script:src,iframe:src,div:src,frame:src,embed:src)

解析robots.txt(-cmpr,crawl_mode_parse_robots)

爬虫类动态fuzz扫描(-cmdf,crawl_mode_dynamic_fuzz)

fuzz模式(-fm,fuzz_mode)

fuzz单个字典(-fmlsd,fuzz_mode_load_single_dict)

fuzz多个字典(-fmlmd,fuzz_mode_load_mult_dict)

fuzz标签(-fml,fuzz_mode_label)

请求优化选项(RequestHandler)

自定义请求超时(-rt,request_timeout)

自定义请求延时(-rd,request_delay)

限制单个目标主机协程数扫描(-rl,request_limit)

限制重试次数(-rmr,request_max_retries)

http持久连接(-rpc,request_persistent_connect)

自定义请求方法(-rm,request_method)(get、head)

302状态处理(-r3,redirection_302)(是否重定向)

自定义header

自定义其他header(-rh,request_headers)(解决需要401认证)

自定义ua(-rhua,request_header_ua)

自定义cookie(-rhc,request_header_cookie)

字典处理选项(PayloadHandler)

字典处理(payload修改-去斜杠)

字典处理(payload修改-首字符加斜杠)

字典处理(payload修改-单词首字母大写)

字典处理(payload修改-去扩展)

字典处理(payload修改-去除非字母数字)

响应结果处理模块(ResponseHandler)

跳过大小为x字节的文件(-ss,skip_size)

自定义404页面(-c4p,custom_404_page)

自定义503页面(-c5p,custom_503_page)

自定义正则匹配响应内容并进行某种操作

自定义正则匹配响应(-crp,custom_response_page)

某种操作(暂时未定义)

输出结果为自定义状态码(-rsc,response_status_code)

输出payload为完整路径(默认输出完成url)

输出结果展示content-type

自动去重复保存结果

状态处理模块(StatusHandler)

状态显示(等待开始、进行中、暂停中、异常、完成)

进度显示

状态控制(开始、暂停、继续、停止)

续扫模块(暂未配置)

断点续扫

选行续扫

日志记录模块(ScanLogHandler)

扫描日志

错误日志

代理模块(ProxyHandler)

单个代理(-ps,proxy_server)

代理池

调试模式选项(DebugMode)

debug(--debug)

检查更新选项(CheckUpdate)

update(--update)

默认字典文件

字典文件存放在项目根目录中的data文件夹中

dict_mode_dict.txt “字典模式”字典,使用dirsearch默认字典

crawl_mode_suffix.txt “爬虫模式”字典,使用FileSensor默认字典

fuzz_mode_dir.txt “fuzz模式”字典,使用DirBuster默认字典

fuzz_mode_ext.txt “fuzz模式”字典,使用常见后缀制作的字典

dictmult 该目录为“字典模式”默认多字典文件夹,包含:BAK.min.txt(备份文件小字典),BAK.txt(备份文件大字典),LEAKS.txt(信息泄露文件字典)

fuzzmult 该目录为“fuzz模式”默认多字典文件夹,包含:fuzz_mode_dir.txt(默认目录字典),fuzz_mode_ext.txt(默认后缀字典)

已知缺陷

“爬虫模式”只爬取了目标的当前页面,用于生成动态字典。项目将来会将“爬虫模块”与“生成动态字典功能”分离。

关于bruter.py第517行bar.log.start()出错。解决方案:请安装progressbar2。卸载progressbar。防止导入同名模块。感谢某位表哥提醒。

执行命令:

python3 -m pip uninstall progressbar

python3 -m pip install progressbar2

维护工作

若使用过程中出现问题,欢迎发issue

本项目正在维护,未来将会有新的功能加入,具体参照“TODO”列表,未打勾项

致谢声明

dirmap在编写过程中,借鉴了大量的优秀开源项目的模式与思想,特此说明并表示感谢。

联系作者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值