Host碰撞实战篇

Host碰撞

反向代理

顺口提一嘴…正向代理:代理服务器代理客户端,例如我们搭建代理科学上网

反向代理:代理服务器代理服务端,测试网站时我们常常使用浏览器插件<–Wappalyzer–>,有时候就会看到Nginx反向代理。反向代理就是有一台代理服务器代理网站站点,例如网站真实站点的ip为101.131.20.162,其代理服务器IP就是121.161.241.36,我们访问时只能访问到121.161.241.36,而不能知道其真实ip。这里也是反向代理的一个目的之一,隐藏真实。

反向代理如何实现?

准备:

1、一台有nginx的服务器

2、一个域名,该域名DNS解析到我们的nginx服务器代理

此处我们就不使用https了,只是做个小实验

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
//安装并启动nginx
sudo apt install nginx
sudo systemctl start nginx
sudo systemctl enable nginx


//配置企业常用的反向代理配置:只能用域名访问代理服务器才能访问到内容,否则返回其他页面:包括404
sudo vim /etc/nginx/sites-available/default

修改上述文件内容为下述
server {
listen 80; # 监听 HTTP 请求,也就是通过访问80端口即可访问到后端服务器
server_name xxx.com; # 替换为你的域名

if ($host != 'xxx.xxx.com') {
return 404; # 如果不是预期域名,返回 404
}
# 反向代理到后端服务
location / {
proxy_pass https://xxx.xxx.xxx.5:5003/login; # 替换为你的后端服务地址和端口
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Connection "upgrade";
}
# 默认的 404 页面
error_page 404 /404.html;
location = /404.html {
root /var/www/html; # 替换为你的静态文件目录
}

# 默认的 50x 页面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/html; # 替换为你的静态文件目录
}
}

然后访问域名www.xxx.com就会成功代理上后端服务器https://xxx.xxx.xxx.5:5003/login

下图为“后端服务器”

image-20241211185427732

下图为反向代理服务器的效果,大概由于ssl证书、以及我的域名未备案的原因导致了无法完整显示页面,这里不重要,只是展示一个效果而已,有个标题证明代理成功即可。

image-20241211185518471

直接用ip访问80端口就不行,就会返回404,因为上面的配置。

image-20241211192718670

直接通过IP访问不行,也就是我们有时候在渗透时,会存在一些IP形式的url,访问会发现返回502、403、404、nginx默认页面、centos默认页面等,这种多半就是代理服务器,它有可能规定了只能使用域名访问,不能直接通过ip访问,这种我们就必须要把这种奇怪的ip保存下来,下面会有用。

还有一种情况就是我们访问一个由域名组成的url,结果啥也没有。但是这个url不能来着这么无缘无故,其实导致这个的原因就是域名被“废弃”,未解析到任何IP,其中就又存在一种可能,就是使用者一开始把这个域名解析到了代理服务器,不过之后又可能某种原因,废除了这域名。既然之前解析到过代理服务器并且代理服务器使用过,代理服务器的代理配置就极有可能没有被删除。在上面的基础上,我们就做个实验,模拟上述情况,展示其利用方式。

1、删除域名DNS解析代理服务器

image-20241211193843338

2、静候其失效,就相当于废除了该域名。好了!成功返回502,说明该域名没有解析到任何一个IP

image-20241211194304434

我们重新访问代理服务器的80端口,并抓包,把请求头host修改为之前代理服务器配置的域名,发包

image-20241211195002569

行咯!发现单独使用ip或者域名访问啥也没有,结果两者适当结合一下,却能访问一些不能直接访问的页面。

image-20241211194958225

导致这个的原因就是上述提到的“代理服务器上的配置未删除”

也就是host碰撞这一技术诞生的根本原因。

何为host碰撞?

host碰撞就是通过IP(用作请求url)和域名(用作请求头中的Host)两者的搭配发包,访问到代理服务器,从而访问到可能被隐藏的后端服务器资产的一个信息收集技术。

host碰撞的作用?

在信息收集收集资产时,发现可能被废弃的代理服务器,从而发现隐藏的后端服务器。所以该操作可以直接在收集c段、ip、域名之后直接做。

如何实现host碰撞?

在我们资产收集后,肯定就会存在有些资产不能直接访问的情况,很有可能就是上述实验中的情况,需要host碰撞。而且这样的资产在一些大型的攻防演练、src中绝对不会少。所以我们在拿到比较全的 域名资产、ip资产的时候就可以测测活,记录下回显不是200的资产,并分装到ip.txt、domain.txt文件中,先解决一部分回显不正常的,然后在指纹识别的时候,可以看到一些标题如:Centos欢迎页面、nginx页面、其他欢迎页面这种没有实质内容的标题,我们也可以进一步把他们添加在之前收集的ip.txt、domain.txt文件中。然后直接上工具。

HostCollision-2.2.9

工具功能查看:

image-20241211201711155

把上述得到的ip.txt、domain.txt扔在该工具目录下

运行以下命令:

1
java -jar HostCollision.jar -ifp ip.txt -hfp domain.txt

image-20241211201938705

然后得到碰撞成功的列表,我们正常测试站点时肯定不能一直手动切换host,于是下面就推荐两个方法

1、burp(match and replace rules)

方便我们直接抓包测试。

2、浏览器插件:ModHeader

这个我更为推荐,因为有时候不知道怎么回事,burp的那个匹配替换功能会失效,但是用了插件就可以很好的解决这个问题,它可以自动锁定我们自定义的请求头。

点击Mod,并选择request header

image-20241211203935062

image-20241211204636765

image-20241211204654058

然后填写我们的host及其值即可,就可以不管了,直接刷新网页就行了。

image-20241211204756784

但是这个设置会影响其他网页的正常访问,所以设置只在我们当前测试站点使用,右键扩展图标,然后如下图勾选即可。

image-20241211204942971

即可正常测试了。


Host碰撞实战篇
http://example.com/2024/12/12/Host碰撞实战篇/
作者
Yf3te
发布于
2024年12月12日
许可协议