多个小程序漏洞挖掘与利用思路分享|带你从 0 到 1 挖小程序漏洞
0x01 前言
渗透测试有时候就像开盲盒,你永远不知道下一个接口藏着什么惊喜。近期挖到了多个小程序实战案例,从支付逻辑绕过、0 元购、越权查看地址,到阿里云凭证泄露、帖子置顶白嫖,应有尽有。没有晦涩术语,全程轻松搞笑,把枯燥挖洞写成快乐寻宝,不需要报昂贵的培训班,带你一步步看懂数据包修改、业务逻辑绕过,真正实现从 0 到 1 上手小程序漏洞挖掘。
免责声明:本文仅用于网络安全相关知识分享,请严格遵守网络安全相关法律法规。 未经授权利用本文相关技术从事违法活动的,一切后果由违法人自行承担!作者不承担任何法律责任
0x02 漏洞详情
低价享受高价
锁定一个购票小程序.购买出行船票或车票时都区分为 二等座 一等座 包括舱位、上下卧铺价格也不同上,包括成人价格 儿童老年人优惠等,站点特征明显,厚码叠甲 选择一个目的地出行,然后下单记录数据包
选择一个目的地BP记录到了创建订单的接口shipgateway/shipOrderApi/createOrder 创建订单观察到并没有sign校验字段,存在问题可能性较大。遂将这个接口发送到重发器进行修改测试
测试支付漏洞我喜欢搜索数据包price价格 每个字段都改变为最小的数字,再逐一发包创建新订单 但并未起效,订单也还是正常票价, 说明决定订单总价的字段并不是price而是订单其他参数,目的地、票价类型、乘客类型都有可能,;而后开始对每个存在字段的数字增增改改 观察到底是哪个字段可以影响订单的生成
修改到passengerType字段为2响应包显示 价格不匹配 ,根据字段意思推测这里决定用户的类型身份,正常情况的1为成人,2则是其他的类型得到响应包线索后,现在我需要知道其他passenger Type类型对应分别是哪些用户,业务提示很明显了,成人类型为1 那么ticketPrice票价为100业务推敲一下也就是对应下列
经过测试passengerType字段和ticketPrice价格字段挂购,二者需要一起修改,单独修改为固定的价格则会响应价格不匹配, 两个字段需要一起满足才能达到对应身份的票价
ticketPrice=票价 passengerType=成人类型 成人: passengerType=1 && ticketPrice=100 儿童: passengerType=2 && ticketPrice=50 长者: passengerType=3 && ticketPrice=50那么改两个字段为其他儿童类型所对应的价格,成功以成人身份证生成低价学生票订单,并且身份证还是原本成人
这个时候我想再提高一下危害, 既然订单的价格是由用户类型所关联的价格决定了,我是否可以自主的再次修改增值的业务参数呢?享受到最高的优惠, 船票分为上等中等, 利用普通订单价格享受高等舱位服务,通过对比普通舱订单和头等舱位订单定位到seatId字段决定了舱位等级
"seatId":1# 普通舱 "seatId":0# 头等舱在中等舱数据包中,当我把三个字段都修改好后,订单虽然可以创建成功,但是舱位的类型还是中等舱,价格反而变成了头等舱的价格, 思考一下,既然在中等舱无法直接修改成高等舱,那我生成高等舱的订单,把它的用户类型、票价、舱位3个字段为最低的层面尝试绕过
"seatId":0// 头等舱 passengerType=2// 儿童类型 ticketPrice=50// 儿童票价当这样修改后就可以成功创建高等舱位的低价订单,后端只是校验了 决定价格字段和类型字段间是否是一一对应,对当前舱位字段没有限制, 可以单独的去修改seatId字段控制舱位价格
"seatId":1// 中等舱 passengerType=2// 儿童类型 ticketPrice=50// 儿童票价成功生成正常可以支付的订单
0元购思路
同样还是这个业务站点,有的船票是存在携童免费措施的,有的没有,那么将我的身份伪造为更低的是不是就可以0元上船呢
但是这里不能直接通过上面的手法修改类型、价格, 测试发现决定是否免费的关键是身份证的处理,身份证需要是儿童的出生年月,但是添加乘客接口是身份证大多是实名认证,我不清楚验证的原理是什么,按道理前端了身份证号对应的身份证,说明是后端查询到了, 但是我在BP里面拦截这个数据包又可以修改,说明并没有走后端,那么一开始的前端验证是什么逻辑呢,有懂的师傅可以解释一下,难道身份证认证的接口放到前端查询吗,可能是调用了身份证的接口
首先添加正常的乘客信息绕过验证,找到添加的数据包 修改身份证和日期为儿童的,往大了写就可以,这一步如果身份证有婴儿身份证的话可以不用,或者自己有牛逼的sgk
那么现在已经有了儿童的身份了,但是还需要在下单的时候把身份证修改回来,不然买的票身份证不是自己的买了也没用,找到一处可以携童免费的船票,选择上面添加的携带乘客信息,选择免费的票
儿童免费票不能独立购买需要携带一名成人,正常添加一名成人乘客,然后正常下单记录接口
抓取到创建订单接口发送重发器,上方为添加的成人,下面则是免费的儿童身份儿童身份证,出生年月为自己修改的2022年身份证
朴实无华的将出生年月及其身份证号修改为自己本人的身份发包,成功创建订单
一份钱买两个成人的票 0元上船,但是无奈这个点后续虽然可以支付订单 但是会自动退票,或者会有人工客服打电话来,审核回应SRC排查过这个点
输出点思考
生成订单后出现的订单号,查询订单的接口会回显当前订单的乘客信息三要素,经过大小号替换订单号测试,是可以越权查询到他人的订单信息要素的,但是此订单号无法遍历,在网站其他功能点都没有找到可以出现订单号的地方,评论区 投诉 都没有
虽然无法利用,但是这个接口引发了另一种思考,订单号查询正常只返回订单对应乘客信息,但是这里却返回了用户的凭证字段
"openId" : "xxxxx", "unionId" : "xxxxx"这两个字段都是鉴权字段,有了此字段的就可以跟替换Cookie一样替换别人的身份其他人的,操作此小程序所有增删改查功能点,当前虽然开着Hae但并没有相关的规则字段正则所以匹配不到,真的是细心才能发现,如果这个订单接口可以继续利用遍历的话,再结合返回的这两个字段,整个小程序用户信息全部会被接管,所有乘客三要素包括小程序所有功能点
全站收货地址泄露
日常逛资产,挑选到功能点相对多的小程序,业务是购买商品,有很多的支付漏洞包括逻辑漏洞可以测试
测试到地址管理功能点下列是查看我自己的地址list出现了地址的id号13313 13314不等,小程序功能点大多使用JWT鉴权,对JWT尝试了常见攻击手段均无法绕过,
/buyer/address/list/测试小程序购买商品功能 正常选择收货地址,然后正常下单记录数据包
buyer/product/retail/submitOrderPa接口记录的参数是商品的价格还有斤数,都是明文的信息 直接一手0元购测试没有效果都和后端做了校验
但是注意看这里的addrId不就是对应了收货地址的id嘛,都是可以遍历的收货id将它修改为其他地址的id那么再生成订单是不是可以成功看到别人的地址呢,修改为12000,然后生成订单回到小程序看订单收货地址
成功的拿到他人收货地址包括手机号
手机号是脱敏的手机号,提上去肯定是危害没那么大的, 不过一般都是前端脱敏的,可以强开F12看看源代码,因为在这个站测的比较久业务点也明白,利用一个查询订单号的接口就可以得到脱敏的信息,得到了别人的信息就可以利用其他的功能点扩展,这也是上文我也说的思路
通过这两个创建订单接口和查询订单接口拿下全站收货地址包括二要素信息
简单的0元
经典日常补天找项目打猎(捡垃圾),公司名直接微小程序,名称对大多不会搜错(这里翻车),功能点文创商品可以购买
选择一个最贵的商品选择下单支付 停留在待支付页面打开我们的BP捕获后面的数据包
在支付界面打开BP拦截,拦截每一步请求找到决定价格的数据包
看到totalFee费用 直接修改totalFee字段总费用为10也就是1分钱,放掉所有包直到出现扫码二维码
扫码支付成功0元
老实了 厂商限定了测试的域名当时没注意看,因为很多域名想着应该不会歪, 结果去资产列表CTRL+F完全对不上host,反应了前期信息收集的重要性,撤回摆两桌 只能恰两个馒头了
%模糊查询配合size 信息泄露
经典小程序开局注册并登录.打开BP记录所有功能点数据包
输入一个符号*模糊查询 匹配到所有公司 BURP抓到了记录铭感信息的数据包
把这个包发送到发器 数据很少 只有十几条数据
修改这个请求的size字段=9999 让显示的公司字节数据变多,使其显示更多的铭感信息
拿下推荐岗位功能所有公司联系人的二要素信息
其他功能点均存在此问题,大部分都是页面只能看到企业联系人姓名,打电话联系也是虚拟号码,但是在响应体中确会显示所有的手机号码和姓名,小程序业务也是求职里面包含大量的公司企业,通过响应包缺陷+模糊查询*+size字节+Hae神器匹配整站企业联系人二要素全部泄露,并未全部列出但目测2w+条
培训模块
大龄工作
社会招聘
见习岗位
…
论坛渗透
经授权对一个社区论坛测试,不得不说 除了SRC外 互联网站点大多比较脆弱,如果有技术并且又不老实的 犯罪成本太低了,网络安全任重而道远,基本全是简单的鉴权问题,有的是压根没鉴权,有的鉴权字段写了但是并没有生效,简单记录几个有代表性的问题
帖子置顶0元购
BURP渗透抓包工具抓取小程序的数据包 在主页点击发帖功能 ,下面有一个功能是花钱对帖子置顶
随意输入帖子的文案 然后点击发布后置顶[/api/client/topics/pay_configs] 接口显示出了对应的价格字段还有所持续的时间
正常走发布帖子的流程,记录所有接口 这个接口数据包回显了对应的价格字段 并且没有对应的sing或者加密一类的东西和后端做校验,等于是前端校验价格还有置顶的时间,然后后端就返回了生成订单,那么我们篡改价格并且拉成时间就造成了漏洞问题了 /api/client/topic_top_orders
修改对应的价格还有时间 会生成新的订单号,完全前端校验
发布帖子置顶付款的业务流程是这样的三个接口
/api/client/topics 帖子内容文字和标签 /api/client/topic_top_orders 置顶的价格生成订单号 这里进行篡改 payment/wechat/preorder/topictop/tp2025021408581339 请求后端付款第三步接口利用第二步生成的订单号去跟后端请求,后端反馈加密还有付款的信息,但是这里加密完全没有作用,哪怕是一个空订单后端都会返回支付参数,加密完全是摆设,订单号也没有做比对
知晓了业务流程后续就是BP抓取生成订单的数据包 api/client/topic_top_orders 进行拦截篡改操作 价格改小就可以完成0元购,点击付费 就会拦截数据包修改价格然后一直放行就行了出现付款的选择 选择二维码支付 扫描付款就行了
文件上传泄露阿里云sts
在每一个上传图片的功能点 头像 帖子 图片 上传会后端会返回阿里云的sts临时凭证 ak sk 还有存储桶的信息
有了这些信息最大是危害是利用凭证登录这个阿里云桶从而接管整个小程序里面存储的图片信息,或者是利用脚本来进行覆盖小程序内所有的图片
api/common/ali_oss/temp_sign?scenc=1越权让任意跑腿者主动接单
小程序存在跑腿赚钱功能,用可以接单的骑手号去接一个没有被接单的订单, 记录接单的请求
操作这个接口,替换订单号为任意的,跑腿者身份为别人的,可以任意指定谁去接谁的单,经过测试替换别人身份是可行的,订单号以及跑腿者的身份利用其他功能点的输出就可以得到
errand_order_no 当前订单是什么 errander_id 跑腿者的身份最终也是打包报告并且辅助开发修复,美美结束
学习资源
如果你也是零基础想转行网络安全,却苦于没系统学习路径、不懂核心攻防技能?光靠盲目摸索不仅浪费时间,还消磨自己信心。这份 360 智榜样学习中心独家出版《网络攻防知识库》专为转行党量身打造!
01内容涵盖
这份资料专门为零基础转行设计,19 大核心模块从 Linux系统、Python 基础、HTTP协议等地基知识到 Web 渗透、代码审计、CTF 实战层层递进,攻防结合的讲解方式让新手轻松上手,真实实战案例 + 落地脚本直接对标企业岗位需求,帮你快速搭建转行核心技能体系!
这份完整版的网络安全学习资料已经上传CSDN【保证100%免费】
**读者福利 |***CSDN大礼包:《网络安全入门&进阶学习资源包》免费分享 *(安全链接,放心点击)
02 知识库价值
- 深度: 本知识库超越常规工具手册,深入剖析攻击技术的底层原理与高级防御策略,并对业内挑战巨大的APT攻击链分析、隐蔽信道建立等,提供了独到的技术视角和实战验证过的对抗方案。
- 广度: 面向企业安全建设的核心场景(渗透测试、红蓝对抗、威胁狩猎、应急响应、安全运营),本知识库覆盖了从攻击发起、路径突破、权限维持、横向移动到防御检测、响应处置、溯源反制的全生命周期关键节点,是应对复杂攻防挑战的实用指南。
- 实战性: 知识库内容源于真实攻防对抗和大型演练实践,通过详尽的攻击复现案例、防御配置实例、自动化脚本代码来传递核心思路与落地方法。
03 谁需要掌握本知识库
- 负责企业整体安全策略与建设的CISO/安全总监
- 从事渗透测试、红队行动的安全研究员/渗透测试工程师
- 负责安全监控、威胁分析、应急响应的蓝队工程师/SOC分析师
- 设计开发安全产品、自动化工具的安全开发工程师
- 对网络攻防技术有浓厚兴趣的高校信息安全专业师生
04部分核心内容展示
360智榜样学习中心独家《网络攻防知识库》采用由浅入深、攻防结合的讲述方式,既夯实基础技能,更深入高阶对抗技术。
内容组织紧密结合攻防场景,辅以大量真实环境复现案例、自动化工具脚本及配置解析。通过策略讲解、原理剖析、实战演示相结合,是你学习过程中好帮手。
1、网络安全意识
2、Linux操作系统
3、WEB架构基础与HTTP协议
4、Web渗透测试
5、渗透测试案例分享
6、渗透测试实战技巧
7、攻防对战实战
8、CTF之MISC实战讲解
这份完整版的网络安全学习资料已经上传CSDN【保证100%免费】
**读者福利 |***CSDN大礼包:《网络安全入门&进阶学习资源包》免费分享 ***(安全链接,放心点击)**