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头信息,从而进行重置密码的链接的修改。

posted @ 2018-04-08 16:29  babers  阅读(1303)  评论(0编辑  收藏  举报