当前位置: 首页 > news >正文

渗透测试--HOST注入原理和利用

HOST注入原理和利用

一、什么是HOST头?
在这里插入图片描述

host头是HTTP协议头中的一个字段,如下:
二、HOST头有什么用?

先来看一下上网流程解析:

  1. 用户在浏览器输入www.myweb1.com;
  2. 计算机先从本地host文件中解析www.myweb1.com对应什么IP(这个特性可以用来绕CDN或云waf),找到的话直接通过该IP找到目标服务器;
  3. 一般用户是不设置本地host文件的,所以大概率会通过DNS服务器去解析域名对应的IP;
  4. DNS查询后返回给客户端目标服务器的IP;
  5. 客户端拿着IP去请求目标服务器;
  6. 此时目标服务器接受请求。
    但很多单台服务器上面会通过中间件搭好几个虚拟主机,如10.24.22.108的服务器上面,一个apache服务里有两个网站,且两个网站的域名分别为www.myweb1.com和www.myweb2.com,端口也是同一个8080。
这是apache里配置文件配置两个网站,域名不同,网站不同,但ip相同,端口相同。
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/fb15c4751f694476bc96101e34c377dd.png)

这个时候中间件会拿着host头去解析,你这个请求该分配给哪个网站
用户输入的是www.myweb1.com,那么host头默认就是www.myweb1.com,此时服务器直接把请求定位到第一个网站。
这就是host头的用处,定位请求对象

三、host头注入的原理是什么?

一个网站想要完整的展示给用户需要从指定url加载图片、JS、CSS等资源,而web程序生成url时会利用函数从host中获取域名,并将域名拼接到url中,在php中,通常是_SERVER[“HTTP_HOST”],下图就是目标站点通过host头内容拼接网页图片加载url,这里就存在host头注入漏洞了。
在这里插入图片描述

四、host头注入漏洞有哪些体现方式和检测方法?

以下host头全马赛克的是真实网站域名,47.?.?.15:10002是我的vps
1、拼接

这是正常的数据包
在这里插入图片描述

从burp中拦截并修改正常的数据包,修改host头为攻击者的vps服务器,这里我vps开启了http服务的监听
在这里插入图片描述

放行数据包后,vps监听到大量的请求,可见host被后端拼接了,后端把拼接后的url返回给用户,用户的浏览器从这些错误url去加载资源了(试想一下,如果这里是中间人修改了用户的请求数据包中的host头,把host头改成恶意的url,用户不自觉地去请求了恶意url,会发生什么有趣的事)
在这里插入图片描述

2、跳转

这是正常的数据包,有跳转
在这里插入图片描述

修改一下host头再试试,还是改成vps的地址,发包,看到vps没动静,因为还没跳转
在这里插入图片描述

点击跟随跳转按钮,看到服务器返回404,因为我vps上没东西,而看到vps的监听,已经有动静了。
在这里插入图片描述

3、代码注入

这里不做演示了,变相的反射型XSS,在host头后追加xss代码,返回的页面存在xss代码,在用户浏览器被执行,找一张网图敷衍一下。
在这里插入图片描述

五、host头注入的危害有哪些?

其实掌握host头漏洞的原理和检测方式后,有什么危害自己可以品出来了,为啥这个漏洞被当作中危漏洞,可能是因为利用起来比较麻烦吧。看到网上说的两个,加上我个人的理解说一下吧。
1、密码重置

攻击者发送密码重置邮件,邮箱改成被害者,host头改成攻击者服务器。用户收到密码重置邮件时,这个链接其实是被篡改了的,点击后的请求是发到攻击者服务器的。而我们重置密码的请求往往是通过GET方式发的,里面携带了token等相关的参数,那么攻击者获取这些参数后再去重置用户的密码,就会非常容易,留下迟迟等不到网站回应的用户一脸懵逼。
2、缓存污染

中间人把host头改了,改成自己的服务器地址。用户访问的内容被攻击者恶意编辑,这些内容被缓存在服务器前端的缓存服务器中,例如varnish,用户就一直上着个假网……
六、host头注入漏洞怎么修?

修改中间件配置文件,携带不认识的host头的请求不往网站发,怎么改?我不记得了,运维知道,开发知道。或许是(Nginx改ngnix.conf文件;Apache改httpd.conf文件;Tomcat改server.xml文件)
别用函数截取host头内容做拼接url了,比如设置server_name白名单,仅仅拼接来自白名单的host。
附上大佬的修复建议:https://www.freebuf.com/articles/web/178315.html

七、问题?

在第二点中,中间件通过host头判定请求往哪个网站发。可能有人会问,我明明改了host头,这个host肯定不在目标服务器上的,为啥我还能访问到目标站点?
答:我的猜测是,由于中间件配置了不认识的host头请求转发到默认站点。

相关文章:

  • Linux运维——硬件管理
  • 第二十四:5.2【搭建 pinia 环境】axios 异步调用数据
  • HTML——前端基础1
  • threejs:document.createElement创建标签后css设置失效
  • 一周学会Flask3 Python Web开发-Jinja2模板继承和include标签使用
  • nss刷题5(misc)
  • 《操作系统 - 清华大学》 8 -9:进程管理:什么是线程
  • Android AsyncLayoutInflater异步加载xml布局文件,Kotlin
  • CentOS 7 日志切割实战:Logrotate 详解与配置指南
  • 剑指 Offer II 031. 最近最少使用缓存
  • excel单、双字节字符转换函数(中英文输入法符号转换)
  • 鸿蒙-AVPlayer
  • smolagents学习笔记系列(七)Examples-Self-correcting Text-to-SQL
  • Java一揽子集合整理
  • 网页制作09-html,css,javascript初认识のhtml如何使用表单
  • 数据安全管理的AI工具有哪些?
  • [LeetCode]day29 232.用栈实现队列
  • ZT16 小欧的括号嵌套
  • Linux网络之传输层协议(UDP,TCP协议)
  • 【转】Python for Data Analysis第二版【中文版】-第三章
  • 解放日报:抢占科技制高点,赋能新质生产力
  • 美国清洗政治:一幅残酷新世界的蓝图正在展开
  • “五一”假期逛上海车展请提前购票,展会现场不售当日票
  • 李铁案二审今日宣判,押送警车已进入法院
  • IMF前副总裁朱民捐赠1000万元,在复旦设立青云学子基金
  • 出行注意防晒补水,上海五一假期以多云天气为主最高33℃