前言
在数字化时代,二维码已成为我们日常生活中不可或缺的一部分。从在线支付到获取信息,二维码为我们提供了便捷高效的方式。然而,这种便利性也带来了风险。近年来,二维码诈骗案件频发,许多不法分子通过伪造或篡改二维码进行欺诈,使无数消费者蒙受经济损失。这种新型诈骗手法利用了公众对二维码的广泛信任及使用频率,通过技术手段对二维码进行植入恶意软件,窃取个人信息甚至直接骗取资金。社会对此类诈骗的认知和防范意识远远不够,使得防范措施的落实显得尤为重要。因此,深入探讨二维码诈骗的手法、影响以及防范措施,对于保护消费者权益,促进数字支付环境的安全有着重要的现实意义。
登陆场景
在我的研究中,我发现目前市面上主要存在三种不同的登录场景模式。每种模式的核心差异在于其登录认证的严格程度。
通过扫描二维码登录PC系统
这种方式通常需要手机端已经登录。用户只需扫描PC网页上的二维码,即可在不进行额外登录确认操作的情况下,自动登录到网页版应用程序。这一过程依赖于服务端的认证系统和用户账户的绑定,例如,通过微信APP扫描登录到其网页版,利用OAuth认证体系实现PC端的自动登录。
使用二维码的双因素认证
在这种模式下,用户首先需要在PC端使用账户和密码登录,例如登录到微信公众号平台。然后,在手机端微信已登录的状态下,扫描PC端显示的二维码进行确认,从而完成对网页版的登录。
SQRL(Secure Quick Reliable Login)登录方式
SQRL提供了一种直接通过扫描二维码登录的方式,无需使用账户和密码。这种登录方式简化了登录步骤,使用户能够更快速且安全地访问服务。
首先,用户在PC端打开应用程序后,系统会向服务端发起登录请求。服务端随即生成一个带有PC端唯一标识(如session ID或UUID)的二维码,并显示在PC端。
随后,PC端开始定期发送请求以维持二维码的有效性。这一过程,即为轮询,目的是确保二维码在整个登录过程中保持活跃状态。系统通过轮询检查二维码的当前状态——新生成的、已扫描的、已确认的、已拒绝的或已过期的。
在手机端,用户已登录的情况下,扫描PC端显示的二维码。二维码状态随即更新为“已扫描”,并在手机端提示用户确认是否登录。
用户在手机端确认登录后,二维码状态更新为“已确认”。
一旦二维码状态被确认,PC端与手机端的登录连接便建立完成,PC端停止对二维码的轮询查询。
劫持原理
在分析了基本的二维码登录认证流程和不同的登录场景之后,我们可以探讨一个潜在的登录劫持攻击场景。这种场景假设用户在扫描二维码并在应用端确认登录之后才能成功登录。以下是一个示例攻击过程:
伪装二维码: 攻击者首先创建一个钓鱼网站,该网站的登录二维码外观和行为模仿一个合法的公众号或受信任的服务的二维码。
维持二维码有效性: 攻击者利用服务器轮询技术来维持伪造二维码的有效性,确保当受害者扫描这个二维码时,它仍然是活跃的。
设置钓鱼页面: 在钓鱼页面上,攻击者可以设置一个自动触发的脚本,这个脚本在用户扫描二维码之后模仿用户点击确认登录按钮。这可以通过JavaScript代码实现,自动发送登录确认请求。
截取登录凭证: 当用户扫描这个伪造的二维码并且钓鱼网站自动发送登录确认时,攻击者可以通过监听网络交互来截取用户的登录凭证。
会话劫持: 一旦获取了登录凭证,攻击者可以使用这些凭证构造一个已认证的会话链接,进而访问和操作用户账户,获取敏感信息。
此种攻击方式利用了用户对二维码登录方式的信任和对技术流程的不熟悉。为防止此类攻击,建议用户在扫描二维码时仔细检查其来源的合法性,并使用额外的安全措施,如双因素认证,以增强账户的安全性。同时,服务提供商应确保他们的登录流程能够抵抗此类钓鱼攻击,例如通过在用户设备上显示额外的安全提示或者登录地点和时间的验证。
认证流程
亲身体验胜过千言万语。通过搜索引擎查找微信扫码登录的相关内容,确定一个目标后,亲自执行一次登录过程进行分析,步骤从扫描二维码开始。
此时,系统开始轮询以检查二维码的状态。如果返回的状态码为408,表示当前处于轮询中,用户尚未完成登录操作。
扫描完二维码后,PC端会显示“扫描成功”的提示,表明二维码已被正确识别。
此时,如果状态显示为404,通常表示已扫描状态,但这可能是一个错误码表示找不到请求的资源。一般来说,应该有一个更具体的状态码或消息来准确表示“已扫描”这一状态。如果确实用404来表示已扫描,那么这可能是特定系统的自定义用法。
此时,你应该在手机或其他授权设备上点击“登录”按钮,以完成认证过程并正式登录到系统。这一操作将验证你的身份并授权你访问关联的服务或应用。
点击登录后,如果PC端显示“登录成功”,这意味着认证过程已经完成,你现在已经成功地访问了系统或服务。你可以开始使用所有相关的功能和资源。
我们现在来回顾并分析整个登录流程:
启动流程:首先访问网站的微信扫码登录页面,通过以下链接获取二维码和对应的应用程序ID(appid)。
https://open.weixin.qq.com/connect/qrconnect?appid=wxef0e36842be56d2d&redirect_uri=https://www.xxx.com/e/memberconnect/weixin/loginend.php&response_type=code&scope=snsapi_login&state=xxx
维护二维码有效性:网页定期发送请求以确保二维码的有效性,期间如果服务器返回状态码为408,则表示正在轮询。轮询的链接示例如下,其中uuid是PC端的唯一标识符,末尾的数字表示轮询的序号。
https://lp.open.weixin.qq.com/connect/l/qrconnect?uuid=xxxx&_=1596604727840
扫描二维码:当用户扫描二维码后,状态更新为“已扫描”,但显示为404错误,这表示未完成登录。相关链接如下:
https://lp.open.weixin.qq.com/connect/l/qrconnect?uuid=xxxx&last=404&_=1596602065382
登录确认:用户需在手机应用端点击登录,这一动作成功后,相关内容通过以下链接获取:
https://www.xxx.com/e/memberconnect/weixin/loginend.php?code=xxx&state=xxxx
验证登录成功:重新发送轮询链接后,返回包含登录码(code)的信息,显示如下:
window.wx_errcode=405;window.wx_code='xxxxxxxxx';
对登录URL进行分析:
https://www.xxx.com/e/memberconnect/weixin/loginend.php?code=xxxx&state=xxx
发现关键参数包括
code
和state
。state
参数在请求的referer
字段中出现,并且在轮询过程中的数据包中也存在。获取code
的值和登录cookie后,理论上可以伪造登录。
这个分析有助于理解微信扫码登录的技术细节及其潜在的安全考虑,特别是在处理敏感登录信息和会话数据时的重要性。
已登录报文
轮询报文
Cookie
继续进行轮询请求后,如果遇到状态码405表示登录已经生效,并且系统会返回一个包含code值的数据字段。
尝试攻击
我们的计划是在用户成功登录时获取他们的cookie。此外,我们将通过持续的轮询过程来提取code字段的值,同时重复提交验证请求,以维持二维码的活跃状态。为了测试这一流程,我将使用一个备用账号进行尝试。
目标是获取用户的cookie及相应的code
值。
利用已截获的cookie和code值,攻击者尝试模拟用户身份进行登录,成功地访问系统。
反思
不要随便扫描二维码,尤其是路,地铁,公交,商场等地方!
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...