前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >WEB安全新玩法 [4] 防护邮箱密码重置漏洞

WEB安全新玩法 [4] 防护邮箱密码重置漏洞

原创
作者头像
天存信息
修改于 2021-06-28 10:07:18
修改于 2021-06-28 10:07:18
2.2K0
举报

大部分具有账号系统的应用都会提供重置用户登录密码的功能,常见方式之一是:用户输入自己的邮箱地址或手机号,应用向这个邮箱或手机号发送验证码,用户将收到的验证码输入应用中即可完成密码重置。这一过程容易因设计不周全而被攻击者加以利用。iFlow 业务安全加固平台可以为设计不当的应用打上动态虚拟补丁,使之防御可能的恶意利用。


以某网站为例,其邮箱密码重置功能就存在缺陷:获取验证码的邮箱和重置密码的邮箱可以不一致。攻击者能够给任意邮箱所代表的用户设置新的登录密码,从而冒充受害者登录。当然,我们也会介绍如何在不修改网站源代码的前提下,使用 iFlow 实现业务逻辑缺陷的修补。

一、原始网站

1.1 正常用户访问

在密码重置页面,正常用户「alice」在手机/邮箱中输入自己的邮箱地址,如 alice@mail.com,点击获取验证码按钮。

图1
图1

网站为避免攻击者滥用邮件发送,弹出图形码进行验证。用户正确填写字符并确认后,网站系统后台发送邮件验证码到用户「alice」的邮件地址 alice@mail.com 中。

图2
图2

用户进入到邮件系统中收取寄给 alice@mail.com 的邮件,将邮件中的验证码和需要重置的登录密码填写到表单中并提交。

图3
图3

网站判断用户输入的邮箱验证码是正确的,就将 alice@mail.com 所代表的用户的登录密码设置为新的密码,操作成功。

各个实体的交互流程如下:

表1
表1

1.2 攻击者访问

此处,网站在重置密码的业务处理上有个逻辑缺陷:并未确保发送邮箱验证码时的邮箱地址和设置新密码时的邮箱地址是一致的。

缺陷利用方法如下:在前面的步骤中,攻击者「mallory」使用自己的邮箱 mallory@mail.com 获取验证码。

图4
图4

在收到邮箱验证码并正确填写后,攻击者「mallory」将表单中的手机/邮箱内容改为 alice@mail.com (之前填的是 mallory@mail.com ),然后再填写新的登录密码并提交确认。

图5
图5

网站判断用户输入的邮箱验证码是正确的,就将 alice@mail.com 所代表的用户的登录密码设置为新的密码。如此一来,攻击者「mallory」成功重设了受害者「alice」的密码,并可以使用「alice」的身份登录网站。

各个实体的交互流程如下:

表2
表2

二、iFlow虚拟补丁后的网站

我们在 Web 服务器前部署 iFlow 业务安全加固平台,它有能力拦截、计算和修改双向 HTTP 报文并具备存储能力,成为 Web 应用的虚拟补丁。在本例中,iFlow 可保存发送验证码时的邮箱地址,并在之后设置密码时将其与输入的邮箱地址作对比,发现并制止篡改行为。

2.1 正常用户访问

iFlow 在图形验证码通过时,将请求中的邮箱地址保存在 IP 存储中,在设置新密码时进行以下检查:

1) 该 IP 进行过发送验证码的操作;

2) 该 IP 要设置密码的邮箱地址与发送验证码时的邮箱相同。

各个实体的交互流程如下:

表3
表3

2.2 攻击者访问

如前所示,攻击者在收到邮箱验证码之后,且未提交重设密码之前,修改了邮箱地址。iFlow 会检查到这个变化,依此可判断这是一个攻击者在访问,于是终止此过程,不会让系统后端真正去修改受害者的登录密码。

攻击者的 HTTP 协议交互过程如下:

表4
表4

2.3 代码

iFlow 内置的 W2 语言是一种专门用于实现 Web 应用安全加固的类编程语言。它介于配置和通用语言之间,具备编程的基本要素和针对 HTTP 协议的特有扩展,能为业务系统编写涉及复杂判断和动态修改的逻辑。

考虑到安全产品的使用者通常为非程序员,他们习惯面对配置文件而非一段代码。因此,W2 语言虽包含语言要素,仍以规则文件方式呈现,并采用可以体现层次结构和方便词法校验的 JSON 格式。

用 W2 语言实现上述虚拟补丁的代码如下:

代码语言:txt
AI代码解释
复制
[
	{	
		"if": [
			"streq(REQUEST_FILENAME, '/shopx/index.php')",
			"streq(@ARGS.s, '/index/user/forgetpwdverifysend.html')"
		],
		"then": {
			"if": "REAL_IP.the_mail",
			"then": {
				"verdict": {
					"action": "deny",
					"log": "There is a user having reset password."
				}
			},
			"else": {
				"if": "contain(RESPONSE_BODY, '\"code\":0,')",
				"then": {
					"execution": "REAL_IP.the_mail@120=@ARGS.accounts"
				}
			}
		}
	},
	{
		"if": [
			"streq(REQUEST_FILENAME, '/shopx/index.php')",
			"streq(@ARGS.s, '/index/user/forgetpwd.html')"
		],
		"then": {
			"if": {
				"or": [
					"!REAL_IP.the_mail",
					"strne(@ARGS.accounts, REAL_IP.the_mail)"
				]
			},
			"then": {
				"verdict": {
					"action": "deny",
					"log": "Invalid ${@ARGS.accounts} access"
				}
			},
			"else": {
				"execution": "REAL_IP.the_mail=null"
			}
		}
	}
]

示例代码中有两条规则,分别作用如下:

第一条规则

当服务器返回图形验证结果时,iFlow 拦截此响应。如果在同一个访问端 IP 上已经在进行重置密码操作,则终止这次操作 (避免重复及交叉操作);否则当验证结果为通过时,在访问者 IP (REAL_IP) 中创建存储变量 the_mail ,其值为用户输入邮箱地址。

第二条规则

当浏览器请求确认重置密码时,iFlow 拦截此请求。iFlow检查请求参数 accounts 与访问者 IP (REAL_IP) 中存储变量 the_mail 是否相等:如果相等则清除 the_mail ,以开放此访问者 IP 上的重置密码业务;如果不相等则阻止该用户的继续操作。

注意:上述会话中的 the_mail 是保存在服务器端的 iFlow 存储中的,攻击者在浏览器端是看不到数据更无法进行修改的。

三、总结

iFlow 使用两条规则在不修改服务器端代码的前提下,透明地保证了重置密码时邮箱地址的一致性。从这个例子中我们可以看到,iFlow 适合构造前后报文相关联的复杂防护逻辑。(张戈 | 天存信息)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
WEB安全新玩法 [9] 重置密码之验证流程防绕过
一般来说,业务流程中出现多个操作环节时,是需要顺序完成的。程序设计者往往按照正常用户的操作顺序实现功能,而忽略了攻击者能够绕过中途环节,直接在后续环节上进行非法操作。iFlow 业务安全加固平台能够在不修改网站程序的情况下,强制流程的顺序执行。
天存信息
2021/07/29
1.2K0
WEB安全新玩法 [9] 重置密码之验证流程防绕过
逻辑漏洞之密码重置
案例介绍: 问题出现在忘记密码处,可以通过手机找回和邮箱找回密码两种方式获得指定帐户的新密码设置权限
信安之路
2018/08/08
1.6K0
逻辑漏洞之密码重置
WEB安全新玩法 [6] 防范图形验证码重复使用
在完成关键业务操作时,要求用户输入图形验证码是防范自动化攻击的一种措施。为安全起见,即使针对同一用户,在重新输入信息时也应该更新图形验证码。iFlow 业务安全加固平台可以加强这方面的处理。
天存信息
2021/06/30
1K0
WEB安全新玩法 [6] 防范图形验证码重复使用
WEB安全新玩法 [1] 业务安全动态加固平台
近年来,信息安全体系建设趋于完善,以注入攻击、跨站攻击等为代表的传统 Web 应用层攻击很大程度上得到了缓解。但是,Web 应用的业务功能日益丰富、在线交易活动愈加频繁,新的安全问题也随之呈现:基于 Web 应用所承载的交易特性,某些利用其业务逻辑设计缺陷来构造的针对具体业务的攻击逐渐成为主流,我们称之为业务层攻击。
天存信息
2021/06/22
4910
WEB安全新玩法 [1] 业务安全动态加固平台
WEB安全新玩法 [5] 防范水平越权之查看他人订单信息
水平越权是指系统中的用户在未经授权的情况下,查看到另一个同级别用户所拥有的资源。水平越权会导致信息泄露,其产生原因是软件业务设计或编码上的缺陷。iFlow 业务安全加固平台可以缓解部分场景下的水平越权问题。
天存信息
2021/06/29
1.1K0
WEB安全新玩法 [5] 防范水平越权之查看他人订单信息
任意用户密码重置(四):重置凭证未校验
在逻辑漏洞中,任意用户密码重置最为常见,可能出现在新用户注册页面,也可能是用户登录后重置密码的页面,或者用户忘记密码时的密码找回页面,其中,密码找回功能是重灾区。我把日常渗透过程中遇到的案例作了漏洞成因分析,这次,关注因重置凭证未校验导致的任意用户密码重置问题。 传送门: 任意用户密码重置(一):重置凭证泄漏 任意用户密码重置(二):重置凭证接收端可篡改 任意用户密码重置(三):用户混淆 密码找回需要鉴别用户的合法身份,证明你就是你,通常有两种做法,一是网站将重置验证码发至用户绑定的邮箱或手机号,用户持重置
FB客服
2018/03/22
2.6K0
任意用户密码重置(四):重置凭证未校验
乌云——任意密码重置总结
找这个漏洞时候,先把流程过一遍,两遍,观察数据包,测试时候就可以比较哪个不一样,就可以知道修改什么了。
天钧
2019/11/11
1.7K0
乌云——任意密码重置总结
任意用户密码重置(一):重置凭证泄漏
在逻辑漏洞中,任意用户密码重置最为常见,可能出现在新用户注册页面,也可能是用户登录后重置密码的页面,或者用户忘记密码时的密码找回页面。其中,密码找回功能是重灾区。我把日常渗透过程中遇到的案例作了漏洞成
FB客服
2018/02/24
3.7K0
任意用户密码重置(一):重置凭证泄漏
WEB安全新玩法 [2] 防范前端验证绕过
用户登录,几乎是所有 Web 应用所必须的环节。Web 应用通常会加入一些验证手段,以防止攻击者使用机器人自动登录,如要求用户输入图形验证码、拖动滑动条等。但是,如果验证的逻辑仅仅在前端执行,是很容易被攻击者绕过的。iFlow 业务安全加固平台可以为只使用前端验证的应用打上动态虚拟补丁,使之成为需要前后端配合执行的验证逻辑,大幅度提高攻击者的攻击难度。
天存信息
2021/06/23
1.8K0
WEB安全新玩法 [2] 防范前端验证绕过
WEB安全新玩法 [11] 防范批量注册
网站的攻击者通过批量注册用户,能够实施大规模非法操作,如抢优惠券、恶意刷单等。这给服务商造成了直接的经济损失,而大量的垃圾用户也会占用系统资源,增加系统运行压力。防范批量注册需要针对系统特点,多管齐下综合应对,iFlow 业务安全加固平台可以提供各种防范批量注册的技术实现方式。
天存信息
2021/08/03
1.1K0
WEB安全新玩法 [11] 防范批量注册
任意用户密码重置(三):用户混淆
在逻辑漏洞中,任意用户密码重置最为常见,可能出现在新用户注册页面,也可能是用户登录后重置密码的页面,或者用户忘记密码时的密码找回页面,其中,密码找回功能是重灾区。我把日常渗透过程中遇到的案例作了漏洞成因分析,这次,关注因用户混淆导致的任意用户密码重置问题。 密码找回逻辑含有用户标识(用户名、用户 ID、cookie)、接收端(手机、邮箱)、凭证(验证码、token)、当前步骤等四个要素,若这几个要素没有完整关联,则可能导致任意密码重置漏洞。 ---- 案例一:通过 cookie 混淆不同账号,实现重置任意用
FB客服
2018/02/23
1.9K0
任意用户密码重置(三):用户混淆
挖洞经验 | 利用密码重置功能实现账号劫持
最近,我参加了某平台邀请的漏洞测试项目,在其中发现了一个独特的账号劫持漏洞,整个漏洞发现过程非常意外也非常幸运,通过密码重置功能就能实现账号劫持,在此我就把它写成 writeup 分享出来。由于测试项目的保密和隐私原则,抱歉截图太少,且下文中涉及的网站域名部分我已作了编辑隐藏,敬请见谅。
FB客服
2018/07/30
1.1K0
挖洞经验 | 利用密码重置功能实现账号劫持
业务逻辑漏洞总结[通俗易懂]
逻辑漏洞就是指攻击者利用业务/功能上的设计缺陷,获取敏感信息或破坏业务的完整性。一般出现在密码修改、越权访问、密码找回、交易支付金额等功能处。
全栈程序员站长
2022/09/01
3.1K0
WEB安全新玩法 [3] 防护交易数据篡改
在任何涉及交易的系统中,客户与商家之间的交易数据具有核心作用,如购买商品的价格、数量、型号和优惠券等。在客户挑选商品的过程中,这些交易数据逐渐形成;待客户提交订单时,交易数据被商家接收,形成双方认可的订单。交易数据在形成过程中必须要有可靠的临时存储,而不可靠的存储会允许攻击者提交伪造的交易数据,使商家利益受损。
天存信息
2021/06/24
1.7K0
WEB安全新玩法 [3] 防护交易数据篡改
PRMitM:一种可重置账号密码的中间人攻击,双因素认证也无效
在今年的IEEE研讨会上,来自以色列管理学术研究学院的研究人员展示了一种新的攻击方法。这种攻击方法被命名为PRMitM,意为“密码重置中间人攻击(Password Reset MitM Attack)”。黑客可以利用这种攻击手法对受害者的账号进行密码修改。 研究人员称,Google极易受到攻击,而Facebook, Yahoo, LinkedIn, Yandex和其他邮箱服务、手机应用(包括Whatsapp、Snapchat、Telegram)也比较容易受到攻击。 攻击流程 首先攻击者需要搭建一个网站,并且
FB客服
2018/02/28
1.9K0
PRMitM:一种可重置账号密码的中间人攻击,双因素认证也无效
密码重置漏洞相关介绍
密码重置功能是一些常见漏洞的起因。例如用户名枚举漏洞(数据库中用户名不存在和密码错误显示不同的错误信息),敏感信息泄露(把明文密码通过e-mail发送给用户)重置密码消息劫持(攻击会者接收到密码重置信息)这些都是在密码重置功能中比较常见的漏洞。 很多开发者都不能真正了解密码重置所能引发的危害,而下文是介绍一些不遵守基本安全准则的开发人员所开发的密码重置功能会带来的危害。 例如,一个的密码恢复重置功能会生成一个令牌,并通过电子邮件发送一个包含令牌的重置密码连接给用户。
安恒信息
2018/04/10
9920
任意用户密码重置的姿势
验证码的有效时间没有合理的进行限制,导致一个验证码可以被枚举猜解;举例:我们重置密码需要邮件或短信接受验证码,而这个验证码没有时间限制,可以无限制的重复使用,由此带来了安全问题,攻击者通过验证码枚举获得。
Mirror王宇阳
2020/11/13
7080
【Django | allauth】登录_注册_邮箱验证_密码邮箱重置
如果觉得邮箱提示地址 example.com 名字太丑,还可以在admin 中修改 display\_name
计算机魔术师
2022/08/16
3.9K0
企业安全体系建设之路之Web安全篇
目前的网络攻击主要还是以WEB攻击为主流,毕竟这是与外界沟通获取知识和了解世界的主要桥梁。
HACK学习
2019/08/06
1.2K0
企业安全体系建设之路之Web安全篇
看我如何发现Facebook密码重置漏洞获得$15000赏金(附POC)
本文讲述了我在Facebook上发现的一个任意账户密码重置漏洞,利用该漏洞无需用户交互过程,就可以黑掉任何Facebook账户。总体来说,该漏洞非常简单,但影响和威胁严重度较高,最终我获得了Facebook方面奖励的$15000美元赏金。 漏洞情况 该漏洞原理在于,我可以获取任意其他用户的密码重置权限,通过简单地密码重置操作,我就能获取到其他账户的消息、FB支付区域的借记卡信息、个人照片等其它隐私信息。最终,Facebook确认了该漏洞,并作出了迅速的修复措施。 漏洞分析 当Facebook用户忘记了登
FB客服
2018/04/18
1.7K0
看我如何发现Facebook密码重置漏洞获得$15000赏金(附POC)
推荐阅读
相关推荐
WEB安全新玩法 [9] 重置密码之验证流程防绕过
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文