记一次某市交通局自查行动中从前端JS到335万条业务数据


摘要由 AI 智能生成

前段时间参加了某市交通运输局的自查项目

资产爬下来常规端口扫描 web识别

Vue前端 静态资源在8080 接口走1080网关
打开登录页 惯例F12

/dist/ 目录列表没关 webpack的东西全裸着
manifest.js翻路由 登录逻辑在chunk 3 formLogin里一眼看到这个

formLogin: {
  username: "", password: "", deviceId: "", validCode: "",
  grant_type: "password", scope: "app",
  client_id: "webApp",
  client_secret: "webApp"
}

图1 JS里的硬编码凭据

client_id webApp client_secret webApp 一对凭据明文躺在公开js里

不过password那套grant要用户名密码还带验证码 光有这对凭据还差口气
OAuth还有种grant_type叫client_credentials 服务对服务用的 签出来的是服务级令牌 没有用户上下文 前端这种公开客户端按理说根本不该配上
但它连secret都敢塞浏览器 后端八成就是把它当机密客户端配的 那认证中心多半也顺手开了client_credentials
Spring Cloud全家桶里这么干的见过好几个 直接试

发包 grant_type换成client_credentials 凭据用js里那对

图2 签发令牌

200 令牌回来了
图3 令牌响应

翻接口文档拿到业务接口 swagger的v2/api-docs惯例都在 这个也没设防 219KB 166个接口
先打最像主台账的 overweightinfo/getAll

图4 称重台账

三百多万条过磅记录

换接口 getTelList把企业联系人通讯录整个吐出来 手机号加企业绑定关系

图5 企业通讯录

getMsgById按id逐条取 短信库一共15011条
正文就是发给企业的超载通知 车牌时间地点都在

图7 短信库

图8 短信正文

照片是视频接口
图6 过磅照片

主要两个问题
secret发到了浏览器 公开客户端本该走PKCE
认证中心给webApp开了client_credentials 资源服务器只认scope就放行
把client_credentials一关这条链就断 换secret都是其次

评论区
头像