今天分享的这篇Writeup为作者通过利用目标网站“忘记密码”功能,在重置密码请求发包中添加X-Forwarded-Host主机信息,欺骗目标网站把重置密码的链接导向到自己的服务器,从而实现对受害者账户的完全劫持。

这里,基于保密原因,先假设目标测试网站为redacted.com,在对其测试过程中,我把重点放到了它的“忘记密码”功能处。经过了6个小时的折腾,我发现了其中存在一个非常有意思的漏洞,利用该漏洞可以实现对目标受害者的完全账户劫持。

发现过程

所需工具:BurpSuite、Ngrok Server。Ngrok服务可以将自己本地PC映射到云上的Server公网,目的为将本地PC变成与外部网络交流的终端服务器,间接把云上的Server则变成外网与内网PC之间的中转代理。

1、访问目标网站的忘记密码功能,在其中输入用户名信息请求获得重置密码链接:https://redacted.com/users/forgot_password,Notice:之后目标网站会往你的注册邮箱发送一个重置密码链接。

2、在上过程中,用BurpSuite开启Web抓包,请求包情况如下:

从中我们添加一个X-Forwarded-Host: bing.com来尝试,看看目标网站是否会把这个重置密码链接包含进bing.com;

X-Forwarded-For(XFF)是用来识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段。 Squid 缓存代理服务器的开发人员最早引入了这一HTTP头字段,并由IETF在HTTP头字段标准化草案[1]中正式提出。具体点此处参考。

3、这里,我们打开邮箱,查看目标网站发送过来的密码重置链接长啥样,哇,从发来的邮件中我们可以看到,其中包含了用户Token信息的密码重置链接,大致样子如下:

https://bing.com/users/reset_password/tqo4Xciu806oiR1FjX8RtIUc1DTcm1B5Kqb53j1fLEkzMW2GPgCpuEODDStpRaES

就这样,我们可以认为我的密码重置Token信息已经转发给bing.com了,这里需要对这个Token做个真实验证,所以,我们可以把密码重置链接中的https://bing.com替换成目标网站的https://redacted.com;

4、果然,我们打开了一个能真正实施重置密码的页面!

漏洞利用

根据以上操作和存在的问题,我可以构造网络架构来劫持用户相关信息。步骤如下:

1、通过ngrok服务架设 Attacker服务器;

2、开启Burpsuite抓包,在目标网站的“忘记密码”处输入受害者用户名信息,执行密码重置确定操作;

3、在Burpsuite抓到的密码重置请求包中,添加Attacker服务器,格式如:

X-Forwarded-Host: ngrok.io

其中ngrok.io为Attacker服务器的域名地址。如:

4、 因此,当受害者邮箱收到目标网站发送的密码重置链接中就会包含Attacker服务器的域名地址,如:

http://ngrok.io/users/reset_password/tqo4Xciu806oiR1FjX8RtIUc1DTcm1B5Kqb53j1fLEkzMW2GPgCpuEODDStpRaES

当受害者一不小心点击了该链接之后,就会带着其用户密码重置Token去请求Attacker服务器ngrok.io(这里需要与用户的交互动作);

5、在受害者点开上述链接的同时,在Attacker服务器ngrok.io这边,攻击者看到的将会是包含受害者用户密码重置Token的一个请求信息,如下:

6、到此,攻击者获得了受害者用户的密码重置Token之后,把Attacker服务器ngrok.io替换成目标网站https://redacted.com,加上后续的受害者用户的密码重置Token,就可成功对受害者账户的重置密码,实现对其账户的完全劫持。

我把该漏洞进行上报后,奖励了我3位数美金的奖励$(Between $700-$1000)。感谢阅读。

挖漏经验:在密码重置请求包中添加X-Forwarded-Host实现受害者账户完全劫持相关推荐

  1. 爬虫-在请求头中添加cookie键值对 访问登陆后可见的页面

    关于cookie >笔记 >理解 cookie相当于病人手里的病历 cookie的格式 请求头中添加cookie键值对 练习-不使用cookie访问个人中心 访问人人网个人中心 结果是得到 ...

  2. Vue:全局拦截所有请求,并在请求头中添加token

    Vue:全局拦截所有请求,并在请求头中添加token 在实际的项目中,为了登录的安全,token是必不可少的,所以就需要前后端配合,后端生成和验证token(这方面我也写过博客,讲述后端对token的 ...

  3. ajax被token拦截,vue中封装ajax请求,并且拦截请求在请求头中添加token

    /** * 封装请求方法 * @param {Object} url 接口请求地址 * @param {Object} data 接口请求参数(无需请求方式参数,则此项可以为空,否则必须传) * @p ...

  4. axios请求拦截器在请求头中添加token

    验证用户是否需要登陆,如果需要登陆在请求前在请求头中自动添加token字段. 代码: // request 拦截器 // 可以自请求发送前对请求做一些处理 request.interceptors.r ...

  5. 挖洞技巧:任意账号密码重置

    1.通过忘记密码的方式,拦截数据包,修改接受验证码的手机号或者邮箱帐号. 这里需要的注意的是看系统是否做校验数据,有的只校验了用户信息但是没有校验手机号码,就算收到验证码也是没有不能够正常重置该用户名 ...

  6. 任意用户密码重置的10种姿势

    1.验证码不失效 具体操作流程 2.验证码直接返回 具体操作流程 3.验证码未绑定用户 具体操作流程 4. 修改接收的手机或邮箱 具体操作流程 5.本地验证的绕过 具体操作流程 6.绕过验证步骤 具体 ...

  7. weblogic12c重置密码linux,weblogic 12c忘记domain密码重置方法

    weblogic 12c 忘记域密码重置方法 1.添加java变量 配置环境变量:右击"我的电脑"-->"高级"-->"环境变量" ...

  8. ios计算机错误,解决都叫兽™iOS密码重置与USB连接相关的错误(iOS,Error Code 13)...

    吴川 华南区技术负责人 概要 都叫兽™iOS密码重置可有效帮助您解决忘记密码.设备启动崩溃等问题.本文将针对在Windows系统下使用该软件遇到的"Unstable USB connecti ...

  9. http请求头中Referer的作用及危害

    一.Referer Referer是HTTP请求header中的一部分,其表示请求当前资源的客户端来源,当浏览器(或模拟浏览器行为)向web服务器发送请求的时候,头部信息里会携带Referer. 例如 ...

最新文章

  1. mxnet报错解决:AttributeError: module 'mxnet.context' has no attribute 'num_gpus'
  2. JS——EasyuiCombobox三级联动
  3. python with用法
  4. 关于SAP ABAP字符变量和字符串变量字符个数的一个知识点,和一个血案
  5. android自定义adapter怎么优化,Android必学-BaseAdapter的使用与优化
  6. 伴鱼:借助 Flink 完成机器学习特征系统的升级
  7. exit、break、continue的区别
  8. SSL和数字证书服务慨述(4)
  9. es6 Map,Set 和 WeakMap,WeakSet
  10. paip.软件版本完善计划VC423
  11. bbsmax 2.0 的前世今生,这几年喳喳鸟都在做什么?
  12. 离线式echarts模拟百度迁徙的实现
  13. Eplan教程——项目检查错误 005013/005014:连接点类型不同
  14. 奇点云数据中台技术汇(三)| DataSimba系列之计算引擎篇
  15. 基于51单片机WIFI遥控防盗电子密码锁APP控制方案原理图设计
  16. 【最新面试】2022年软件测试面试题大全(持续更新)附答案
  17. 连接多个内网的方法,想连多少个连多少个
  18. 2021-10-18墨画子卿第一章
  19. 微型计算机显示器的两种引线,第八章章节微型计算机接口技术8-2led显示器接口.ppt...
  20. 佳明 Fenix 7S、佳明Fenix 7和Fenix 7X评测

热门文章

  1. 在一个热图中使用多个颜色主题
  2. 单个基因集富集分析泡泡图绘制
  3. 聚类分析(三)Mini Batch KMeans算法
  4. 电脑怎么换自己的壁纸_怎么才能给自己的爱机一个合理的价格—想把自己电脑回收的...
  5. QT Core | 信号槽02 - GUI上按钮触发应用程序的函数(lambda表达式)
  6. 基于Java聊天系统设计(含源文件)
  7. Linux学习笔记-生成动态库(补充说明)
  8. Qt文档阅读笔记-Qt5录音功能的实现
  9. MySQL入门之触发器
  10. 讯飞C/C++语音合成基础篇