1.通过 host 进行缓存投毒

找个界面进行抓包,先修改一下 Host 发现页面报错,后端可能对 host 头进行了严格校验,不改变当前 host,添加一个新的 host 头

页面不报错,通过搜索发现添加的 host 出现在了
原因可能在于代理/后端链路中不同组件(前端缓存/代理 vs 后端应用)解析重复 Host 的策略不同,第二个 host 被拼进了一段 js 代码 src=…/+一段固定路径
那这样的话我可以控制资源请求的地址路径,执行恶意代码

借用 bp 修改路径,再对应路径下的文件中写入恶意代码,受害者访问当前页面会触发缓存,自动向设置的攻击者的服务器请求资源,进而执行恶意代码
2.主机头认证绕过

直接访问管理员界面提示只对本地人开放
测试 host 头发现可任意修改请求头仍返回正确页面,后端并没有对 host 进行校验
修改为 host 为 local host 正确绕过,开始使用 127.0.0.1 不行
3.通过有缺陷的请求解析实现 ssrf
实验需要依旧是需要通过内网地址访问管理员界面,抓包

首先测试按惯例测试 host 头,发现服务器对 host 进行了严格校验,修改 host 就会导致错误,再试下添加一个 host 头也不行,有点束手无策,查看题解知道 GET 请求部分可以用绝对 url 替换

当我在 get 请求中用绝对url 发包时发现响应不再是错误而是显示超时,说明这次的请求没有直接被服务器过滤掉,再次修改 host 请求头部分也没有显示错误而是超时,说明服务器只对 url 部分进行了校验,绝对 url 对了则通过请求,在后面在通过 host 的值去请求资源,这种请求解析的不一致性导致了漏洞长生的可能,我们可以通过 get 请求的绝对 url 绕过校验,再通过 host 去探测内网

在 host 部分插入 bp 生成的子域名,发包后响应正常,说明的确存在 ssrf 漏洞

爆破内网地址来探测内网,记得关闭更新 host
得到存在一个内网 IP192.168.0.233

成功访问管理员面板!!
4.利用连接状态绕过 host 检验

直接访问不出意外报错

修改 host 发包会重定向到登陆界面
仔细观察发包内容的话时会发现有一个 connection:keep-alive,保持会话连接
根据题目开头的描述应该是通过开始的合法请求维持链接状态时再发送带有攻击的请求
开始想的是先发一条合法请求,返回包不是有 timeout=10 吗,在这个时间内再发一条不合法请求,结果发现不行
查看题解发现这样是不能达到让我发的两个请求保持在同一会话连接的,要按照固定的步骤

通过右上角的三个点设置将两个请求放到一个组里面,再选择 single connection,这时选择发送,这样就是在同一连接里发送两个序列请求了
剩下的如上题