对酒店房间自助售货机的支付漏洞挖掘
字数 1186 2025-08-20 18:18:10
酒店房间自助售货机支付漏洞挖掘技术分析
前言
本文详细分析了一种酒店房间自助售货机支付系统的逻辑漏洞,通过修改支付参数实现低价购买商品的漏洞挖掘过程。该漏洞属于业务逻辑漏洞范畴,具有较高的实际危害性。
测试环境准备
移动端抓包环境配置
-
安卓系统证书配置:
- 安卓7.0+系统默认不信任用户安装的证书
- 需要进行ROOT操作
- 证书转换与安装步骤:
# 证书格式转换(如非PEM格式) openssl x509 -inform DER -in cacert.cer -out cacert.pem # 计算MD5 hash(OpenSSL 1.0+版本) openssl x509 -inform PEM -subject_hash_old -in cacert.pem # 重命名证书文件(使用上一步获取的hash值) mv cacert.pem 347bacb5.0 # 将证书放入系统目录 cp 347bacb5.0 /system/etc/security/cacerts/ chmod 644 /system/etc/security/cacerts/347bacb5.0 chgrp root 347bacb5.0
-
抓包工具:
- 使用Burp Suite作为主要抓包工具
- 配置手机代理指向Burp监听端口
漏洞发现过程
初步信息收集
- 通过微信小程序访问酒店自助售货机系统
- 发现系统采用无cookie设计,仅使用固定token进行身份验证
参数遍历测试
-
商品ID遍历:
- 发现POST请求中的
id参数可遍历 - 通过修改
id值可获取不同房间的商品信息 - 示例请求:
POST /getItemInfo HTTP/1.1 Host: xxx.com Content-Type: application/x-www-form-urlencoded id=123&token=xxxxxx
- 发现POST请求中的
-
价格修改测试:
- 尝试修改返回包中的
price相关字段 - 前端显示价格可被修改,但实际支付仍按原价
- 说明价格验证在服务端完成
- 尝试修改返回包中的
支付流程深入分析
-
支付流程分解:
- 第一阶段:获取商品信息(可修改前端显示)
- 第二阶段:发起实际支付(关键验证点)
-
关键参数发现:
- 拦截支付请求发现
discount参数(默认值为0) - 参数名称明确指示其折扣功能
- 拦截支付请求发现
-
漏洞验证:
- 将
discount从0修改为1 - 支付金额成功减少1元
- 实际测试购买商品(TT)验证漏洞有效性
- 支付0.1元后售货机正常出货
- 将
漏洞原理分析
-
业务逻辑缺陷:
- 前端与后端价格验证不一致
- 折扣参数未做有效性验证
- 支付金额计算依赖客户端可修改参数
-
安全设计缺失:
- 缺乏价格签名验证机制
- 关键业务参数未做服务端二次确认
- 无防篡改设计
漏洞修复建议
-
服务端改进:
- 实现价格签名机制
- 商品价格应从服务端获取,不依赖客户端参数
- 对折扣参数进行严格验证(范围、权限等)
-
架构设计优化:
- 关键业务参数应加密或签名
- 实现前后端价格一致性验证
- 支付流程增加二次确认环节
-
监控措施:
- 异常价格交易监控
- 折扣使用日志审计
漏洞挖掘方法论总结
-
全面参数测试:
- 测试所有请求参数的可修改性
- 特别关注业务相关参数(如price、discount等)
-
流程分段分析:
- 将复杂业务流程分解测试
- 关注各阶段的数据一致性
-
参数命名线索:
- 通过参数名推测功能(如discount)
- 注意拼音首字母缩写等非常规命名
-
实际效果验证:
- 漏洞需在实际业务场景中验证
- 确认漏洞的完整利用链
扩展思考
-
同类系统测试方向:
- 自动售货机系统
- 自助服务终端
- 无人零售设备
-
进阶测试技术:
- 时序攻击测试
- 并发请求测试
- 支付结果状态测试
-
业务逻辑漏洞挖掘要点:
- 理解正常业务流程
- 寻找流程中的信任边界
- 测试各环节的数据一致性
本漏洞分析展示了业务逻辑漏洞的典型特征和挖掘方法,强调了全面参数测试和流程分析的重要性,为类似系统的安全测试提供了可复用的方法论。