秋天的第一篇打靶记录-Host头注入
2022-9-17 12:4:41 Author: 潇湘信安(查看原文) 阅读量:42 收藏

Host Header Injection Acctack

一、Host头攻击:

Host攻击是基于HTTP请求头当中的Host主机头进行伪造替换造成的请求攻击,那么对于HTTP请求而言,HOST是识别目标主机的关键请求头,当我们对其进行替换之后请求到的真实主机会有所变化:,如果攻击者进行恶意替换主机头进行碰撞请求,那么有极大的可能性能访问到一些铭感的资产

二、Host头的作用:

Http的Host头的目的是帮助识别客户端要与之通信的后端组件,如果请求不包含Host头或者格式不正确,则在将传入请求的应用程序时可能会导致问题,当通过同一个IP地址去访问多个应用程序时,最常出现的场景就是虚拟主机,也就是同一服务器多个应用程序,但是我们在请求网站时,DNS只会将域名解析到IP地址,但我们访问的是同一个IP地址的服务,只是端口不一样

当我们想去访问pikachu.com的时候,如果将host地址替换为dwvs.com,那么访问到就是dwvs.com的内容,

与之相反的也是一样的

可以看到替换之后的效果如下所示:

三、Host注入攻击的实现:

1.基本密码重置攻击:

漏洞攻击的实现主要借助于,BurpSuite官网实验室进行测试练习:

https://portswigger.net/web-security/host-header/exploiting/password-reset-poisoning/lab-host-header-basic-password-reset-poisoning

点击Access The Lab启动实验环境即可, 下面还有对应的实验操作说明:

进去之后是一个正常的blog网站,旁边有一个My Account的功能点击试下:

实验在说明中给出了两个账号分别是winer和carlos,点击下面的忘记密码的功能

点击输入用户名或者邮箱即可收取到找回密码的邮箱,官方给我们提供了一台测试的服务器进行测试:

攻击服务器下有个email的客户端给我们提供接收邮件服务进行测试,点击打开:

可以看到接收到邮件之后,能够收到对应的找回密码相关的邮件请求,点击邮件的找回密码链接就可以修改我们指定账号的密码了:

可以看到链接的构造请求如下所示:

https://0a51009703533aeec05a5724005600a5.web-security-academy.net/forgot-password?temp-forgot-password-token=evHmw2UJEZPY78KnCnKV7Cor09niRRKL

后面会带上team-forgot-password-token的token认证信息,点击链接之后我们就可以修改对应的账号密码了

但是如果我们直接去抓找回密码的请求数据包是抓不到这个链接请求的:

点击之后的抓取到的数据包如上所示,所以发送的流程是从服务端直接发送给目标邮箱的,我们在提交时抓取只能抓到向后端服务请求的数据包,所以我们可以尝试替换对应HOST进行请求,HOST请求头是可以指定请求的服务器的,所以我们在指定之后进行提交肯定会与我们的攻击服务器进行交互,查看请求日志即可

攻击过程示意图:

这是指定用户进行提交的修改密码的请求数据包,当我们放开数据包之后

我们接收到之后就可以在邮箱当中看到请求的修改密码的链接数据包了,之后就可以看到修改密码的链接了:

我们的目的不是修改我们自己的账户密码,我们要修改的是目标账户Carlos账户的密码,所以我们可 以构造并替换对应的Host请求头指定到我们的攻击服务器:

Host: exploit-0ad300d40481fd57c06fd596015c00f9.web-security-academy.net

需要替换为以上的Host内容,但是有一点比较关键的地方就是有个csrf的提交数据,就是作为我们验证机制,所以我们需要用到这个内容:

替换之后我们进行提交,这样我们就可以在攻击者服务器的日志中进行查看了,日志中就可以包含来自目标服务器发起的找回密码的请求链接了:

下面我们只需要构造请求链接可以修改目标账户的密码了,之前抓取成功修改密码的数据包如下所示:

我们需要替换token和csrf即可,将我们之前拿到的内容进行替换并将密码字段改成自己的密码:

可以看到已经替换完成并且请求成功了,接下来我们只需要去登陆验证即可:

到此漏洞攻击完成!!

2.主机标头身份验证绕过:

本次漏洞实验还是基于BurpSuite的官方实验靶场来实现此次漏洞攻击:

https://portswigger.net/web-security/host-header/exploiting/lab-host-header-authentication-bypass

首先先看看实验说明:

我们要先去访问对应的目录,最终实现get请求/admin/delete?username=carlos即可完成此次实验:

实验首页是一个正常的网页,如下所示:按照实验说明存在一个robots.txt文件,访问之后可以得到/admin的路径:

实验说明中还指出,普通用户去进行访问时会被拒绝,但是本地的用户是可以访问到admin路径的,所以可以猜测出是需要本地的ip地址进行访问:

可以看到提示admin接口时只允许本地用户进行访问的,所以我们需要抓包进行请求查看并且分析:

实验说明中提出需要将Host头修改为localhost的方式进行请求,所以我们再次访问admin的时候抓取数据包并且将Host头修改为:

Host: localhost

可以看到请求成功,本身不能访问的内容通过替换Host头之后就可以实现访问,这就造成了未授权访问,

实验说明中提出我们需要使用admin目录的删除功能进行删除指定账户才能完成此次实验,所以我们还需要去进行指定的请求:

实验要求我们删除的是carlos用户所以我们直接进行请求即可:

之后再次刷新实验平台:

可以看到实验已经完成,我们再次查看admin下的用户:

到此通过修改Host头完成了只有本地用户才能实现的删除用户的操作

3.通过模糊请求导致web缓存中毒:

此次实验还是基于BurpSuite的官网实验靶场进行测试:

https://portswigger.net/web-security/host-header/exploiting/lab-host-header-web-cache-poisoning-via-ambiguous-requests

根据实验说明,我们首先要求访问对应的实验靶场,右键刷新并抓取对应的数据请求包,可以发现会默认请求两个js文件,分别是:

/resources/js/tracking.js

/resources/labheader/js/labHeader.js

实验说明要求我们在攻击服务器中设置/resources/js/tracking.js路径并且在内容中写入alert(document.cookie);

之后直接伪造请求并修改Host头进行提交即可,按照实验说明需要填写两个Host头进行请求:

可以看到已经加载成功了,之前加载的js文件已经变成我们攻击者服务器上的js文件了

这时我们再次进行正常的请求之后,之前的请求已经将请求内容记录到缓存记录中去了

这样的话请求就成功了,并且成功加载了攻击服务器上的恶意js文件

4.基于路由的SSRF攻击:

此次实验是基于BurpSuite的实验靶机进行测试,靶机测试地址如下所示:

https://portswigger.net/web-security/host-header/exploiting/lab-host-header-routing-based-ssrf

根据实验说明,首先我们需要去访问对应的靶机根目录,之后抓取数据包发送到repeater当中:

将数据转发到repeater当中,之后我们需要用到burpsuite自带的DNS功能,开启方式如下所示:

开启之后点击Copy to Clipboard就可以拿到对应的子域名了,之后去进行请求即可.

我们在请求的数据包当中替换Host头为我们刚拿到的子域名进行替换再次请求

之后将内容替换请求,burp这边点击poll now就能接收到DNS请求了

接收到请求就证明存在SSRF漏洞,根据实验要求,我们需要遍历出目标存在的敏感主机地址

需要遍历的地址为192.168.0.0/24段,我们使用burp的暴力破解模块即可:

可以看到枚举出的ip地址为221,也就是192.168.0.221,查看返回包显示会跳转到/admin

目录下,所以我们可以尝试替换目录再次请求:

根据实验要求我们还需要进行删除账户的操作,删除的账户为carlos用户

最后根据表单构造出对应的POST请求数据包即可:

请求成功之后实验就完成了,到此漏洞攻击结束,通过替换对应Host实现了SSRF攻击,在真实场景下可以进行Host碰撞进行ssrf的检测

5.SSRF通过有缺陷的解析:

此次实验也是基于BurpSuite官网靶场进行实验,实验链接如下所示:

https://portswigger.net/web-security/host-header/exploiting/lab-host-header-routing-based-ssrf

根据实验说明,我们需要先访问并抓取一个网站根目录的请求数据包,并且放置到burp的repeater的功能模块:

实验说明第二步要求我们进行http协议的绝路路径的url请求方式进行请求:

使用URL绝对路径的请求方式进行请求,也是可以请求成功的,所以按照步骤来进行测试,之后需要使用burp的DNS域名服务进行辅助测试:

果能收到来自目标的DNS域名请求,就说明目标是存在SSRF漏洞的

接下来按照实验说明需要对192.168.0.0/24网段进行暴力破解测试,还是一样的先抓取一个数据包:

爆破出来的铭感ip地址为192.168.0.181,将爆破成功的数据包发送到repeater进行分析:

请求之后发现存在对应的/admin目录,访问请求查看一下结果:

这边还是存在对应的账户删除的功能,根据实验要求我们还是需要删除对应的账户carlos

请求之后实验就提示已完成了,刷新页面就可以看到结果了

本次实验利用的是URL的绝对路径请求方式进行SSRF攻击,到此实验已完成!!

6.通过标志密码找回缓存中毒:

此次实验基于BurpSute的实验靶场进行测试研究,靶场地址如下所示:

https://portswigger.net/web-security/host-header/exploiting/password-reset-poisoning/lab-host-header-password-reset-poisoning-via-dangling-markup

首先根据实验要求,我们需要去登陆页面使用找回密码的功能

按照实验步骤我们可以构造Host对应的数据包进行测试:

Host请求中可以使用Host:port的方式进行请求

我们在后台查看邮件时可以看到修改的Host请求头会生成在ClickMe的超链接当中:

根据对应的内容我们尝试去构造一下闭合标签进行测试:

请求之后我们去后台的email服务器进行查看,会发现之前的内容都会被覆盖掉:

我们可以在日志当中得到我们的请求数据:

所以接下来我们只需要替换用户就可以拿到carlos重置的密码了:

得到的结果如下所示:

之后我们通过这个密码登陆carlos账户即可完成本次实验:

到此实验完成!!!

7.总结:

通过BurpSuite官网靶场的学习,深入学习了Host头注入漏洞的一些利用方式,通过替换Host头可以访问到一些敏感的资产和内容,也可以通过替换Host来检测是否存在SSRF漏洞,也可以对其进行密码重置和web缓存中毒攻击 (来自武汉安鸾学院第一帅哥的深夜研究)

扫码咨询网络安全培训


文章来源: http://mp.weixin.qq.com/s?__biz=Mzg4NTUwMzM1Ng==&mid=2247498218&idx=1&sn=6e80555fbe3fcde8f4ccbe23c295bcea&chksm=cfa55df9f8d2d4efce48ce6b0d079906e7347a9ccdf9802ff55384f2f5088e13a4c3103fc3ed#rd
如有侵权请联系:admin#unsafe.sh