https://github.com/alwaystest18/hbit
一款信息收集的缝合工具,用到了以下工具
shuffledns子域名枚举,根据配置可递归枚举
subfinder被动收集子域名
alterx根据已知子域名规律生成字典
cdnCheckercdn识别
mapcidr根据ip地址自动生成网段格式
naabu端口扫描
httpxhttp服务存活检测
hostCollisionhost碰撞
程序输出以下文件:
all_Domains_{domain} 对应域名下的全部子域名 示例:sub.test.com
all_Sites_{domain} 对应域名下的全部http站点 示例:https://sub.test.com:8443
domains_info_{domain} 子域名及对应ip地址,可根据ip地址反查相关域名,便于确认资产 示例:sub.test.com:1.1.1.1
ip_range_{domain} 根据已知资产生成的ip段范围 示例:1.1.1.0/24
open_ports_{domain} 对应域名下的资产开放端口信息 示例:sub.test.com:3389
private_domains_{domain} 如果存在解析ip为内网域名会产生此文件,便于进一步做host碰撞 示例:private.test.com
Host_Collision_{domain} 如果存在host碰撞成功的内网域名会产生此文件 示例:url:http://1.1.1.1 host:private.test.com title:[test] Length: 666
相比其他信息收集类的工具,本工具最大的缺点就是慢,经过测试大部分域名的信息收集流程需要(10min~40min),部分超大企业,可能需要几个小时,影响运行速度有因素主要有以下几点:
git clone https://github.com/alwaystest18/hbit.git
cd hbit
docker build -t hbit .
部署massdns
mkdir /tools
wget https://github.com/blechschmidt/massdns/archive/refs/tags/v1.0.0.tar.gz
tar zvxf v1.0.0.tar.gz
cd massdns-1.0.0/
make
ln -s /tools/massdns-1.0.0/bin/massdns /usr/bin/massdns
部署subfinder
go install -v github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest
部署shuffledns
go install -v github.com/projectdiscovery/shuffledns/cmd/shuffledns@latest
部署mapcidr
go install -v github.com/projectdiscovery/mapcidr/cmd/mapcidr@latest
部署alterx
go install github.com/projectdiscovery/alterx/cmd/alterx@latest
部署naabu
go install -v github.com/projectdiscovery/naabu/v2/cmd/naabu@latest
部署httpx
go install -v github.com/projectdiscovery/httpx/cmd/httpx@latest
部署cdnChecker
git clone https://github.com/alwaystest18/cdnChecker.git
cd cdnChecker/
go install
go build cdnChecker.go
部署hostCollision
git clone https://github.com/alwaystest18/hostCollision.git
cd hostCollision/
go install
go build hostCollision.go
部署hbit
git clone https://github.com/alwaystest18/hbit.git
cd hbit/
go install
go build hbit.go
Usage of ./hbit:
-c string //非必选参数,指定配置文件路径,默认为config/config.yaml
config file path (default "config/config.yaml")
-df string //必选参数,指定需要收集信息的域名列表文件路径,文件中每行一个域名
domain list file
-i string //非必选参数,用来导入其他方式收集到的域名,指定域名列表文件路径,文件中每行一个域名
import domains list file
-wf string //非必选参数,跳过指定域名资产,用来指定不希望去枚举的子域名列表文件,比如qq的qzone.qq.com,枚举的话实际意义不大,并且会浪费很多时间
white list file
首先需要在hbit目录创建domain.txt文件,将待收集信息的域名写入,每行一个分隔
docker run -it --rm -v ./reports:/tools/hbit/reports -v ./domain.txt:/tools/hbit/domain.txt -v ./provider-config.yaml:/root/.config/subfinder/provider-config.yaml -v ./config/config.yaml:/tools/hbit/config/config.yaml hbit /bin/bash -c "cd /tools/hbit && ./hbit -df domain.txt"
./hbit -df domain.txt //domain.txt根据实际情况替换
部分配置对结果会产生较大影响,默认配置取一个覆盖率与时间的平衡,针对特定目标,大家可以根据配置自行优化来达到最理想的效果
global:
RecursionDepth: 3 #递归深度,默认为3,即域名为a.com,递归到x.x.x.a.com,也就是我们常说的四级域名,根据目标实际情况大家可以把此值继续增大,但大量的递归也意味着速度更慢
MaxBigDictEnumNum: 20 #如果存在子域名数量大于设定值,则先对每个子域名小字典枚举,然后对存在下级子域名的域名做大字典枚举,避免对所有子域名使用大字典枚举增加耗时。小字典毕竟覆盖有限,大家如果为了更全的结果接受多花费一些时间的话,可以把此项值调大
shuffledns:
ResolversFile: '/tools/dnsVerifier/resolvers.txt' #dns服务器文件,更多优质的dns服务器对域名枚举的速度起到非常大的作用,docker中会使用我的另一款自研程序https://github.com/alwaystest18/dnsVerifier筛选,大家有更优质的dns资源可以自行替换
TrustResolversFile: '/tools/hbit/trustDns' #可信dns服务器文件,部分dns服务器会产生一些垃圾数据,因此跑出来的域名要经过可信dns过滤一遍,大家有其他完全可信dns服务器可以添加到此文件,节省过滤的时间
BigWordListFile: '/tools/dict/domain_20000' #域名枚举大字典,好的字典对结果的影响不言而喻,比较小的目标我都用40w行的字典跑
SmallWordListFile: '/tools/dict/small_domain_dict' #域名枚举小字典,道理同上,大家根据实际情况替换字典文件
RateLimit: 10000 #家庭宽带建议调整至200,否则可能因流量过大引起断网,网络好的可以继续往大调整
cdnchecker:
ResolversFile: '/tools/cdnChecker/resolvers_cn.txt' #dns服务器文件,最好是国内节点,否则会影响cdn识别准确率,毕竟从国外解析国内cdn的域名,ip段可能是相同的,就会产生误报
CdnCnameListFile: '/tools/cdnChecker/cdn_cname' #cdncname文件,已知cdn的cname大家都可以自行往里加
alterx:
LimitNum: 1000000 #alterx生成子域名字典最大行数,对于一些比较大的目标(子域名1000+),可以适当调大此值,不过行数越多也代表时间越久
naabu:
RateLimit: 1000 #速率限制,家庭宽带建议调整至200,否则可能因流量过大引起断网,网络好的可以继续往大调整
MiniScanPorts: '80,443' #端口扫描最小范围,全部站点使用此范围扫描,对于用了cdn的,往往就是这两个端口,不会有22 3389这种,所以配置太多只会影响速度
LargeScanPorts: '80,81...60443' #端口扫描大范围,仅用于未使用cdn站点,如果设置范围过大,比如1-65535,虽然会增加资产检出率,但严重影响速度