前言
近期在处理接口越权漏洞的问题,在前期漏洞测试、调研的时候发现部分“list”的查询功能的越权漏洞可通过一些特殊技巧来获取更多的数据、扩大漏洞影响。
0x01 漏洞复现
打码比较严重,请见谅。
首先访问接口发现可越权获取数据。OK,今日KPI稳了。
看着群里大佬又再聊在上海哪哪哪买了房子,不禁眼睛一酸。又重新审视了下这个漏洞,好像只有10条,怎么扩大下漏洞危害呢?
仔细看了下数据包,一个total字段告诉我并不简单。
开始考虑“list”页面的Fuzz手段。
Fuzz的通用手段,那就是猜参数了,响应包中的字段可能就是参数,那就补上试试。
发现响应包中存在id字段,通过添加参数成功获取到对应的数据。
但是有个问题,假如ID是UUID格式,无法遍历,那这样的话影响并没有变大。
继续看
发现数据包中存在pages字段,看这数字大概率是这个接口功能设计时如下:
- 若没有参数,默认拉取后面的xx条数据
- 若有参数,根据参数查询
没毛病,可通过多种途径获取全量数据,明天的KPI也稳了。
0x02 举一反三
通过上面的例子思考了下“list”这种页面的套路,举一反三。
在日常中做Django开发做分页的时候,一般分为两种:
- 简单分页器,也就是常见的控制page和pageSize等;
- 偏移分页器,也就是控制limit、offset等;
2.1 页面相关参数
|
|
具体形式可常规id=1
类型也可json类型,根据实际情况变通。
|
|
2.2 偏移相关参数
|
|
具体形式
|
|
2.3 ID相关参数
|
|
具体形式
|
|
2.4 其他
|
|
具体形式
|
|
以上只是列举一些常用的,自己可私下收集作为字典使用。
0x03 获取方法
说完参数,那说下接口的问题。如果接口找不到,那参数自然也是没啥用武之地了。
我这里列举下常见的,大家自行收集。
3.1 通过第三方应用
- druid
- Spring boot actuator
3.2 通过API文档
- swagger-ui
- doc.html
- api/xxx.html
- …
3.3 通过已知接口
这个也需要根据实际场景来,比如有个接口为api/user/list
,那么可进行的变形:
3.3.1 变形接口名
|
|
3.3.2 变形角色接口
|
|
3.3.3 变形API版本
|
|
3.4 扫描目录
- 字典
- 递归
琐碎
在我写完文章,准备上传到图床时,我大意了啊,没有闪开。
原本添加ssl是为了安全,现在却让本不富裕的我雪上加霜,可能不久的将来blog就关站了。(疯狂暗示富二代赶紧打赏)
七某云,我劝你耗子尾汁,好好反省,尽快把我的账单清掉!!!