MetInfo Host头污染导致重置用户密码

if we know some user's email, the we will can reset the user's email by host header attack. 如果我们知道了某个注册用户的邮箱,那么我们就能够通过头注入的方式重置任意用户的密码。所以这个漏洞的攻击前提是在于用户必须要绑定邮箱,且我们知道这个用户的邮箱。

正常的找回密码发送的请求如下:

通过这个图片可以看出来,由于我们是在本地搭建的,所有请求头是localhost。所以我们收到的重置密码的链接如下:

其中这个重置密码连接的Host头就是来自于我们上面找回密码发送请求时的Host头。如果我们修改找回密码时的请求头为我们的恶意Host,那么重置密码的链接也将发生改变。

所以如果一个攻击这修改了请求头为自己的DNS服务器,并且知道某位用户的邮箱,就可以发送一份伪造的重置密码的邮件到用户的邮箱。当用户点击之后,攻击者就可以收到这个请求包括其中的Token,攻击者将其替换为真实的请求头,那么就可以修改掉用户的密码了。

操作步骤如下:

  1. 修改重置密码请求的Host头

  2. 用户收到的重置密码邮箱如下:

  3. 用户点击重置密码的连接

  4. 攻击者通过自己的DNS服务器收到如下的信息。

  5. 攻击者将其替换为真实的请求头,让访问这个连接就可以修改用户的密码了。

漏洞原因:

造成这个漏洞的原因是在于,在进行邮件请求地址拼接的时候,使用是通过$_M取的host都信息,而$_M是通过$_SERVER['HTTP_HOST']直接获取的HOST头信息,没有进行任何的校验,所以导致攻击者能够能够修改Host头信息,从而进行重置密码的链接的修改。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

Shiro要点概览与SpringBoot整合实例

1\.简介概念说明Subject主体,简化点说就是用户实体PrincipalSubject的唯一标识,如id、用户名、手机号、邮箱等Credential凭证信息,主体证明自己的东西,如密码、证书等Authenticator认证器,对Subject身份进行认证,例如验证用户的用户名和密码是否匹配Aut