小程序渗透
小程序渗透
编写人:Rannnn
环境&软件:Windows11渗透版,微信,微信开发者工具,UnpackMiniApp,wxappUnpacker,Node.js
抓包
工具:burpsuite,Charles
配置:
Charles:
导入证书
依次选择
Help->SSL Proxying->Install Charles Root Certificate
在弹出的窗口选择安装证书
存储位置选择本地计算机

将证书存放入受信任的根证书颁发机构
导入成功后进行下一步
代理端口
点击proxy
然后点击proxy setting
HTTP Proxy内修改Port为8888
SOCKS Proxy内修改Port为8889
最下方Ports内填写80,443,8080

规则配置
点击Proxy,选择SSL Proxying Settings

点击左侧框下的add
两个都设置为*号
点击ok
点击如下选项
按照如下设置(Web Proxy和Secure Web Proxy都要设置成127.0.0.1:8091)

点击ok,配置完成
burpsuite:
点击代理->代理设置
在代理监听器下点击添加
将绑定端口修改为8091,完成即可
测试
打开bp
打开小程序(这里以畅行温州作为举例)
开启拦截
点击小程序任意按钮
抓取到信息,发送到重发器
抓包成功
常见漏洞
本版块的漏洞案例和图片均取自于:
阿里云开发者社区、先知社区、CSDN、博客园、雷神众测
支付业务逻辑漏洞
解析:应用程序未校验订单数据的取值范围,导致可以修改订单数量、订单金额,通过修改订单金额可以达到0元购的效果
案例:某酒店订房小程序在生成订单支付二维码时,客户端可以直接修改交易金额导致实际支付金额与商品原价不符,造成商家严重亏损
建议:1、服务器端在生成交易订单时,商品的价格从数据库中取出,禁止使用客户端发送的商品价格。2、服务器端对客户端提交的交易数据(如商品ID、商品数量、商品价格等)的取值范围进行校验,将商品ID和商品价格与数据库中的数据对比校验,商品数量为大于零的整型数。3、服务器端在生成支付订单时,对支付订单中影响支付金额的所有因素(比如商品ID、商品数量、商品价格、订单编号等)进行签名,对客户端提交的支付订单进行校验
前端绕过登录后台漏洞
解析:登录页面输入账号密码后用户可以通过拦截并修改响应包实现绕过登录
案例:某公司小程序使用账号密码登录,随意输入一个账号密码并抓包,拦截响应包,修改json数据,将”code”修改为0,两个false修改为true,修改后放行,成功登录,并可以直接进入工作台,但是由于未授权访问,只能拿到数据,没有办法进一步操作。
建议:1、后台直接比对数据库判断用户账号密码是否正确,删除前端控制登录状态的code
字段。2、所有API接口启用HTTPS,防止中间人攻击篡改数据包。3、基于角色分配最小权限,敏感操作需二次鉴权。4、记录登录IP、设备指纹,对频繁失败尝试触发风控
水平越权漏洞
解析:越权访问,这类漏洞是指应用在检查授权(Authorization)时存在纰漏,使得攻击者在获得低权限用户帐后后,可以利用一些方式绕过权限检查,访问或者操作到原本无权访问的高权限功能。
案例:
查看某房产小程序个人房产信息,在点击查看详情时拦截数据包,通过修改get传参可以遍历他人房产,并且可以获取他人id、手机号、身份证号码、房屋信息等数据
建议:验证用户权限,在每个敏感操作之前,对用户进行严格的权限验证。确保用户拥有访问特定资源或数据的权限,且只能访问其授权的内容。
任意用户注册漏洞
解析:小程序为内部员工专用,注册功能未对外开发,攻击者可以根据此漏洞越过系统拦截直接注册任意用户并访问内部员工功能。暂不排除是否会对已存在的用户的影像,如覆盖账号导致无法登录等
案例:某公众号员工登录页面,此页面无注册功能,且登录逻辑为员工姓名+工号校验,输入任意姓名工号发现登录不进去,将登录接口LoginSubmit修改为注册接口registerSubmit(猜的),发现注册成功并能登录进入系统。
建议:销毁此接口,或对员工注册进行审核。
SessionKey三要素泄露
解析:session_key指的是会话密钥,可以简单理解为微信开放数据AES加密的密钥,它是微信服务器给开发者服务器颁发的身份凭证,这个数据正常来说是不能通过任何方式泄露出去的。小程序若存在session_key泄露漏洞的情况,则代表微信侧传递的用户数据有被泄露、篡改等风险,开发者应及时发现该漏洞并快速修复相应问题。
案例:某小程序因为session_key泄露,导致该小程序可以使用任意手机号进行登录,造成了极大的安全风险。
通过获取该session_key,我们可以结合iv解密出密文。
简单整个香香的小插件(不是)
把三个数据放到对应的位置上,点击解密,明文的敏感信息就显示出来了
跨小程序请求伪造CMRF
解析:利用小程序对用户微信身份的信任在获取页面传入的参数之后结合用户已经登录的身份信息(储存在本地的数据,或者用户的openid)向小程序后端发送对应的数据包,从而使用户在无意间(打开对应分享链接时)完成一次请求操作。
案例:某商城小程序中,用户来到“我的”页面时程序会自动登录向后端请求 openID
等数据并判断当前微信用户是否已经进行了与商场网页账户的绑定操作,若无则前往绑定页面,若已经绑定则将 openID
写入缓存之中。接着我们点击修改密码按钮,小程序会弹出如下让我们修改密码的弹窗
对应功能的JS代码如下:
passFn() { // 修改密码弹窗 |
可以看到上述JS代码中changeFn
会判断用户两次输入的密码是否一致,若一致则将用户输入的密码作为参数传入小程序的“/pages/my/changepwd”页面中。接着我们来到“/pages/my/changepwd”观察其核心功能函数如下:
onLoad: function (options) { |
小程序会将传入的密码和保存在本地Storage中的与对应商城用户绑定的微信用户openid值一起传回给后端服务器,服务器后端通过查询openid对应的用户信息来修改对应用户的密码。那么我们只需要构造一个微信小程序的页面指向/pages/my/changepwd.html?newpwd=XXX自己预设密码
,并让其他已绑定商城账户的人点击我们构造好的微信小程序消息,那么他在此商城的密码就会被自动更改为我们预设的值。例如下图我们将<pagepath>
值设置为:/pages/my/changepwd.html?newpwd=Abc@123456
,预设密码即为Abc@123456
:
接着我们将构造好的消息转发给被害者,诱导其点击小程序消息访问对应的页面,一但用户点击了对应的消息页面打开微信小程序,他的商城账户密码即被修改为了Abc@123456
。
至此我们完成了一次典型且易被利用的CMRF攻击,虽然并不是所有的CMRF攻击都能造成非常严重的危害,但这类漏洞并非无稽之谈,目前在很多微信或者其他小程序中还隐藏着许多类似的脆弱点。
小程序反编译
本部分参考:https://blog.csdn.net/Xm3333691/article/details/120312160
工具:node.js、反编译的脚本、小程序包解密工具
链接:https://wwn.lanzouj.com/i7opW0bnop4d 密码:71g7
第一步
先把反编译脚本文件夹放在根目录下,推荐放C盘,一是便于操作,二是避免了路径名存在中文字符
第二步
找到自己想要编译的小程序包,位置跟微信聊天文件的位置是同一个大文件夹下,我的目录是D:\WeChatCaches\WeChat Files\Applet

里面有很多以wx开头的数字与字母组合的文件夹,点进去还有一个以数字命名的文件夹,再点进去,会发现有一个__APP__.wxapkg
的文件,有的还有其他的文件
第三步
打开小程序解密程序(可能会弹出.NET Framework弹窗,点击安装即可)
打开后的效果
安装完打开解密程序,点击唯一的一个按钮“选择加密小程序包”,将想反编译的程序包的所在目录粘过去,点击打开,进行解密
第四步
解密完成后,解密好的包会在解密程序上面或者下面的wxpack的目录里面,进去发现会有一个以wx开头的数字与字母组合的文件,他就是我们要反编译的包。
第五步
为了方便操作,将解密好的包放在反编译脚本文件夹下
第六步
安装node环境,为避免麻烦,所有步骤都默认进行

打开cmd,为了避免出现问题,建议用管理员身份打开。
先用node -v
看看能不能查看node版本,确保能使用node环境。

使用cd 命令,将位置改成脚本所在位置。
这里有个问题,如果当时放的是D盘,你会发现你使用cd d:
就显示个D:\
就完了,下面还是你的C盘用户路径
输入cd /d d:
即可
第七步
安装依赖,就在反编译脚本目录下安装
npm install esprima |
如果卡进度条不动的情况就ctrl+c然后重新执行一遍
第八步
安装完成之后,执行反编译命令
node wuWxapkg.js 你粘过来的文件的文件名.wxapkg |
发现报错,不要紧,注意Error这句话的结尾单词escodegen
,这就是缺少的模块,npm安装就完了
装完运行还是报错,哪个缺装哪个,直到开始跑代码就说明成功了
PS:如果发现缺少一个名为cheerio的模块,不要直接用npm下载!!!打开下面的链接,复制网页右边的下载代码粘贴到命令提示符下就可以了。不要不听劝啊,看到Error: Cannot find module 'node:stream'
你就老实了
在目录中会生成一个文件夹,里面就是反编译后的文件
打开微信开发者工具,导入刚刚反编译的wx开头的文件夹,就可以看到小程序的真实代码了