Web攻防

微信小程序渗透Tips

2024-03-23  本文已影响0人  book4yi

前言:


吃梅菜扣肉,喝听花白酒,撸淀粉肠子,品怨种人生。

小程序反编译:


0x01、获取代码包:

PC端:默认存储位置:%USERPROFILE%\Documents\WeChat Files\id\APP_.wxapkg就是我们要找的加密包
移动端:/data/data/com.tencent.mm/MicroMsg/xxxxxxxxxxxxxxxxxxxxxxxx/appbrand/pkg

0x02、解密代码包

目前因为微信更新了,需要使用unveilr来进行反编译:

反编译成功后,会在当前目录下生成一个 APP文件夹,这里面就是小程序源码。

可以使用微信小程序开发者工具打开:

0x03、sign签名绕过:

这里以父母邦亲子旅行酒店营地乐园活动小程序为例,在修改手机号处进行测试,观察到数据包如下:

当我们修改请求体中的数据再发送会提示签名失败,这时我们翻阅它的源码,看看这个sign是如何生成的:

整个 create_sign 函数的目的是将对象 r 的所有有效属性(除去某些特定属性)的所有内容按照键值对顺序排序、拼接成字符串并存储到数组 e,最后与传入的 t 参数连接起来进行MD5哈希运算,生成最终的签名。

按照上述请求包,最后得到的值是:phone_num=15xxxxxxxx5&scene=1256&version=3.3.13d19e4abd1036063faa4218c139378c0e

返回值为9a811d3130600d1399945346c59c0c07,可以发现是md5加密,未加盐。

编写js,引用该方法:

"use strict";
var a = require("./md5.js");
var i = {"phone_num":"15xxxxxxxx5","scene":1256,"version":"3.3.13", "appid":648481988}
i.sign = a.create_sign(i, "d19e4abd1036063faa4218c139378c0e");
console.log(i);

0x04、burpy插件使用:


在分析加密方式后,如果是自己写脚本或通过网站加解密再粘贴到burp中进行测试,都十分麻烦。因此,可以考虑结合burpy插件来进行漏洞测试。

脚本编写:

def encrypt(self, header, body):
    '''
    Auto Enc/Dec feature require this function
    '''
    enc_str = ''
    json_body = json.loads(body)
    json_body['sign'] = 'aaaaaaaaa'
    for key,value in json_body.items():
        if key not in ['sign', 'appid', 'imgupload', 'version']:
            enc_str += key + '=' + str(value) + '&'
    enc_str += 'version=' + str(json_body['version']) + 'd19e4abd1036063faa4218c139378c0e'
    json_body['sign'] = self.md5_enc(enc_str)
    return header, json.dumps(json_body)

def md5_enc(self, data):
    md5 = hashlib.md5()
    md5.update(data.encode('utf-8'))
    result = md5.hexdigest()
    return result

补充:此处代码还需要完善,因为enc_str涉及到排序的问题,可能需要多次测试来进行确定。

在Burpy PY file path:里面指定好你自己的python脚本。本身Burpy也提供了脚本模板,可以直接在它的脚本模板中进行修改

这里选择打开enable auto enc/dec会自动调用encrypt方法,在点击重放时自动进行加解密。

参考文章:


奇安信攻防社区-小程序绕过sign签名思路
小程序绕过 sign 签名

上一篇 下一篇

猜你喜欢

热点阅读