前言
信息搜集真的就只是找找子域名,扫扫目录和端口这么简单吗?万字长文带你窥探信息收集真正的艺术!
收集流程概述
[0]自动化信息收集阶段
1.--工具自动化信息收集
[1]资产发现阶段
1.--组织信息收集
2.--主域名收集
3.--子域名收集
[2]资产扩展阶段
1.--端口收集
2.--C段收集
[3]资产梳理阶段
1.--测活+指纹识别
[4]自动化扫描阶段
1.--漏洞扫描器测试
[5]重点目标针对收集阶段
1.--架构信息收集
2.--源码信息收集
3.--网站基本信息
(1)----语言
(2)----数据库
(3)----web容器
(4)----操作系统
4.--网站深度信息收集
(1)----前端源码
(2)----目录
(3)----端口
(4)----js接口
(5)----快照
(6)----插件
(7)----旁站
5.--网盘信息
6.--社工信息
7.--小程序信息
8.--APP信息
[0]自动化信息收集阶段:使用工具自动进行信息收集,与手工结合同时进行最佳
自动化信息收集
在手工信息收集之前,建议可以使用一下知名的自动化信息收集工具,帮助我们快速的进行大致的信息收集,也能与手工信息收集结果相互补充
没什么好说的,推荐几款工具,选择一两个觉得趁手的会用就行 我比较喜欢用ARL,尤其是它的文件泄露功能往往能帮我快速撕开口子,由于灯塔之前跑路了,所以要用第三方备用库
[1]资产发现阶段:收集出目标主体大部分的资产
组织结构收集
简介
组织结构收集就是摸清目标有哪些子公司,分别处于整体什么位置,股权分别占多少比重,与主公司的结构关系等等。由于小型目标结构组织简单,是单独存在的,没有收集阻止结构的必要。所以,这个组织结构的收集是针对于比较庞大的目标的,比如大型集团、企业,大型政党单位,大型高校。
作用
那么为什么要收集目标的组织结构呢?以hw为例,假设目标是一个大型集团,收集目标的组织结构有以下作用:
-
更全面的收集到目标的所有子公司,从而得到更全的主域名,这意味着有更广的攻击面
-
摸清了组织结构,可以采用自下而上的打法:A公司防守很严,暴露面少很难突破,那么如果收集了组织结构就可以去找A公司的子公司作为突破口,因为子公司一般没有其主公司安全性高,而且子公司与主公司有些资产(比如办公环境,内部业务环境等等)很有可能处于同一个内网,于是只要拿下了子公司的权限,就有可能通过内网横向移动拿下主公司的权限,从而轻松拿下整个目标
-
摸清了组织结构,还可以采用自上而下的打法:如果已经拿下了A公司的权限,也收集了组织结构信息,那么还可以进一步攻击A公司的子公司。因为A公司中很有可能就保存了子公司的一些重要敏感数据,密码凭据等等,而且内网也很可能是连通的,也可以尝试内网横向移动,从而扩大渗透成果,爽拿数据分和权限分
收集方法
股权收集法
以华为为例,使用爱企查看股权穿透图,收集子公司信息,(更具体的信息需要开会员)
股权占比小于50%的就不用看了,因为关联性已经不太强了
这样我们就能摸清目标在整个主体中处于什么位置,以及与其他公司的关系,获得了更多的子公司名。接下来,只需手动筛选出所有的股权占比大于50%的子公司名字,全部记录下来存为company.txt,还有搞清楚目标在整个主体中处于什么位置,组织结构的收集就基本完成了
关键人物收集法
还可以从关键人物出发,去寻找更多子公司信息
比如从华为的法人入手,查看他代表的公司:
以及从华为的高管入手:
得到的结果能与上面提到的股权收集法互相补充
到此我们就得到了目标集团的所有股权占比较大的子公司名,保存为company.txt,后面有用
# company.txt
# 为了便于演示,我就只列举几个
华为技术有限公司
华为投资控股有限公司
深圳市华为电气股份有限公司
深圳市华为技术软件有限公司
......
工具
主域名收集
收集主域名就是利用前面组织结构收集到的子公司名company.txt,进一步分别收集他们公司的主域名,这是环环相扣的,只有组织结构收集收集得越全,收集到的主域名才会越多,攻击面才越广,才越有可能拿下目标
ICP备案
官网查询接口
在中国想正规搭建网站都是需要ICP备案的,于是我们可以利用官方ICP备案查询公司名,得到其主域名
非常的多,点击详情就能看到该公司的主域名
该方法适合于子公司比较少的情况,因为该官网查询接口,有图形汉字验证码,不太好批量提取出子公司的主域名,只能手动复制下来,适合于小型目标
第三方程序查询接口
这个第三方程序查询接口好处是无验证码,可以批量提取出所有子公司的主域名,适用于大型目标,但是缺点是没有官网查询接口更新的快
使用icpsearch工具就能批量爬下来了
icpsearch -f compoany.txt
得到的结果再使用Sublime Text正则匹配一下域名就行了,Ctrl+F 输入正则表达式,勾选Find All选中全部,再右键复制全部
([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}
这样就提取出了域名
小蓝本
使用小蓝本也可以快速收集主域名,只不过也不能一次性的查所有子公司的主域名,不过可以写脚本爬取
来到知识产权,一键获取ICP备案
手动复制一下,保存本地,再使用Sublime Text正则提取出主域名
到此我们就通过company.txt收集到了很多的子公司的主域名,保存为domain.txt,后面有用
# domain.txt
androidga.com
www.hwtrip.com
hwtrip.com
www.huaweils.com
huaweils.com
www.smartcom.cc
smartcom
......
工具
-
ICP备案官网:https://beian.miit.gov.cn/
-
ICP第三方查询:https://www.beianx.cn/
-
ICP批量爬取工具:https://github.com/A10ha/ICPSearch
-
Sublmie Text:https://www.sublimetext.com/
子域名收集
网络测绘引擎
-
fofa
domain ="主域名" || cert="公用名" || cert="组织名1" || || cert="组织名2" || cert="组织名3" ......
我习惯使用fofa查询,其他网络测绘搜索引擎也可以
domain是通过域名查,能查到web资产与非web资产,cert是通过证书查,只能查web资产,二者使用" || "结合拼接,会得到更多的子域名资产
综合语法
比如还是以华为为例:huaweiyun.com
domain="huaweiyun.com"
仅仅使用domain ="主域名"能查到4条子域名,如果加上cert证书查询语法呢?
domain="huaweiyun.com" || cert="huaweiyun.com"
资产直接多了一倍!那么可想而知,如果使用网络测绘引擎收集资产不使用cert查询语法的话,会错过很多的隐蔽资产
那么到这里就结束了吗?并没有
刚才我们只是使用了domain ="主域名" || cert="公用名"还没有考虑到其他公用名,和更多的组织名!
注意!公用名大多数时候就是网站的主域名或子域名,而同一个主域名的资产可能有多个组织名,于是我们都要尽可能多的找出来
怎么找公用名和组织名呢?我的方法是手动翻找https站点的证书
比如,点击查看几个https站点的证书详情
这里就找到了新的公用名和组织名!
huaweicloud.com
Huawei Software Technologies Co., Ltd.
继续拼接到fofa的cert语法中去,看看会发生什么?
domain="huaweiyun.com" || cert="huaweicloud.com" || cert="Huawei Software Technologies Co., Ltd."
好家伙直接干到了89830条!不得不说是真的很全,但是这么多资产也不方便测试,这里只是说可以用这种cert查询方式收集到更多的资产,扩大攻击面,实际肯定要根据情况而定,要学会灵活变通。像华为这种超级大型企业,资产本身就不少,所以不太适合使用证书查询,因为太多了,更多的适用于资产在几千条以内的中小型企业、政党单位、高校等等
批量
相信师傅注意到了,我们上面不是收集了大量的domain.txt吗,但是刚刚演示时只选取了其中一条来查询子域名,如何批量查询domain.txt的全部子域名呢?我是这么做的:
写了一个脚本,读取domain.txt,直接批量拼接成domain ="主域名1" || cert="公用名1" || domain ="主域名2" || cert="公用名2" || domain ="主域名3" || cert="公用名3" ||……这种格式,再丢到fofa去查询
为什么这样拼接呢,就是因为公用名大多数时候就是其主域名或子域名,使用"||"连接就能查到更多的资产了
脚本-join.py
python join.py
# 读取 domain.txt 文件并拼接数据
def read_and_concatenate(file_path):
try:
with open(file_path, 'r') as file:
# 读取文件中的每一行,去掉空格和换行符
lines = [line.strip() for line in file if line.strip()]
# 使用 ' || ' 连接每行数据
result = ' || '.join([f'domain="{line}" || cert="{line}"' for line in lines])
print(result)
except FileNotFoundError:
print(f"文件 {file_path} 未找到。")
except Exception as e:
print(f"发生错误: {e}")
# 调用函数并传入文件路径
read_and_concatenate('domain.txt')
-
域名太多只演示部分
domain="www.openinula.net" || cert="www.openinula.net" || domain="www.huaweiirad.com" || cert="www.huaweiirad.com" || domain="www.bescloud.com.cn" || cert="www.bescloud.com.cn" || domain="www.bescloud.cn" || cert="www.bescloud.cn" || domain="www.gneec3.cn" || cert="www.gneec3.cn" || domain="www.gneec5.cn" || cert="www.gneec5.cn" ||domain="www.gneec4.cn" || cert="www.gneec4.cn" ||domain="www.appcubecloud.com.cn"||cert="www.appcubecloud.com.cn" || domain="www.besclouds.com.cn" || cert="www.besclouds.com.cn"||domain="www.besclouds.cn"||cert="www.besclouds.cn" || domain="www.gtscsm.com" || cert="www.gtscsm.com" || domain="www.appcubecloud.cn" || cert="www.appcubecloud.cn"|| domain="www.vrbtcloud.cn" || cert="www.vrbtcloud.cn"
但是师傅也发现了这样还缺少通过组织名查询,于是我们还要手动地去翻找https站点的证书,或者再结合接下来"英文证书查询"方法,手动复制出公用名+组织名,也拼接到cert语法中。因为大量资产的公用名+组织名都是一致的,所以手动就行了
domain="www.openinula.net" || cert="www.openinula.net" || domain="www.huaweiirad.com" || cert="www.huaweiirad.com" || domain="www.bescloud.com.cn" || cert="www.bescloud.com.cn" || domain="www.bescloud.cn" || cert="www.bescloud.cn" || domain="www.gneec3.cn" || cert="www.gneec3.cn" || domain="www.gneec5.cn" || cert="www.gneec5.cn" ||domain="www.gneec4.cn" || cert="www.gneec4.cn" ||domain="www.appcubecloud.com.cn"||cert="www.appcubecloud.com.cn" || domain="www.besclouds.com.cn" || cert="www.besclouds.com.cn"||domain="www.besclouds.cn"||cert="www.besclouds.cn" || domain="www.gtscsm.com" || cert="www.gtscsm.com" || domain="www.appcubecloud.cn" || cert="www.appcubecloud.cn"|| domain="www.vrbtcloud.cn" || cert="www.vrbtcloud.cn" || cert="huaweicloud.com" || cert="Huawei Software Technologies Co., Ltd."
注意
all模式开启
使用网络测绘引擎,还需要注意的是,不要忘记开启all模式,因为查询结果默认情况下只有一年内的结果,开启all模式就能查到更多的资产,更有概率发现隐蔽资产!
但是需要开会员,呜呜贵贵~
格式处理
导出fofa结果时有一个问题就是资产格式有点混乱、不够统一,比如这样
URL列中同时有https+域名的,又有https+ip的,还有不带http协议头的纯域名与纯ip的格式,这样不便于后面分别的信息收集,因为纯域名会用来做c段整理,纯ip用来端口扫描,带协议头的URL用来测活或者爬取js,漏扫等等……于是需要处理格式,把他们分离出来
还是使用脚本处理
脚本-format.py
输入input.txt-格式混乱的url列 ,输出subdomain-1.txt-子域名,url-1.txt-url。ip就不用分离了,fofa本身能导出格式整齐的ip列
python format.py
import re
import chardet
# 自动检测文件编码
def detect_encoding(filename):
with open(filename, 'rb') as file:
result = chardet.detect(file.read())
return result['encoding']
# 读取文件并处理内容
def process_file(input_file, subdomain_file, url_file):
encodi
4A评测 - 免责申明
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!
程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。
侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)