背景
上个月公司把新上线的优惠券系统交给我做安全验收,预算有限,请不起外部团队,于是干脆自己撸袖子干。整套流程跑下来,发现不少“小惊喜”,也踩了一些坑,把过程整理出来,给同样想低成本做渗透测试的同学一个参考。


0x01 划定范围:先搞清楚“打哪里”

业务架构很简单:

  • 前端:Vue3 + Nginx
  • 后端:Spring Boot 3.2(RESTful 接口)
  • 数据库:MySQL 8.0
  • 额外资产:管理后台、小程序、CDN 静态资源

先拉个表格,把域名、IP、端口都列出来,方便后续扫描。

域名/子域 IP 端口 备注
api.xxx.com 43.142.. 443 生产接口
admin.xxx.com 同上 443 管理后台
cdn.xxx.com CDN 回源 80/443 静态资源

0x02 信息收集:三行命令把“家底”翻出来

# 1. 子域爆破(subfinder + dnsx,1 分钟搞定)
subfinder -d xxx.com -silent | dnsx -silent -a -resp-only > subdomains.txt

# 2. 端口快速扫描(naabu 并发 1000,半分钟扫完全网段)
naabu -iL subdomains.txt -p 1-65535 -rate 1000 -silent > ports.txt

# 3. 服务指纹识别(httpx 顺手把 title 也抓回来)
httpx -l ports.txt -title -tech-detect -status-code -csv-o services.csv

跑完一看,admin.xxx.com 居然开着 8080 调试端口,心里一凉——这要是被扫到,直接白给。


0x03 漏洞扫描:半自动最香,别当“工具小子”

用 Nuclei 跑社区模板,先筛掉误报高的:

# 只跑高危 & 中危,去掉信息泄露模板
nuclei -l services.csv -severity high,medium -exclude-tags info -o nuclei_results.txt

结果里有一条「Spring Boot Actuator 未授权访问」命中 /actuator/env,浏览器直接访问,果然能看到 Redis 密码明文——当场把运维同事从午睡中叫醒。


0x04 手工验证:别让自动化“忽悠”你

Nuclei 报了一个「JWT 弱密钥」,用 jwt_tool 验证一下:

git clone https://github.com/ticarpi/jwt_tool
python3 jwt_tool.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9... -C /usr/share/wordlists/rockyou.txt

不到 10 秒就爆出 secret123,顺手改 payload 把 role 改成 admin,重新签名后访问 /admin/users,直接返回全量用户列表——业务逻辑越权坐实。


0x05 绕过 CDN 找真实 IP:别被“高防”迷惑

很多同事以为上了 CDN 就高枕无忧,其实套路很简单:

  1. 历史 DNS 记录(SecurityTrails)查到 2 个月前的 A 记录。
  2. 证书透明度日志搜索 *.xxx.com,发现一台 origin.xxx.com 解析到真实源站 43.142.*.200。
  3. 直接 curl 带 host 头绕过 CDN:curl -H "Host: api.xxx.com" http://43.142.*.200/health,秒回 200 OK。

小插曲
因为源站暴露在公网,被扫过几次,后来运维把源站 IP 加到「群联 AI 云防护」的专属高防 IP 段,攻击流量先过 AI 清洗,再到源站,基本没再出现被打瘫的情况。虽然是自己人搞的测试,但也算提前验证了高防效果。


0x06 总结:低成本也能玩得转

  • 工具链:subfinder + naabu + httpx + nuclei + jwt_tool,全部开源,装一遍就能用。
  • 关键点:信息收集 > 自动化验证 > 手工确认,别指望一键出结果。
  • 防护建议:除了修漏洞,把源站隐藏好、接入带 AI 清洗的高防 IP,至少让脚本小子扫不到真实入口。
  • 时间成本:整个流程 1 个人 1 天搞定,比走招标流程请外部团队快多了。

彩蛋
修完漏洞后,我把测试脚本改成定时任务,每周日凌晨跑一次,报告直接飞书群里。领导一看,省了外包钱,还顺便给绩效加了分。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐