如何HOST碰撞挖掘隐蔽资产
字数 1583 2025-08-22 12:22:54
HOST碰撞挖掘隐蔽资产技术详解
一、反向代理基础概念
1.1 反向代理定义
反向代理是一种服务器配置,它代理客户端的请求并将其转发到一个或多个后端服务器。在这种模式下:
- 客户端不知道实际的后端服务器地址
- 所有请求由反向代理服务器接收并转发
- 处理结果通过反向代理返回给客户端
1.2 反向代理与正向代理的区别
| 特性 | 正向代理 | 反向代理 |
|---|---|---|
| 代理对象 | 代理客户端 | 代理服务器 |
| 客户端感知 | 知道代理存在 | 不知道后端服务器 |
| 主要用途 | 访问外部资源 | 隐藏后端服务器 |
1.3 反向代理的典型应用场景
- 负载均衡
- 提升安全性
- 缓存静态内容
- 隐藏后端服务器架构
二、反向代理工作原理示例
2.1 无反向代理的情况
- 客户端直接访问
a.test.com - DNS解析直接指向服务器真实IP
210.120.1.111 - 客户端与服务器直接交互
2.2 有反向代理的情况
- 客户端请求
a.test.com - DNS解析指向反向代理服务器IP
210.120.1 - 反向代理检查配置,发现
a.test.com对应210.120.1.111 - 请求转发到后端服务器
210.120.1.111 - 响应通过反向代理返回客户端
关键点:
- 直接访问服务器真实IP将无法获取内容
- 只能通过正确域名访问
- DNS解析显示的是反向代理服务器IP
三、HOST碰撞原理
3.1 产生条件
HOST碰撞是反向代理配置不当导致的漏洞,典型场景:
-
初始配置:
- 域名
oa.admin.com解析到反向代理210.110.110.110 - 反向代理配置将
oa.admin.com绑定到内网192.168.1.1
- 域名
-
维护操作:
- 删除
oa.admin.com的DNS解析记录 - 但反向代理服务器上的绑定配置未删除
- 删除
3.2 漏洞利用原理
- 虽然DNS解析被删除,但反向代理绑定仍然有效
- 攻击者可手动将域名解析到反向代理IP(通过hosts文件)
- 反向代理仍会将请求转发到内网服务器
四、HOST碰撞利用方法
4.1 利用步骤
-
信息收集阶段:
- 收集反向代理服务器的IP地址
- 收集解析异常的域名(可能指向内网的域名)
-
碰撞测试:
- 手动将域名解析为收集到的IP
- 采用笛卡尔积方式进行两两匹配测试
- 直到发现能访问到隐藏系统的组合
4.2 自动化工具
-
HostCollision:
- GitHub地址:https://github.com/pmiaowu/HostCollision
- 功能:自动化检测HOST碰撞漏洞
-
Hosts_scan:
- GitHub地址:https://github.com/fofapro/Hosts_scan
- 功能:批量扫描HOST碰撞可能性
4.3 辅助脚本示例
import socket
def check_domain_resolution(domain):
try:
ip = socket.gethostbyname(domain)
return True
except socket.gaierror:
return False
def main():
input_file = 'subdomain.txt'
output_file = 'result.txt'
with open(input_file, 'r') as file:
domains = [line.strip() for line in file.readlines()]
unresolved_domains = []
for domain in domains:
if not check_domain_resolution(domain):
print(f"无法解析的域名: {domain}")
unresolved_domains.append(domain)
if unresolved_domains:
with open(output_file, 'w') as result_file:
for domain in unresolved_domains:
result_file.write(f"{domain}\n")
print(f"解析异常的域名已写入 {output_file}")
else:
print("所有域名均能解析")
if __name__ == '__main__':
main()
五、Nginx反向代理配置示例
server {
listen 80;
server_name a.test.com; # 设置域名
location / {
proxy_pass http://210.120.1.111; # 设置反向代理目标地址
proxy_set_header Host $host; # 保留原始请求头的Host
proxy_set_header X-Real-IP $remote_addr; # 设置真实客户端IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme; # 传递协议
}
# 可选HTTPS配置
# listen 443 ssl;
# ssl_certificate /path/to/certificate.crt;
# ssl_certificate_key /path/to/private.key;
}
六、HOST碰撞修复方案
6.1 DNS配置检查
- 确保DNS记录指向正确的IP地址
- 检查
/etc/hosts文件,删除重复或错误的映射cat /etc/hosts
6.2 虚拟主机配置检查
确保Nginx/Apache配置中:
- 每个
server_name唯一 - 或使用通配符避免冲突
server { listen 80; server_name *.example.com; root /var/www/example; }
6.3 反向代理配置检查
- 确保不同后端服务不使用相同端口或路径
- 删除不再使用的域名绑定配置
- 定期审计反向代理配置
6.4 完整修复流程
- 删除不再需要的DNS记录
- 同步删除反向代理服务器上的对应配置
- 重启反向代理服务使配置生效
- 进行验证测试确保修复完成
七、渗透测试中的识别特征
在渗透测试中,以下情况可能表明存在反向代理:
- 多个不同域名解析到相同IP
- 直接访问IP返回默认界面(Apache/Nginx默认页)
- 出现404、403、400或空白界面
- IP访问与域名访问返回内容不同