大家好,我是redfox。
本次研究的校园跑逻辑过程为:开始—上传照片—gps数据传递(每2s一次。主要用于绘制跑步路线)—结束—第二次上传照片。这是他的大概流程,整个充斥着很多的漏洞与错误,例如居然能将sport给拼写为sprot,json写为jspn,令人汗颜。
redfox出于学习目的,对其进行安全测试 。゚ヽ(゚´Д`)ノ゚
—声明— 所有URL、域名、具体标识等已做彻底脱敏处理,不代表任何真实机构或服务,仅为技术分析示例。
—声明:整个过程在合法合规的环境中测试,请大家不要轻易模仿。— (校园跑是为了大家健康出发,要是能自己跑再好不过了。)
那么就开始吧(^u^)!
首先,我把相关的抓包数据给大家贴出:(他是分为start和end两个关键节点,以及一个sportID)
这个是我们第一次递交开始照片的请求体
{“sportSubject”:1,“stepNum”:0,“fileUrl”:“https://example.com/api/file/visit/[已脱敏token]”,“lockGpsJspn”:”[]”}
好我们对他进行一个分析 sportSubject:指的是运动项目编号 在这里就是指的是每日锻炼 代号为1
stepNum:步数,当前值为0
fileUrl:拍照上传的文件
lockGpsJspn:GPS锁定的JSON数据 (令我惊讶,居然能将json写为jspn)
[已脱敏]:一串长长的字符串,是token。Base64 编码后的访问令牌(token)
(^_^)
下面这一部分是gps json数据。用于绘制路线以及计算速度之类的。
{ “gpsInfo”: ”{“sportId”:****,“curTime”:约2025年12月底,“steps”:0,“altitude”:460.1,“verticalAccuracy”:0,“indoorLocationType”:-1,“provider”:“gps”,“latitude”:30.67,“accuracy”:2.5999999046325684,“horizontalAccuracy”:2.5999999046325684,“type”:“gcj02”,“speed”:4.134248733520508,“longitude”:104.14**,“direction”:129.38,“lastLocation”:{“altitude”:460.3,“verticalAccuracy”:0,“indoorLocationType”:-1,“provider”:“gps”,“latitude”:30.67**,“accuracy”:2.5999999046325684,“horizontalAccuracy”:2.5999999046325684,“type”:“gcj02”,“steps”:0,“speed”:4.0554962158203125,“longitude”:104.14**,“direction”:130.62}}” }
本文所有坐标、时间戳、ID等均已做脱敏处理,仅用于技术学习与分析,请勿尝试逆向还原真实信息。
各个字段的解释:
| 字段名 | 示例值(脱敏后) | 含义解释 | 备注/现实意义 |
|---|---|---|---|
| sportId | ****** | 这次运动/活动的唯一ID | 每一次跑步/打卡对应一个独立ID(示例已脱敏) |
| curTime | 约2025年12月底 | 当前时间戳(毫秒) | 时间戳已模糊处理,仅供参考 |
| steps | 0 | 当前累计步数 | 这次运动刚开始,或非计步类型 |
| altitude | 460.1 | 海拔高度(米) | 某大学校区典型海拔范围(约450–470m) |
| verticalAccuracy | 0 | 垂直(高度)精度 | 0 表示设备认为高度数据非常准确 |
| indoorLocationType | -1 | 室内定位类型 | -1 = 室外定位(未进入室内模式) |
| provider | ”gps” | 定位来源 | 纯 GPS 定位(未使用 WiFi/基站辅助) |
| latitude | 30.67** | 纬度(GCJ-02) | 位于某大学校区范围内(已模糊) |
| longitude | 104.14** | 经度(GCJ-02) | 位于某大学校区范围内(已模糊) |
| accuracy | 2.6 | 水平定位精度(米) | 非常精准(开阔地带手机常见精度) |
| type | ”gcj02” | 坐标系类型 | 中国加密坐标系 GCJ-02 |
| speed | 4.134 | 瞬时速度(m/s) | ≈ 14.9 km/h,正常步行/慢跑速度 |
| direction | 129.38 | 行进方向(度,0=正北,顺时针) | 东南偏南方向(≈130°) |
然后说到这里啦 比较聪明的小伙伴能够发现!
我们能通过改包直接完成一次跑步 只要有合适的请求体之类的 随便插一嘴哇 我现在仍被“需要登录”的问题阻挡 只是短暂绕过 (这个问题就是由于多平台登录 有个挤出问题导致的)
我的短暂的解决方式是 每次发包时 重新抓一个新包 可以说屡试不爽 但是仍然没有解决根本问题 这个之后再说啦q(≧▽≦q)