dddd/README.md

429 lines
11 KiB
Markdown
Raw Normal View History

2023-08-18 08:55:46 +02:00
# 工具简介
工具名称dddd带带弟弟是一款支持多种输入格式基于Fofa语法的主/被动指纹探测基于nuclei的可拓展的供应链漏洞探测工具。协助红队人员快速的信息收集测绘目标资产寻找薄弱点。
##### 本工具有如下特点:
1. 自动识别多种输入。支持域名、IP段、IP、URL、IP:Port、Domain:Port等多种格式。得到目标之后直接一股脑塞入即可**无需分类**。
2. 指纹识别采用fofa语法数据库存于人类阅读友好的Yaml格式文件内可以很方便的自己拓展新指纹。并且拥有主动探测路径库便于探测如nacos,druid等需要主动访问的资产。
3. 拥有指纹漏洞库,**只针对识别出指纹的目标打对应的Poc**。尽量避免无效识别极大提升扫描速度同时降低误报率。指纹漏洞库基于人类友好的Yaml可以很方便的自己拓展需要添加的漏洞。
4. 支持多种方式枚举子域名。子域名暴力破解,fofa,chaos,chinaz,hunter,quake,virustotal等等。
5. 具有TCP指纹识别功能避免错过非标准端口漏洞。如可正确识别33060端口的Mysql。
6. 可直接从Hunter中批量获取目标资产。如icp.name="xxxx",批量获取此单位备案资产,方便攻防演练快速筛选目标(快速占坑)。
7. 漏洞探测基于**nuclei**与nuclei社区的强大抛瓦贴贴。
8. HTML报表包含漏洞请求与响应。方便漏洞验证、截图。
# 主要功能
#### 信息收集
CDN识别
子域名枚举
ICMP/Ping存活探测
端口扫描
hunter/fofa导入资产
域名绑定资产枚举
#### 指纹识别
TCP Banner指纹识别
Web指纹识别
#### 漏洞探测
Nuclei Poc
Golang Poc
#### 其他功能
txt日志记录
HTML漏洞报表
# 使用说明
简单用法
```
./dddd -t 172.16.100.0/24 IP段扫描
# 默认漏洞报告名为 时间戳.html
./dddd -t "10.10.10.10" -o 123.html(扫描单个IP,并指定漏洞报告名为123.html。)
./dddd -t "172.16.100.1:80" (扫描特定IP特定端口)
./dddd -t "http://baidu.com" (扫描url)
./dddd -t "baidu.com" -sd (枚举子域名资产并进行扫描)
./dddd -t target.txt (从文件中读取目标)
```
其他用法
```
./dddd -t "baidu.com" -sd -nsf (只爆破枚举子域名资产,关闭被动枚举,并进行扫描)
./dddd -t "baidu.com" -sd -nsbf (枚举子域名资产,但不进行子域名爆破,并进行扫描)
./dddd -t "baidu.com" -sd -sbft 1000 (指定爆破子域名线程默认150)
./dddd -t "10.10.10.10" -p 1-65535 扫描10.10.10.10所有端口)
./dddd -t "10.10.10.10" -p 3306,3389 (只扫描33063389端口)
./dddd -t "192.168.0.1" -p 1-65535 -tcpt 5000 (指定端口扫描速度为5000并扫描全端口)
# 默认TCP扫描
./dddd -t 192.168.0.0/16 -p 1-65535 -st syn (调用masscan SYN扫描全端口并扫描)
./dddd -t "172.16.100.0/24" -Pn IP段扫描,禁Ping
./dddd -t "http://baidu.com" -proxy http://127.0.0.1:8080 (指定http代理扫描url)
# 攻防演练速过一遍企业备案资产
./dddd -t '"icp.name="百度"' -hunter (从hunter中获取备案机构为百度的目标默认取1000个)
./dddd -t '"domain="baidu.com"' -hunter -htpc 50 (指定查询页数为50一个100个共5000个)
./dddd -t "domain=\"baidu.com\"" -fofa (从fofa取100个baidu.com域名的目标)
./dddd -t "domain=\"baidu.com\"" -fofa -ffmc 10000 (指定最大数量为10000 默认100)
```
详细参数
```shell
SleepingBag@Mac dalaodddd % ./dddd -h
_ _ _ _
__| | __| | __| | __| |
/ _` | / _ `| / _` | / _` |
\__,_| \__,_| \__,_| \__,_|
_|"""""|_|"""""|_|"""""|_|"""""|
"`-0-0-'"`-0-0-'"`-0-0-`"`-0-0-'
dddd.version: 1.0
Usage of ./dddd:
-Pn
禁用主机发现功能(icmp,arp)
-ffmc int
Hunter 查询资产条数 Max:10000 (default 100)
-fofa
从fofa中获取资产,开启此选项后-t参数变更为需要在fofa中搜索的关键词
-gopt int
GoPoc运行线程 (default 50)
-htpc int
Hunter 最大查询页数 (default 10)
-htps int
Hunter 每页资产条数 (default 100)
-hunter
从hunter中获取资产,开启此选项后-t参数变更为需要在hunter中搜索的关键词
-ld
允许域名解析到局域网
-mp string
指定masscan路径 (default "masscan")
-nd
关闭主动指纹探测
-nsbf
关闭子域名爆破
-nsf
关闭被动子域名枚举
-o string
html格式输出报告
-p string
目标IP扫描的端口。 默认扫描Top1000
-pc int
一个IP的端口数量阈值,当一个端口的IP数量超过此数量此IP将会被抛弃 (default 300)
-proxy string
HTTP代理在外网可利用云函数/代理池的多出口特性恶心防守 例: http://127.0.0.1:8080
-psto int
TCP扫描超时时间(秒) (default 6)
-rod string
Set the default value of options used by rod.
-sbft int
爆破子域名协程数量 (default 150)
-sd
开启子域名枚举
-st string
端口扫描方式 tcp使用TCP扫描(慢),syn为调用masscan进行扫描(需要masscan依赖) (default "tcp")
-synt int
SYN扫描线程(masscan) (default 10000)
-t string
被扫描的目标。 192.168.0.1 192.168.0.0/16 192.168.0.1:80 baidu.com:80 target.txt
-tc int
TCP全连接获取Banner的线程数量 (default 30)
-tcpt int
TCP扫描线程 (default 600)
```
# 运行截图
### 命令行界面
![image-20230817180003936](assets/image-20230817180003936.png)
支持探测中文主机名修复fscan乱码
![image-20230818083645278](assets/image-20230818083645278.png)
### 漏洞报表
直观的漏洞报表
请求/响应包留存
![image-20230817175041903](assets/image-20230817175041903.png)
![image-20230817175243236](assets/image-20230817175243236.png)
数据库基础信息留存,方便漏洞验证/截图
![image-20230817175453532](assets/image-20230817175453532.png)
SMB列共享目录
![image-20230817175546241](assets/image-20230817175546241.png)
![image-20230818084411834](assets/image-20230818084411834.png)
# 配置
### 指纹
指纹数据库存于 ./config/finger.yaml
支持的指纹基础规则如下
```shell
header="123" //返回头中包含123
header!="123" //返回头中不包含123
header~="xxx" //返回头满足xxx正则
body="123" //body中包含123
body!="123" //body中不包含123
body~="xxx" //body满足xxx正则
body=="123" //body为123
server="Sundray" //返回头server字段中包含Sundray
server!="Sundray" //返回头server字段中不包含Sundray
server=="Sundray" //server字段为Sundray
title="123" //标题包含123
title!="123" //标题不包含123
title=="123" //标题为123
title~="xxx" //标题满足xxx正则
cert="123" //证书中包含123
cert!="123" //证书中不包含123
cert~="xxx" //证书满足正则
port="80" //服务端口为80
port!="80" //服务端口不为80
port>="80" //服务端口大于等于80
port<="80" //服务端口小于等于80
protocol="mysql" //协议为mysql
protocol!="mysql" //协议不为mysql
path="123/123.html" //爬虫结果中包含 123/123.html
body_hash="619335048" //响应体mmh3 hash为619335048
icon_hash="619335048" //icon mmh3 hash
status="200" //页面返回码为200
status!="200" //页面返回码不为200
content_type="text/html" //content_type包含text/html
content_type!="text/html" //content_type不包含text/html
banner="123" // TCP banner 包含123
banner!="123" // TCP banner中不含123
```
各类规则支持与(&&)或(||)非(!)任意组合。可使用括号。与fofa类似。
![image-20230817180845323](assets/image-20230817180845323.png)
这里拿Fortinet-sslvpn举例。
需要Web响应体中包含fgt_lang编写规则body="fgt_lang"
需要Web响应体中包含/sslvpn/portal.html编写规则body="/sslvpn/portal.html"
需要同时满足这两个条件才会被判定为Fortinet-sslvpn的资产将两个规则使用与(&&)连接就得到了这条指纹。
### API
若有被动枚举子域名、请求fofa、hunter等需求。请在./config/subfinder-config.yaml中配置API。
### 子域名字典
子域名字典位于./config/subdomains.txt
### 服务爆破字典
字典路径为./config/dict/
每行以"空格:空格"分割账号密码
```
root : 123456
root : admin
root : admin123
```
其中shirokeys.txt为shiro key字典
支持服务如下:
```
FTP
MSSQL
MYSQL
ORACLE
POSTGRESQL
RDP
REDIS
SMB
SSH
TELNET
SHIRO
MONGODB
MEMCACHED
MS17-010
JDWP
```
### 主动指纹
当一个应用不暴露在根路径时就需要主动去访问,这个时候需要配置主动指纹数据库。
路径在./config/dir.yaml
![image-20230817182401928](assets/image-20230817182401928.png)
配置也很简单,照着上边写就行。
这里拿Alibaba-Nacos举例子。当访问到http://host:port/nacos/且访问后识别到Alibaba-Nacos指纹后就被判断有效。
### 漏洞Poc编写
编写参考nuclei poc编写
https://nuclei.projectdiscovery.io/templating-guide/
Poc存放路径
./config/pocs
将poc写好后放入./config/pocs即可识别。
### 工作流
仅仅编写Poc并放入./config/pocs是不会正常运行Poc的。需要为此Poc配置指定的指纹本工具只有在匹配到目标指纹后才会调用这个Poc。
工作流存放目录
./config/workflow.yaml
![image-20230817183151312](assets/image-20230817183151312.png)
以solr为例。
当dddd识别到目标指纹为APACHE-Solr时就会在./config/pocs中寻找路径以
cves/2017/CVE-2017-12629.yaml
....
apache-solr-log4j-rce.yaml
结尾的poc调用。
如果我写好一个名为solr-rce.yaml的nuclei poc则应该在workflow.yaml的对应指纹的pocs下添加一行solr-rce.yaml。这样才能在识别到solr时调用到此poc。
type是拿来干什么的呢
比如这里有一个nacos他的路径是http://host:port/aaa/bbb/nacos/a.js
如果有root标签他会在 http://host:port/处打一次poc
如果有dir标签
http://host:port/aaa/
http://host:port/aaa/bbb/ (命中)
http://host:port/aaa/bbb/nacos/
下各打一次poc
如果有base标签在http://host:port/aaa/bbb/nacos/a.js下打一次poc
一般情况下root就能用若应用部署在二级目录下但poc是一级目录的poc就需要dir参数才能探测到二级目录下的洞。
# 免责声明
本工具仅面向**合法授权**的企业安全建设行为,如您需要测试本工具的可用性,请自行搭建靶机环境。
在使用本工具进行检测时,您应确保该行为符合当地的法律法规,并且已经取得了足够的授权。**请勿对非授权目标进行扫描。**
如您在使用本工具的过程中存在任何非法行为,您需自行承担相应后果,我们将不承担任何法律及连带责任。
在安装并使用本工具前,请您**务必审慎阅读、充分理解各条款内容**,限制、免责条款或者其他涉及您重大权益的条款可能会以加粗、加下划线等形式提示您重点注意。 除非您已充分阅读、完全理解并接受本协议所有条款,否则,请您不要安装并使用本工具。您的使用行为或者您以其他任何明示或者默示方式表示接受本协议的,即视为您已阅读并同意本协议的约束。
# 参考链接
https://github.com/shadow1ng/fscan
https://github.com/lcvvvv/kscan
https://github.com/lcvvvv/gonmap
https://github.com/projectdiscovery/nuclei
https://github.com/projectdiscovery/subfinder
https://github.com/projectdiscovery/httpx
https://github.com/projectdiscovery/naabu
https://github.com/chainreactors/gogo
https://github.com/zan8in/afrog