微信小程序的任意用户登录实战

admin 2023年2月10日19:30:16评论905 views字数 2110阅读7分2秒阅读模式
NO.1
微信小程序的任意用户登录实战
 小程序开放数据获取基本流程

     小程序可以通过各种前端接口获取微信提供的开放数据。考虑到开发者服务端也需要获取这些开放数据,微信提供了两种获取方式:

· 方式一:开发者后台校验与解密开放数据

· 方式二云调用直接获取开放数据(云开发

本文简单分享一下开发者后台校验与解密开放数据部分的漏洞形成与案例。

微信小程序的任意用户登录实战

为了保证数据安全,微信会对用户数据进行加密传输处理,所以小程序在获取微信侧提供的用户数据(如手机号)时,就需要进行相应的解密,这就会涉及到session_key

NO.2
微信小程序的任意用户登录实战
 漏洞形成

1、开发者后台校验与解密开放数据

小程序授权时若通过微信处获取用户信息,则需要调用接口获取登录凭证(code)。通过凭证获取用户登录信息,即用户对当前小程序的唯一标识(openid)、用户对小程序主体的唯一标识(unionid)、用户本次登录的会话密钥(session_key)等信息。

代码及数据包信息如下:

微信小程序的任意用户登录实战微信小程序的任意用户登录实战

授权后小程序可获取用户信息,微信对用户信息做AES加密处理,即利用session_keyiv对用户数据进行加密,生成加密参数encryptedData。其中,session_key指的是会话密钥,可以简单理解为微信开放数据AES加密的密钥,它是微信服务器给开发者服务器颁发的身份凭证,这个数据正常来说是不能通过任何方式泄露出去的。小程序若存在session_key泄露漏洞的情况,则代表微信侧传递的用户数据有被泄露、篡改等风险

数据包信息如下:

微信小程序的任意用户登录实战

 2、数据加解密算法

涉及用户敏感数据的加密参数encryptedData,需iv及session_key通过AES解密,具体加解密算法如下:

1. 对称解密使用的算法为 AES-128-CBC,数据采用PKCS#7填充。

2. 对称解密的目标密文为 Base64_Decode(encryptedData)。

3. 对称解密秘钥 aeskey = Base64_Decode(session_key), aeskey 是16字节。

4. 对称解密算法初始向量 Base64_Decode(iv),其中 iv 由数据接口返回。

3、漏洞成因

当用户存在session_key泄露,可对当前用户的encryptedData进行解密,并修改用户登录信息,例如手机号等。修改为其他用户信息后,对新信息进行加密并重放,可实现任意用户登录。其中,session_key可能泄露的具体如下:

1. Code2Session接口https://XXX/ /OnLogin?code=0031VH0w300XXX

wx.login 接口获得临时登录凭证code后传到开发者服务器,生成session_key

2. 在解密开放数据时, 将服务端中的session_key传送至小程序前端,直接在前端进行解密,泄露session_key

NO.3
 漏洞案例

发现当用户在授权小程序登录时,存在sessionKey泄露,导致该小程序可以使用任意手机号进行绑定登录,造成任意用户登录漏洞。数据包关键信息如下:

微信小程序的任意用户登录实战

绑定手机号中关键参数为encryptedDataivsessionKey。其中encryptedData为绑定用户的手机号、appid等信息;iv为偏移量;sessionkey为会话密钥,是微信开放数据AES加密的密钥,它是微信服务器给开发者服务器颁发的身份凭证,这个数据正常来说是不能通过任何方式泄露出去的。当小程序session_key泄露,则微信侧传递的用户信息可篡改。

对小程序进行任意用户登录,测试流程如下:

1.手机绑定处数据包信息如下:

微信小程序的任意用户登录实战

2.利用iv及sessionKey对encryptedData进行解密,其中iv和sessionkey均为base64加密,但正常解密后上述两参数为字节码,无法正常对encryptedData参数进行解密,利用脚本解密结果如下:

微信小程序的任意用户登录实战

3.修改参数phoneNumber为其他账号,再进行加密,并用该结果替换数据包中encryptedData结果如下:

微信小程序的任意用户登录实战

       4.利用小程序接口、userIdtoken访问用户信息,如下:微信小程序的任意用户登录实战当前登录用户手机号为13888888888,任意用户登录成功。

NO.4
微信小程序的任意用户登录实战
 修复建议

请尽快在网络请求中,去除请求和响应中的session_key字段及其对应值,后续也不应该将session_key传到小程序客户端等服务器外的环境,以便消除风险。

NO.5
 参考文章

安全课堂|关于小程序session_key泄露漏洞 | 微信开放社区

加解密工具下载地址:https://github.com/mrknow001/wx_sessionkey_decrypt


免责申明:    

本项目仅进行信息搜集,漏洞探测工作,无漏洞利用、攻击性行为,发文初衷为仅为方便安全人员对授权项目完成测试工作和学习交流使用。   

请使用者遵守当地相关法律,勿用于非授权测试,勿用于非授权测试,勿用于非授权测试~~(重要的事情说三遍)~~,如作他用所承受的法律责任一概与千寻安服无关。


微信小程序的任意用户登录实战
END

监制:船长、铁子   策划:AST   文案:molin   美工:青柠

原文始发于微信公众号(凌晨安全):微信小程序的任意用户登录实战

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年2月10日19:30:16
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   微信小程序的任意用户登录实战https://cn-sec.com/archives/1547255.html

发表评论

匿名网友 填写信息