本章节将为大家介绍一下小程序常见的漏洞的展示案例,包括支付业务逻辑漏洞、任意用户登录漏洞、水平越权漏洞等高危漏洞。
以上小程序测试均获取授权,并且客户均已得到修复(仅供学习,请勿恶意攻击)
关于微信小程序如何拦截数据包,笔者在往期的文章均有过讲解,大家可以翻阅往期文章,此处省略抓包环节演示
支付业务逻辑漏洞
问题描述:
应用程序未校验订单数据的取值范围,导致可以修改订单数量、订单金额,通过修改订单金额可以达到0元购的效果,由于现在调用的都是支付接口,所以负值反冲已经不再常见了
测试过程:
首先正常页面如下图所示
只需要在生成支付二维码处修改实际支付金额,这样后台会显示原先的350元,但是实际上只需要支付0.01元
此时生成支付二维码,页面显示为350,元,但是实际上已经变成0.01元
第一个009的图忘记保存了,然后又搞了一次,0011,凑合看吧
0元购了家人们,这要是让人逮到可遭老了罪了
风险程度:[严重]
风险分析:
通过篡改订单金额可以达到0元购的效果,造成商家金钱的损失
修复建议:
1.服务器端在生成交易订单时,商品的价格从数据库中取出,禁止使用客户端发送的商品价格。
2.服务器端对客户端提交的交易数据(如商品ID、商品数量、商品价格等)的取值范围进行校验,将商品ID和商品价格与数据库中的数据对比校验,商品数量为大于零的整型数。
3.服务器端在生成支付订单时,对支付订单中影响支付金额的所有因素(比如商品ID、商品数量、商品价格、订单编号等)进行签名,对客户端提交的支付订单进行校验。
任意用户登录漏洞
问题描述:
小程序在登录的时候,仅校验了手机号与手机短信验证码的一致性,并没有校验实际使用的手机号码与openid的关系,缺乏校验,导致可以通过正常使用手机号码接受短信后,修改登录成功的数据包为其他人的手机号码,达到任意用户登录的效果。
测试过程:
使用133********账户登录,登录截图如下
当前133用户登录返回信息如下:
直接把mobile参数修改成幸运观众的手机号就可以,此处手机号在前面有出信息泄露,可以抓到很多人的手机号码
发包即可完成任意用户登录,此处可以看到其他用户的所有数据
风险程度:[严重]
风险分析:
攻击者使用正常的登录请求访问系统,而后修改手机号码为其他人的手机号码,即可在未进行任何校验的情况下越权登录任意用户,实现所有功能
修复建议:
归根结底该漏洞实际为水平越权漏洞引起的,建议对用户登录的手机号、用户身份进行多因素验证,将微信id号码与实际登录的手机号码进行严格的校验
上述案例主要技术手法为,通过修改返回数据包来实现任意用户登录的目的,除此外,笔者在测试发现,某小程序还可以通过修改请求数据实现任意用户登录,但是客户没有修复成功,所以此处不进行展示学习。
任意用户注册漏洞
问题描述:
小程序为内部员工专用,注册功能未对外开发,利用此漏洞可直接注册用户且无需审核,暂不排除是否会对已存在的用户的影像,如覆盖账号导致无法登录等。
测试过程:
首先访问公众号员工登录页面,此页面无注册功能,且登录逻辑为员工姓名+工号校验
输入任意的姓名和工号,点击登录按钮,此时的用户是不存在的,大家注意LoginSubmit
构造注册数据包,注册用户123 工号A101123;此接口实际上是猜的,大家注意打箭头的地方
登录后的小图,保命只能发这么多
风险程度:【高危】
风险分析:
攻击者可以根据此漏洞越过系统拦截直接注册任意用户并访问内部员工功能。
修复建议:
建议销毁此接口,或对员工注册进行审核。
水平越权漏洞
问题描述:
越权访问,这类漏洞是指应用在检查授权(Authorization)时存在纰漏,使得攻击者在获得低权限用户帐后后,可以利用一些方式绕过权限检查,访问或者操作到原本无权访问的高权限功能。
测试过程:
查看某房产小程序个人房产信息,效果如下图所示
拦截数据包发现,此处存在水平越权漏洞,通过修改get传参可以遍历他人房产,并且可以获取他人id、手机号、身份证号码、房屋信息等数据
风险程度:[严重]
风险分析:
攻击者可以利用越权漏洞访问其本不应该具有权限的敏感数据,如个人身份信息、财务数据等,导致隐私泄露。
修复建议:
验证用户权限: 在每个敏感操作之前,对用户进行严格的权限验证。确保用户拥有访问特定资源或数据的权限,且只能访问其授权的内容。
还有一些稀奇古怪的越权,就不展示了,总之一句话,像这种没做什么加密的小程序,只要细心都可以测出来东西,没什么难点