missuo / missuo.github.io

A repository for writing blogs
https://missuo.me
2 stars 1 forks source link

Himo Mini Program Security Issues | Vincent's Notes #34

Open missuo opened 1 year ago

missuo commented 1 year ago

https://missuo.me/posts/himo-security/

因为预约了 6 月头在香港的 F1 签证,所以需要准备一张 签证照,在家这边的小城市,也没什么选择,没有 天真蓝,最好的就是 海马体 了。海马体生意还挺好,当天都约不到,只能约到 5 月 14 日星期天 在 2023 年 5 月 16 日我已经向海马体的技术团队提交了 可能存在的安全问题。直到今天(2023 年 5 月 29 日),我没有收到海马体技术团队的任何回信,我决定在我的个人博客公开。 我在拍完照之后,现场等待了一会,大概也就不到半个小时,小姐姐就基本上修好了,让我确认一下是否有需要修改的地方,没有的话就开始打印了。打印完之后,她告诉我电子版随时可以在 海马体小程序 随时下载。这一点我觉得非常方便。 晚上在家的时候,突然想到海马体小程序的这回事,我在想这些个人的照片应该是存储在 OSS 上的,但是我在想会不会有可能是订单号+编号这样子的文件名来存储的,简单说就是这个图片的链接是有规律的。如果真的是这样的话,我就可以轻松拿到所有用户的照片。 我在 iPhone 上开启了抓包,结果发现所有的照片的外链确实是固定的,只不过文件名是随机的一串字符串,似乎没有任何规律,应该就是完全随机的。然而有一个 API 会返回这个用户所有的照片的文件名,这个 API 传递的参数似乎没有类似于 userID 这类的参数,也就是说完全按照 Cookie 来判断哪位用户的。到这里,想拿到别的用户的照片外链的计划算是泡汤了。 我又想到因为每一次的照片肯定是和订单绑定的,也就是说一个 签证照 订单,理论上应该就固定的只有 4 张图。我又仔细地看了一下订单返回的参数,比较有价值的就是用户名、手机号这些,别的都是预约的门店、门店地址、门店联系电话、订单价格之类的一些东西。但是有一个意外的惊喜,我发现订单详情的 API 在 GET 请求的时候携带了 orderNo 参数,我赶紧使用 API 测试工具,发起了请求,把 orderNo 改一个数字,API 返回了 “订单不存在”。心里窃喜,竟然返回的是订单不存在,而不是无权限,说明我的 Cookie 应该可以查看别人的订单信息,我可以拿到任何注册 海马体小程序 用户的 联系方式。 我的订单的 orderNo 是 T2023051413359999,以首字母 T 开头,前 8 位是当天的日期,后面的 8 个纯数字应该是随机的,但是这难不倒我,手搓一个 Python 脚本,从 00000000 穷举到 99999999 不就完事了,在多线程的帮助下,简直是小菜一碟。