当前位置: 首页 > 科技观察

如何绕过小程序签名验证

时间:2023-03-14 19:24:01 科技观察

在一些关键的业务接口中,系统通常会对请求参数进行签名验证。一旦参数被篡改,服务器会提示签名验证失败。在黑盒渗透的过程中,如果没有办法绕过签名验证,就无法做进一步的漏洞检测。微信小程序前端代码可以轻松反编译。一旦公开了签名加密算法和密钥,并找到参数的排序规则,就可以篡改任何数据,根据算法伪造签名。1.常见的签名算法首先需要说明的是,加密和签名是两个不同的东西。加密是为了防止信息泄露,而签名的目的是为了防止数据被篡改。哈希算法和非对称算法(私钥签名、公钥验证)的不可逆性为签名的实现提供了必要的前提条件。常见的签名算法,如:MD5、SHA1、SHA256、HMAC-SHA1、HMAC-SHA256、MD5WithRSA、SHA1WithRSA、SHA256WithRSA等各种签名示例如下:可以看出,常见的HASH签名的输出长度算法是固定的,RSA签名的长度取决于密钥大小,输出比较长。2.RSA签名绕过下面通过一个简单的RSA签名绕过案例来了解签名逆向过程。例如在微信小程序游戏场景中,用户需要在游戏结束时将游戏分数发送给后台记录玩家的分数。因为调用API时会对请求参数进行签名校验,服务器端会校验请求参数是否合法,所以当我们尝试篡改游戏分数时,会提示签名异常。那么,如何破局呢?(1)微信小程序反编译解包使用模拟器获取微信小程序.wxapkg包使用反编译脚本解包获取小程序前端源码。(2)逆向破解小程序参数签名将小程序前端代码复制到本地,Sign值比较长,盲猜RSA签名算法,全局搜索关键词,因为关键js代码不是混淆加密后,很容易得到RSA签名算法和私钥。最常见的是将所有的请求参数按照参数名进行ASCII码排序,这里我们可以很方便的从前端代码中获取参数顺序。(3)基于jsrsasign的rsa签名验证,尝试篡改请求参数,构造签名并计算Sign值。构建http数据包,成功伪造签名篡改游戏结果。