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

快速使用

输入目标

单目标,默认为http

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

python3 dirmap.py -i 192.168.1.1 -lcf

子网(CIDR格式)

python3 dirmap.py -i 192.168.1.0/24 -lcf

网络范围

python3 dirmap.py -i 192.168.1.1-192.168.1.100 -lcf

文件读取

python3 dirmap.py -iF targets.txt -lcf

targets.txt中支持上述格式

结果保存

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

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

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

高级使用

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

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

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

dirmap.conf配置详解

#递归扫描处理配置

[RecursiveScan]

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

conf.recursive_scan = 0

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

conf.recursive_status_code = [301,403]

#URL超过这个长度就退出扫描

conf.recursive_scan_max_url_length = 60

#这些后缀名不递归扫

conf.recursive_blacklist_exts = ["html",'htm','shtml','png','jpg','webp','bmp','js','css','pdf','ini','mp3','mp4']

#设置排除扫描的目录。默认配置空。其他配置: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

#用于生成动态敏感文件payload的后缀字典

conf.crawl_mode_dynamic_fuzz_suffix = "crawl_mode_suffix.txt"

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

conf.crawl_mode_parse_robots = 0

#解析html页面的xpath表达式

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

#是否进行动态爬虫字典生成。默认配置1,开启爬虫动态字典生成。其他配置:e.g:关闭:0;开启:1

conf.crawl_mode_dynamic_fuzz = 1

#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页面。默认配置True,开启自动检测404.其他配置参考e.g:True;False

#conf.auto_check_404_page = False

conf.auto_check_404_page = True

#自定义匹配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初始化

自动解析处理输入格式( -i,inputTarget)

IP

Domain

URL

IP/MASK

IP Start-End

文件读入(-iF,inputLocalFile)

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页面(-ac4p,auto_check_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在编写过程中,借鉴了大量的优秀开源项目的模式与思想,特此说明并表示感谢。

联系作者

cansina 目录_一个高级web目录扫描工具,功能将会强于DirBuster、Dirsearch、cansina、御剑。...相关推荐

  1. web目录字典_dirmap 一个高级web目录、文件扫描工具

    Dirmap 一个高级web目录扫描工具,功能将会强于DirBuster.Dirsearch.cansina.御剑 需求分析 经过大量调研,总结一个优秀的web目录扫描工具至少具备以下功能:   并发 ...

  2. 【安全工具】全!十大Web漏洞扫描工具

    十大Web漏洞扫描工具 Acunetix Web Vulnerability Scanner[( 简称AwVS ) AwVS是一款知名的Web网络漏洞扫描工具,它通过网络爬虫测试你的网站安全,检测流行 ...

  3. 2019年WEB漏洞扫描工具和软件前十名推荐

    这些工具都有助于发现漏洞,从而最大限度地提高测试人员的时间和效率.这些工具,2019年更新,也可用于寻找漏洞. 为何扫描? 这资源是什么? Web应用程序对黑客具有极大的吸引力,并且出于百万种不同的原 ...

  4. Web漏洞扫描工具(批量脱壳、反序列化、CMS)

    一.什么是Web漏洞扫描工具 即是指"扫描Web应用以查找安全漏洞(如跨站脚本,SQL注入,命令执行,目录遍历和不安全服务器配置)的自动化工具",其中许多可能是由不安全或不正确的编 ...

  5. 十大web安全扫描工具

    本文来源:绿盟整理  <十大web安全扫描工具> 十大web安全扫描工具 扫描程序可以在帮助造我们造就安全的Web 站点上助一臂之力,也就是说在黑客"黑"你之前, 先测 ...

  6. Web 漏洞扫描工具 AppScan 和 AWVS 使用方式

    Web 漏洞扫描工具 AppScan 和 AWVS 使用方式 文章目录 Web 漏洞扫描工具 AppScan 和 AWVS 使用方式 0x01 AppScan 基本操作 1.AppScan 简介 1. ...

  7. Sitadel :Web安全扫描工具

    Sitadel Web安全扫描工具基本上是WAScan的更新,使其与python兼容,它为您提供了更大的灵活性,使您可以编写新模块并实现新功能: 前端框架检测 内容交付网络检测 定义风险级别以允许进行 ...

  8. python 漏洞扫描_Python脚本实现Web漏洞扫描工具

    这是去年毕设做的一个Web漏洞扫描小工具,主要针对简单的SQL注入漏洞.SQL盲注和XSS漏洞,代码是看过github外国大神(听说是SMAP的编写者之一)的两个小工具源码,根据里面的思路自己写的.以 ...

  9. win10下web漏洞扫描工具:AWVS安装教程

    01 AWVS安装 windows上安装其实很简单,以安装AWVS12版本为例子,具体步骤如下: 01 双击exe安装: 02 点击"Next": 03 选择我同意: 04 设置用 ...

最新文章

  1. JavaScript 运行机制详解:Event Loop——续
  2. 前牙正常覆盖是多少_个性化舌侧矫治器的前牙转矩控制技巧——赵志河教授
  3. 在android上面让TextView 过多的文字实现有滚动条 scrollview
  4. 使用 Sphinx 撰写技术文档并生成 PDF 总结
  5. 氧气中国·创业创新大赛企业服务专场
  6. 22.jsp动作元素
  7. arm linux 存储,linux arm的存储分布那些事
  8. HashMap死锁原因及替代方案
  9. java 注解(annotation)基础学习
  10. 2013数学建模B题
  11. 机器学习(4)——弱监督学习
  12. 计算机软件研究方法与技术路线,项目的研究方法与技术路线
  13. java不想被gc,Java GC 必知必会
  14. 研发管理02----嵌入式硬件设计流程之完善
  15. ARCGIS:软断裂线、硬断裂线、断层等名词和ARCGIS 如何操作
  16. 算力狂热时代的冷静之道:宁畅总裁秦晓宁分享企业的算力最优解
  17. OpenCv笔记(五)--图像分割与分水岭算法
  18. 字符编码简介:ASCII,Unicode,UTF-8,GB2312及Unicode和UTF-8如何转化
  19. 3DGIS第四章 视点相关的实时选择性细化
  20. 易微联vs602m蓝牙双模说明引脚定义

热门文章

  1. php 通过 curl 进行GET/POST(包含鉴权)请求
  2. 传统集卡变成无人驾驶,需要做出哪些改变
  3. FIF小组ASP互动教程作业答案
  4. R语言dplyr包summarise_all函数计算dataframe数据中指定因子变量的水平的个数(levels)以及缺失值的个数(missing values)
  5. 系统服务器无法理解您的搜索词.,关于360浏览器记录用户的百度搜索记录、常搜词问题2...
  6. “电子身份证”引发网游产业“新革命”
  7. 【Axure视频教程】固定中继器表格首尾列
  8. swagger使用详解
  9. LTE(4G) RRC消息流程
  10. vim之vundle