首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >渗透测测之“list”查询页面利用技巧

渗透测测之“list”查询页面利用技巧

作者头像
瓦都剋
发布2020-12-03 10:44:44
5830
发布2020-12-03 10:44:44
举报
文章被收录于专栏:安全泰式柑汁安全泰式柑汁

前言

近期在处理接口越权漏洞的问题,在前期漏洞测试、调研的时候发现部分“list”的查询功能的越权漏洞可通过一些特殊技巧来获取更多的数据、扩大漏洞影响。

0x01 漏洞复现

打码比较严重,请见谅。

首先访问接口发现可越权获取数据。OK,今日KPI稳了。

看着群里大佬又再聊在上海哪哪哪买了房子,不禁眼睛一酸。又重新审视了下这个漏洞,好像只有10条,怎么扩大下漏洞危害呢?

仔细看了下数据包,一个total字段告诉我并不简单。

开始考虑“list”页面的Fuzz手段。

Fuzz的通用手段,那就是猜参数了,响应包中的字段可能就是参数,那就补上试试。

发现响应包中存在id字段,通过添加参数成功获取到对应的数据。

但是有个问题,假如ID是UUID格式,无法遍历,那这样的话影响并没有变大。

继续看

发现数据包中存在pages字段,看这数字大概率是这个接口功能设计时如下:

  1. 若没有参数,默认拉取后面的xx条数据
  2. 若有参数,根据参数查询

没毛病,可通过多种途径获取全量数据,明天的KPI也稳了。

0x02 举一反三

通过上面的例子思考了下“list”这种页面的套路,举一反三。

在日常中做Django开发做分页的时候,一般分为两种:

  • 简单分页器,也就是常见的控制page和pageSize等;
  • 偏移分页器,也就是控制limit、offset等;

2.1 页面相关参数

pages、pageNo、pageNum、page_num、size、length、total、totalRowNum、totalPage、page_size、pageSize、pageCount、pageIndex、pageSizestartIndex 、limitSize、prePage、nextPage、isFirstPage、isLastPage、currentPage、hasPreviousPage、hasNextPage、navigatePages、navigatepageNums、navigateFirstPage、navigateLastPage

具体形式可常规 id=1类型也可json类型,根据实际情况变通。

{"pages":2, "pageNo":2, "pageNum":20, "page_num":20, "size":20, "length":20, "total":100, "totalRowNum":100, "totalPage":5, "page_size":2, "pageSize":2, "pageCount":20, "pageIndex":2, "pageSizestartIndex":2, "prePage":2, "nextPage":3, "isFirstPage":false, "isLastPage":false, "currentPage":2, "hasPreviousPage":true, "hasNextPage":true, "navigatePages":[2,3], "navigatepageNums":[2,3], "navigateFirstPage":2, "navigateLastPage":10}

2.2 偏移相关参数

limit、limitSize、startRow、endRow、currentIndex、offSet

具体形式

{"limit":10, "limitSize":20, "startRow":2, "endRow":5, "currentIndex":2, "offSet":5}

2.3 ID相关参数

byId、byid、by_id、byOrderId、ById、ByUserId、id、number

具体形式

常规形式:
byId=1、byid=1、by_id=1、byOrderId=1、ById=1、ByUserId=1、id=1、number=1
Json形式:
{"byId":1, "byid":1, "by_id":1, "byOrderId":1, "ById":1, "ByUserId":1, "id":1, "number":1}

2.4 其他

apiVersion、version、channel、type

具体形式

apiVersion=1.0.0、version=1.0、channel=H5、type=wx

以上只是列举一些常用的,自己可私下收集作为字典使用。

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 变形接口名
- api/user/query
- api/user/info
3.3.2 变形角色接口
- api/admin/userQuery
- api/admin/userList

# 至于命名是驼峰还是下划线还是其他,根据实际场景变通。
3.3.3 变形API版本
- api/user/listV1
- api/user/listV2
- api/user/listv1
- api/user/listv2
- api/user/listOne
- api/user/listTwo

3.4 扫描目录

  • 字典
  • 递归
琐碎

在我写完文章,准备上传到图床时,我大意了啊,没有闪开。

原本添加ssl是为了安全,现在却让本不富裕的我雪上加霜,可能不久的将来blog就关站了。(疯狂暗示富二代赶紧打赏)

七某云,我劝你耗子尾汁,好好反省,尽快把我的账单清掉!!!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-12-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小宝的安全学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 0x01 漏洞复现
  • 0x02 举一反三
    • 2.1 页面相关参数
      • 2.2 偏移相关参数
        • 2.3 ID相关参数
          • 2.4 其他
          • 0x03 获取方法
            • 3.1 通过第三方应用
              • 3.2 通过API文档
                • 3.3 通过已知接口
                  • 3.3.1 变形接口名
                  • 3.3.2 变形角色接口
                  • 3.3.3 变形API版本
                • 3.4 扫描目录
                  • 琐碎
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档