前言
无论是做渗透测试还是红队(Red Team)的工作,信息收集都是工作前期必不可少的一个环节。渗透测试的本质是信息收集,资产信息越多,可攻击面就越广,找到突破口的机会就越大。但随着安全行业的蓬勃发展,各类信息收集技术与工具层出不穷,令人眼花缭乱。以下总结本人在实际渗透工作中常用的信息收集方法和工具。鉴于不同场景与个人习惯差异,只有契合自身需求的才是最为适宜的。本文仅旨在阐述个人见解,期望各位师傅能够依据自身经验与认知,对文中内容进行批判性地思考与探讨。
声明
此文章中所涉及到的任何技术与工具仅可用于网络安全技术交流与学习,禁止用于任何违法犯罪行为,文章中提供的所有工具均为开源项目,安全性与兼容性请自行检查。
平台选择
关于渗透测试平台的选择,可能很多师傅会立刻想到Kali Linux,Kali Linux集成了很多知名渗透测试工具,确实是个非常优秀的渗透测试平台,但是根据个人使用习惯,我感觉Kali还是有一定的局限性,比如做代码审计、免杀这类需要用到IDE的工作时,还是略显笨拙。因此这里本人使用 Windows11 系统作为信息收集工作的主力机,Kali Linux 作为辅助工具。
企业产权收集
企业产权信息收集主要收集目标业务的产权信息,例如域名产权、APP与小程序的产权、员工信息、供应链信息等
在线平台
企业信息
天眼查[https://www.tianyancha.com/]
企查查[https://www.qcc.com/]
小蓝本[https://sou.xiaolanben.com/pc]
爱企查[https://aiqicha.baidu.com/]
通过查询企业产权信息,可以获得更多的攻击面,例如APP,域名等信息。
备案信息
工信部备案查询[https://beian.miit.gov.cn/]
ICP备案查询[https://www.beianx.cn/]
通过查询企业网站的备案号,也可以搜集到企业下的其他资产信息
Kali Whois查询
此外,也可以使用Kali Linux自带的whois工具进行备案信息的查询
whois xxx.com
网络空间搜索引擎
通过网络空间搜索引擎,可以搜索到一些被搜索引擎隐藏的资产,效率较高,并且能够直观地看到站点标题以及服务信息。
FOFA[https://fofa.info/]
钟馗之眼[https://www.zoomeye.org/?R1nG]
零零信安[https://0.zone/]
shodan[https://www.shodan.io/]
sensys[https://censys.com/]
鹰图[https://hunter.qianxin.com/]
360quake[https://quake.360.net/quake/#/index]
自动化资产收集-ARL
ARL(Asset Reconnaissance Lighthouse)资产侦察灯塔系统旨在快速侦察与目标关联的互联网资产,构建基础资产信息库。 协助甲方安全团队或者渗透测试人员有效侦察和检索资产,以攻击者视角持续探测资产风险,协助用户时刻洞察资产动态,掌握安全防护薄弱点,快速收敛攻击面。
下载地址:https://github.com/ki9mu/ARL-plus-docker
安装与使用文档:https://tophanttechnology.github.io/ARL-doc/
移动资产收集
当信息收集工作完毕后 Web 页面无从下手时,可以将目光转向移动应用平台,聚焦到 APP 应用和小程序上,移动平台使用便捷,用户量大,因此功能点就比较多,攻击面就越广。
APP应用
APP应用可以通过查询企业的知识产权获取,或者在各大应用商店搜索获取。
七麦APP软件搜索
七麦app搜索[https://www.qimai.cn/]
公众号信息
直接使用微信的搜一搜功能
或者使用搜狗微信搜索[https://weixin.sogou.com/]
小程序资产
一般中大型企业都有自己的小程序,通过支付宝微信等平台搜索可以获取到小i程序,或着关注公司运营人员,通过社工等方式获取小程序。
单一目标信息收集
前面通过收集了一些企业的资产信息,例如域名、app、小程序等资产,这些资产包括但不限于域名、IP、接口信息等,接下来就对这些单一的目标进行信息收集。
操作系统
TTL值
不同的操作系统的默认TTL值是不同的, 所以我们可以通过TTL值来判断主机的操作系统,但是当用户修改了TTL值的时候,就会误导我们的判断,所以这种判断方式也不一定准确。下面是默认操作系统的TTL:
1、WINDOWS NT/2000 TTL:128
2、WINDOWS 95/98 TTL:32
3、UNIX TTL:255
4、LINUX TTL:64
5、WIN7 TTL:64
Nmap -O参数
Nmap -O xxx.xxx.xxx.xxx //nmap的-O参数可以帮助判断目标所使用的操作系统
大小写敏感
一般情况下,windows服务器对目录的大小写是不敏感的,而linux则相反
IP反查
使用网络空间搜索引擎或者ARL灯塔收集信息后,通常会有一些没有域名的独立IP,可以使用IP反查的手段来确定这个独立IP是否归属于该单位
ip138反查[https://site.ip138.com/]
微步在线[https://x.threatbook.cn/]
爱站反查域名[https://dns.aizhan.com/]
子域名查询
当主站点没有web安全漏洞或者设置了WAF等安全产品等情况导致无法进行边界突破时,可以考虑对子域名进行渗透测试
DNS解析
利用DNS记录公开数据收集
ip138[https://site.ip138.com/]
DnsDumpster[https://dnsdumpster.com/]
hackertarget.com:[https://hackertarget.com/find-dns-host-records/]
Gobuster
Kali下使用gobuster爆破Dns
apt-get install gobuster
gobuster dns -d xxxx.com -t 50 -w '/root/Documents/domains.txt'
网络空间搜索引擎搜索
通常,搜索引擎的主页设有相关搜索规则,多数是以 domain="xxxx.com" 的形式来搜索子域名信息
在线子域名收集
dnsdumpster[https://dnsdumpster.com/]
bugscanner[http://tools.bugscaner.com/subdomain/]
OneForAll子域名查询工具
工具下载地址[https://github.com/shmilylty/OneForAll]
oneforall是一款功能强大的子域收集工具
- 收集能力强大,详细模块请阅读收集模块说明。
-
支持子域爆破,该模块有常规的字典爆破,也有自定义的fuzz模式,支持批量爆破和递归爆破,自动判断泛解析并处理。
-
支持子域验证,默认开启子域验证,自动解析子域DNS,自动请求子域获取title和banner,并综合判断子域存活情况。
- 支持子域爬取,根据已有的子域,请求子域响应体以及响应体里的JS,从中再次发现新的子域。
- 支持子域置换,根据已有的子域,使用子域替换技术再次发现新的子域。
- 支持子域接管,默认开启子域接管风险检查,支持子域自动接管(目前只有Github,有待完善),支持批量检查。
-
处理功能强大,发现的子域结果支持自动去除,自动DNS解析,HTTP请求探测,自动筛选出有效子域,拓展子域的Banner信息,最终支持的导出格式有
txt
,csv
,json
。 - 速度极快,收集模块使用多线程调用,爆破模块使用massdns,DNS解析速度每秒可解析350000以上个域名,子域验证中DNS解析和HTTP请求使用异步多协程,多线程检查子域接管风险。
- 体验良好,各模块都有进度条,异步保存各模块结果。
安装使用
在高版本的安装及使用过程中可能会出现各种问题,参考下面这篇博客
https://blog.csdn.net/weixin_49769267/article/details/131464408
python oneforall.py --target http://xxx.com run
收集完成后会将结果保存到results文件夹下
layer子域名挖掘机
Layer 子域名挖掘机是一款域名查询工具,可提供网站子域名查询服务;拥有简洁的界面、简单的操作模式,支持服务接口、暴力搜索、同服挖掘三种模式,支持打开网站、复制域名、复制 IP、复制 CDN、导出域名、导出 IP、导出域名 + IP、导出域名 + IP + WEB 服务器以及导出存活网站!
工具地址[https://github.com/euphrat1ca/LayerDomainFinder/releases]
操作简便,只需填入一级域名,选用默认或自行收集的字典后点击启动按钮即可。
Subfinder
Subfinder 是一款专注于子域名收集的开源工具,旨在帮助安全专业人员、渗透测试人员和研究人员快速有效地发现目标域的子域名。该工具通过与多个子域名源(例如搜索引擎、DNS数据)集成,提供了一个全面的子域名搜集解决方案。
以下是 Subfinder 的一些主要特点和功能:
- 多源搜集: Subfinder 集成了多个子域名源,包括但不限于谷歌(Google)、Shodan、Censys、Virustotal等,以提高搜集的全面性。
- 快速且并发: Subfinder 被设计为快速且支持并发搜集,以加速子域名发现过程。
- DNS 数据源: 工具可以利用DNS数据,通过查询DNS服务器来发现子域名。这包括常规域传输、DNS枚举和暴力破解。
- API支持: Subfinder 提供了对多个子域名API的支持,以允许用户在工具中集成自定义的数据源。
- 漏洞扫描集成: Subfinder 还可以与漏洞扫描工具(如 Amass、Assetnote、Virustotal)进行集成,以提供更全面的信息。
- 结果导出: Subfinder 支持将搜集到的子域名结果导出为常见的文件格式,如文本文件、JSON和CSV。
- 自定义字典: 用户可以使用自定义字典进行子域名的暴力破解尝试,以满足特定的搜集需求。
Subfinder 是一个灵活而强大的工具,适用于用于渗透测试、漏洞评估、红队操作以及一般的信息搜集任务。使用 Subfinder 时,请确保在合法和授权的范围内操作,并遵循法律和道德准则。
在Kali中使用Subfinder
sudo apt-get install subfinder
subfinder -d xxxx.com
证书查询
利用谷歌提出的证书透明度,可以查询到公开的子域,一般可以查询到的结果包括域、签发者、有效期和签名等
crtsh[https://crt.sh/]
censys[https://censys.io/certificates]
spyse[https://spyse.com/search/certificate]
certspotter[https://sslmate.com/certspotter/api/]
威胁情报收集
绿盟科技 威胁情报云 https://ti.nsfocus.com/
华为安全中心平台 https://isecurity.huawei.com/sec
爬虫收集
当目标比较单一或者无法提取出更多的子域名资产时,可以考虑定制爬虫的方法,对目标的JS信息、源码信息、目录信息等做更深层次的域名信息的提取
关于爬虫获取子域名的学习,可以参考这篇博客[https://blog.csdn.net/qq_45859826/article/details/124030119]
信息去重
经过在线平台和工具的收集工作,得到的域名信息有很多,但是有很多会是重复出现的,需要做去重工作,这里给出我自己写的python脚本
import urllib.parse
# 将域名统一修改为url标准格式
def normalize_url(url):
if not url.startswith("http://") and not url.startswith("https://"):
url = "http://" + url
parsed_url = urllib.parse.urlparse(url)
return urllib.parse.urlunparse(parsed_url._replace(path='/', params='', query='', fragment=''))
# 读取文件中的域名或URL数据,规范格式并去重,同时将结果保存到新文件
def process_domains_file(file_path):
seen_urls = set()
result = []
with open(file_path, 'r', encoding='utf-8') as file:
for line in file:
url = line.strip() # 去除每行的空白字符(如换行符等)
normalized_url = normalize_url(url)
if normalized_url not in seen_urls:
seen_urls.add(normalized_url)
result.append(normalized_url)
# 将去重后的结果保存到新文件domains_new.txt中
with open('domains_new.txt', 'w', encoding='utf-8') as new_file:
for url in result:
new_file.write(url + '\n')
return result
file_path = "domains.txt" # 这里替换为你实际的文件路径
final_urls = process_domains_file(file_path)
for url in final_urls:
print(url)
端口扫描
通过扫描端口,可以判断目标主机使用了哪些服务,从而对这些服务进行有针对性的信息收集、漏洞探测
在线端口扫描
使用在线端口扫描,一是比较快捷、二是可以先使用在线端口扫描判断目标主机是否限制了访问频率,后续在本地进行主动端口扫描时可以通过设置线程和速率的方式绕过
ToolLine[https://toolonline.net/port-scan]
Ip33[http://www.ip33.com/port_scan.html]
coolad[http://coolaf.com/tool/port]
当然在线的端口扫描平台还不止这些,可以通过搜索引擎找到很多类似的在线扫描平台
Nmap
工具下载地址[https://nmap.org/]
Nmap中文使用手册[https://www.cnblogs.com/HOsystem/p/16538678.html]
在Kali中使用Nmap进行端口扫描
nmap -sU --top-ports 20 xxx.com //扫描UDP top20端口
nmap -T4 -O -sV -p- kali.wiki //扫描全端口 判断操作系统 扫描部署的服务
Masscan
masscan是一个快速端口扫描器,号称是世界上最快的扫描软件,可以在几分钟内扫描整个互联网端口。
工具下载[https://github.com/robertdavidgraham/masscan]
masscan -p 0-5000 xxx.xxx.xxx.xxx --rate=3000 //使用3000的速率扫描目标0-5000的端口开放情况
在Kali中的使用和Windows基本无异,但是如果速率设置的很高的话,可能会导致扫描不全的情况出现
网络测绘空间
通过测绘空间搜索单个IP地址,可以探测出目标主机开放过哪些端口服务
目录扫描
目录扫描字典
https://github.com/arrdres/Web-Dict
御剑目录扫描
御剑目录扫描专业版,简单实用的命令行网站目录扫描工具,支持爬虫、fuzz、自定义字典、字典变量、UA修改、假404自动过滤、扫描控速等功能。
工具下载[https://github.com/foryujian/yjdirscan]
7KbScan
7kbscan-WebPathBrute Web路径暴力探测工具
工具下载[https://github.com/7kbstorm/7kbscan-WebPathBrute]
dirsearch
dirsearch是一个基于python的命令行工具,用于暴力扫描页面结构,包括网页中的目录和文件。
工具下载[https://github.com/maurosoria/dirsearch]
Gobuster
gobuster工具可以对Web目录和dns域、子域进行枚举,功能较为强大
参数 | 详细 | 描述 |
---|---|---|
-C | --cookie | 请求中使用的cookie |
-x | --extensions | 指定枚举的扩展名 |
-H | --headers | 指定请求头 |
-k | --no-tls-validation | 跳过TLS证书验证 |
-n | --no-status | 不打印状态码 |
-s | --status-codes | 肯定的状态码 |
-b | --status-codes-blacklist | 负面的状态码 |
-U | --username |
Basic 验证用户名 |
-P | --password |
Basic 验证密码 |
gobuster dir -u http://xxx.com/ -w directory-list.txt //使用指定字典对目标进行目录爆破
CMS识别
通过识别CMS的类型和版本信息,可以根据该CMS公开的历史漏洞针对CMS进行漏洞探测
在线CMS识别
云悉指纹识别[http://finger.tidesec.com/]
数字观星[https://fp.shuziguanxing.com/#/]
TideFinger
TideFinger——指纹识别小工具,汲取整合了多个web指纹库,结合了多种指纹检测方法,让指纹检测更快捷、准确。
工具下载[https://github.com/TideSec/TideFinger]
TideFinger_Win.exe -u http://xxxx.com
Whatweb
WhatWeb 是一款用于识别网站技术栈和特征的开源Web扫描工具。它可以自动分析网站的响应并识别出使用的Web框架、CMS、服务器、JavaScript库等技术组件。
Kali中使用whatweb识别目标CMS信息
whatweb xxxx.com
Wappalyze
Wappalyzer是一款开源的浏览器扩展,用于识别网站所使用的技术栈。它能够检测出使用的Web服务器、内容管理系统、编程语言、JavaScript库、框架等信息,并将其展示给用户。
插件可以在各个浏览器的插件商城免费下载
经验判断&AI
当工具无法提供正确的CMS信息时,可以根据网站的目录结构、js信息、版权信息综合判断CMS的类型,也可以将收集到的信息提交给AI判断
)
源码泄露
攻击者可通过泄露的源码文件,提取出网站配置信息,如数据库配置信息、云服务配置信息等,还可以根据源代码进行代码审计,导致漏洞披露。
网站备份压缩文件
管理员如果将网站源代码备份在Web目录下,攻击者就通过遍历文件路径,获得备份文件。
常见的备份文件后缀:
.rar
.zip
.7z
.tar.gz
.bak
.txt
.old
.temp
.phps
.sql
git源码泄露
git
是一个开源的分布式版本控制系统,在执行git init初始化目录的时候,会在当前目录下自动创建一个.git目录,用来记录代码的变更记录等。发布代码的时候,如果没有把.git这个目录删除,就直接发布到了服务器上,攻击者就可以通过它来恢复源代码。
访问网站根目录/.git/文件夹是否存在,如果文件夹存在或显示403则存在 使用githack.py进行下载
GitHack
工具下载:[https://github.com/lijiejie/GitHack]
python3 GitHack.py http://xxxx.com/
SVN源码泄露
SVN
是一个开放源代码的版本控制系统。在使用SVN管理本地代码过程中,会自动生成一个名为.svn的隐藏文件夹,其中包含重要的源代码信息。网站管理员在发布代码时,没有使用‘导出’功能,而是直接复制代码文件夹到WEB服务器上,这就使.svn隐藏文件夹被暴露于外网环境,可以利用.svn/entries文件,获取到服务器源码。
SvnHack
工具下载[https://github.com/callmefeifei/SvnHack]
使用方法与githack基本无异,但是需要使用python2
版本使用此工具,本人使用的python环境为Python 2.7.18
python2 SvnHack.py -u http://xxxx.com/
GitHub源码泄漏
如果网站开发者在开发过程中自动或手动将源码上传到github等其他开源平台,并且没有正确设置访问权限,那么就可以通过搜集到的已知信息去各个开源平台搜索泄露的源代码
in:name target # 仓库标题搜索含有关键字target
language:java target # 在java语言的代码中搜索关键字
in:descripton target # 仓库描述搜索含有关键字
in:readme target # Readme文件搜素含有关键字
user:target # 通过用户名搜素
license:apache-3.0 target # 明确仓库的 LICENSE 搜索关键字
user:target in:name target # 组合搜索,用户名target的标题含有target的
API与JS信息
Packer-Fuzzer
工具下载[ https://github.com/rtcatc/Packer-Fuzzer]
Packer-Fuzzer是一款针对Webpack等前端打包工具所构造的网站进行快速、高效安全检测的扫描工具。
常用命令
python3 PackerFuzzer.py -u http://xxxx.com -t adv -p http://127.0.0.1:8080 -f 1 -r html
# 高级版模式、yakit代理、忽略自签名CA证书
python3 PackerFuzzer.py -u http://xxxx.com -j http://xxxx.com/js/index.js,http://xxxx.com/static/js/cookieAlert.js
# 附加JS进行额外分析
python3 PackerFuzzer.py -u http://xxxx.com -b v1
#指定baseurl
UrlFinder
URLFinder是一款快速、全面、易用的页面信息提取工具,用于分析页面中的js与url,查找隐藏在其中的敏感信息或未授权api接口
工具下载[https://github.com/pingc0y/URLFinder]
\URLFinder.exe -u http://xxxx.com -s 200,403 -m 3
JSFinder
JSFinder是一款用作快速在网站的js文件中提取URL,子域名的工具。
-
-
-
-
-
-
-
-
单一目标信息收集
- 操作系统
- TTL值
- Nmap -O参数
- 大小写敏感
- IP反查
- 子域名查询
- DNS解析
- Gobuster
- Kali下使用gobuster爆破Dns
- 网络空间搜索引擎搜索
- 在线子域名收集
- OneForAll子域名查询工具
- 安装使用
- layer子域名挖掘机
- Subfinder
- 在Kali中使用Subfinder
- 证书查询
- 威胁情报收集
- 爬虫收集
- 信息去重
- 端口扫描
- 在线端口扫描
- Nmap
- 在Kali中使用Nmap进行端口扫描
- Masscan
- 网络测绘空间
- 目录扫描
- 目录扫描字典
- 御剑目录扫描
- 7KbScan
- dirsearch
- Gobuster
- CMS识别
- 在线CMS识别
- TideFinger
- Whatweb
- Kali中使用whatweb识别目标CMS信息
- Wappalyze
- 经验判断&AI
- 源码泄露
- 网站备份压缩文件
- git源码泄露
- GitHack
- SVN源码泄露
- SvnHack
- GitHub源码泄漏
- API与JS信息
- Packer-Fuzzer
- UrlFinder
- JSFinder