anTtutu / DynaScan

实现动态字典渲染、动态结果判断、自动命中记录、的敏感文件扫描器

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

DynaScan (戴拿 )

dynamic Weak File Scanner 动态敏感文件扫描器 

本工具整体架构已迭代完毕,如果您有自己的字典文件,那现在就开始使用吧!!!

By NOVASEC && WINEZER0

0、前提摘要

0.1、严正声明:

本工具仅用于合法范围内进行企业防御测试,请勿用于违法活动, 否则所有产生后果由使用者自身负责!!!

本团队任何技术及文件仅用于学习研究,请勿用于任何违法活动,感谢大家的支持!!!

0.2、技术支持

欢迎大家提交扩展需求、Issue、命中记录文件、技术支持、使用反馈

如果我未及时回复您的信息,请您在NOVASEC公众号后台留言,或直接微信搜索[WINEZER0 酒零]

项目时间开源较短,正在快速迭代中,请右上角选择关注本项目的更新

测试批量扫描2000个springboot站点,目前一切运行正常。

0.3、更新记录

20230417 【优化代码】优化代码格式、修复小BUG

20230411 【增加脚本】format_dict.py 格式化目录字典下的字典 (统计频率+不可见字符去除)
20230411 【重构代码】修改HTTP响应模块及其他逻辑配置

更多更新记录参考 历史更新记录.md

0.4、TODO

必选 优化常用的根目录敏感文件字典

1、程序说明

1.0、结果文件位置

1.日志文件路径及说明

格式1:runtime/runtime_{时间戳}{module分类}.log
格式2:runtime/runtime_{module分类}.log

module类分:
info  正常信息 
debug 调试信息 
error 错误信息(需要关注)

2.结果文件路径及说明

结果目录:result
格式1:result_path = "{结果目录}/{主机名}_{module分类}_{时间戳}.csv"
格式2:result_path = "{结果目录}/{主机名}_{module分类}.csv"
格式3:result_path = "{结果目录}/{module分类}_{时间戳}.csv"
格式4:result_path = "{结果目录}/{module分类}.csv"

module选项:
result 正常结果的项目(需要关注)
manual 需要手动访问测试的项目(需要关注)
error  发生编码等错误信息(其中需要手动测试的项目会写入到manual)
ignore 被404等静态特征及响应内容对比的动态特征排除的项目

3.命中记录文件路径及说明

runtime/runtime_visited.log  记录已完成扫描的目标,实现断点续传。

1.1、程序开发目的

1. 基于网站路径【深入的、动态的】检测指定目录下的敏感文件,并支持自动过滤大部分不存在的路径。

2. 开发前主要关注于根目录下的备份文件扫描,但对于根目录下其他敏感文件也可以完美支持。

3. 支持自动分割带有多个目录层级的为多个基本URL进行扫描,但不支持自动递归目录进行扫描。

1.2、功能描述:

1. ​    能够根据特定的规则生成动态字典文件,主要是实现动态替换(日期、域名、路径等)属性。

2. ​    能够根据响应情况,自动筛选出不存在的文件,减少扫描过程中的误报。

3. ​    能够自动处理字典的编码逻辑,自动编码访问中文和特殊字符命名的路径。

4. ​    能够记录程序的详细日志输出,辅助单独的结果文件进行判断。

5. ​    添加字典频率筛选功能,仅加载频率在某一个阈值范围的字典  [新增功能]

6. ​    支持简单分析命中的URL,并自动加入hit_xxx.lst加入规则字典  [新增功能]

7. ​    更多功能请查看更新记录

2、工具特点

2.1、扫描字典突出优势

1、支持多种动态规则来动态生成扫描路径

(通过基本变量替换+因变量替换+解析正则规则+解析自定义规则实现)。
(因变量支持域名、路径和自定义,基本变量支持从文件中读取替换。)
(由于规则解析的格式需要,因此对字典内容存在格式要求,具体规则编写办法参考下文)

2、扫描字典添加支持多种方案,不同的需求可以添加到不同的字典目录中。

1、支持添加直接拼接到URL后的字典
2、支持笛卡尔组合的目录和字典)
3、不同目录下的字典在拼接到URL时,有不同的处理方式,具体参考下文

2.2、HTTP请求配置

    1、对输入的目标URL自动进行格式分析、自动访问检测和协议头自动判断功能。
​       简单输入——URL或URL文件,支持检测目标是否可以访问
​       扩展输入——自动分析处理HOST格式[IP:PORT,Domain],自动检测分析请求协议

​    2、默认启用中文路径或特殊字符会添加分别以【gb2312、utf-8】作为基础编码进行URL编码。

​    3、请求时大量的参数配置在setting.py中有描述和支持,用户可自定义大部分的参数配置。

​    4、对已经访问过的URL可以进行过滤,不进行多次扫描。

​    5、对输出的多级URL可选拆分为多个目标URL。
​        情景1:直接获取用户输入的URL作为目标,拼接URL+字典路径进行扫描。 
​        情景2:分别获取http://HOST:PORT、http://HOST:PORT/XXX/、http://HOST:PORT/XXX/YYY/等多个层级作为目标,然后拼接目标进行扫描。

​    6、支持自动进行Refer头更新、HOST头更新,及配置Cookie等请求参数

2.3、HTTP响应配置

1、有效响应结果筛选可以选择多种筛选方案:

1、基本判断规则:
1.  响应状态码丢弃列表,判断响应状态码是否在丢弃列表内。
2、动态判断基准:
1.  响应内容前10字节,判断是否与随机测试路径响应内容的前十字节是否相同。
2.  响应内容Hash,判断是否与随机测试路径的响应全文Hash相同。
3.  响应内容实际返回大小,判断是否与随机测试路径的响应内容的实际返回大小相同。
4.  响应内容Content-Length,判断是否与随机测试路径的响应的Content-Length相同。
5.  响应内容Title,判断是否与随机测试路径的响应的标题字段相同。

更多使用配置参数详情参照 [setting.py]

3、字典目录结构

1. 所有字典默认存放在dict目录,其目录下存在4个目录(base_var,direct_path,group_folder,group_files),存放不同类型的字典文件。
2. 字典文件的后缀默认设置为【.lst】,默认只读取目录下该后缀的字典文件。(该参数在setting.py中可以自定义)
3. 如有需求,后续可考虑使用sqlite存储字典数据库,但是手动修改目录会变得复杂.
4、每一行字典支持追加 【<-->XXX】 字段用于表明字典频率,用于阈值筛选来决定是否加载该路径。

3.1、dict/base目录

base目录存放基础变量字典,每个基础变量字典用于自动替换字典规则中的对应基础变量(由文件名提取)。

3.1.1 base目录下字典文件命名和产生的基本变量:

字典文件名 file_name.lst ==> 删除后缀 == > file_name ==>变为基本替换规则的键 == > %file_name%

对应关系:
文件名【xxx.lst】其中的内容,会在初次规则渲染时【用字典内容】替换字典规则中的【%xxx%】变量

简单示例情景: 
direct目录下某个文件字典存在一行字典规则/admin.%backup_ext%
base目录下存在文件【backup_ext.lst】文件,该文件每一行内容是一个后缀【rar、zip、tar.gz、...】

3.1.2、base目录下字典文件的大致处理过程:

1、base目录下的字典文件【BACKUP_EXT.lst】会从文件名会提取出【%BACKUP_EXT%】作为替换关键字。
2、字典文件内容会在读取后转变为一个后缀列表 ['rar','zip',...]
3、字典文件名与内容会转变为一个替换字典 {"%BACKUP_EXT%": ['rar','zip',...],...}
4、然后会对后置列表内的每个元素的【{xxx=xx:xxxx}$】规则进行渲染。
5、然后在其他类型中进行直接替换,如【/admin.%BACKUP_EXT%】会变为【/admin.rar、/admin.zip、...】

3.1.3、base字典添加注意事项:

1、base字典目录下存放最基础的变量字典,每一行仅且支持一条[{xxx:xx=xxxx}$]格式的动态替换规则,不支持基础变量和因变量。
2、base字典目录下的字典文件命名【如xxx.lst】和其他目录下的字典规则中的基础变量【%xxx%】有强关联性。

3.2、dict/direct目录

3.2.1 direct目录下的字典介绍:

direct目录下的文件名无特殊的命名要求,会读取目录下所有符合定义的自定后缀的文件内容。

3.2.2、direct目录下的字典处理:

dict/direct 目录存放的字典的规则内容会被【规则解析+基本变量替换+因变量替换】,然后直接添加到URL之后。

3.3、dict/floders 和 dict/files目录

3.3.1 dict/floders 和 dict/files目录下的字典介绍:

dict/floders目录下仅仅存放用于组合的目录字典文件,字典的每一行是一个目录,字典文件名命名除后缀外没有要求。
dict/files 目录下仅仅存放用于组合的文件名字典,字典的每一行是一个文件名,字典文件名命名除后缀外没有要求。

3.2.2、dict/floders 和 dict/files目录下的字典处理

1、从floders目录下的所有文件读取到一个floder列表,并对列表元素进行【规则解析+基本变量替换】
2、从files目录下的所有文件读取到一个file列表,并对列表元素进行【规则解析+基本变量替换】
3、对floder列表和file列表,会以/{floder}/{file}的格式进行遍历拼接(笛卡尔集)。

PS:所有的因变量替换实际是在循环目标的时候处理的,因为只有此时才能获取到所有的因变量

4、字典文件内容编写规则

参考 动态规则编写.md

也可直接使用常规的目录字典进行爆破

5、其他使用与配置信息

python3 DynaScan.py -h

usage: DynaScan.py [-h] [-u TARGET] [-f TARGET_FILE] [-p PROXY] [-t thread] [-d] [-v]

optional arguments:
  -h, --help       show this help message and exit
  -u TARGET        指定扫描目标URL|目标URL文件, Example: http://www.baidu.com | target.txt
  -d debug         显示程序运行时的所有调试信息,默认关闭


Examples:
  python3 DynaScan.py -u http://www.baidu.com
  python3 DynaScan.py -u target.txt


  其他控制细节参数请通过Setting.py进行配置

6、程序参考说明

渲染规则部分主要参考weakfilescan,另外修复Python3环境的一些错误,并分离了因变量和基本变量的替换。

weakfilescan原版请访问 https://github.com/ring04h/weakfilescan

NEED STAR And ISSUE

1、右上角点击Star支持更新.
2、ISSUE或NOVASEC提更新需求

NOVASEC

About

实现动态字典渲染、动态结果判断、自动命中记录、的敏感文件扫描器


Languages

Language:Python 100.0%