• Stars
    star
    723
  • Rank 62,657 (Top 2 %)
  • Language
    Python
  • License
    GNU General Publi...
  • Created almost 2 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

一款API水平越权漏洞检测工具

API越权漏洞检测工具

概述

通过替换认证信息后重放请求,并对比数据包结果,判断接口是否存在越权漏洞

详细介绍:水平越权挖掘技巧与自动化越权漏洞检测

本工具仅供用于越权漏洞自动化测试的学习交流只用,工具本身只是个DEMO,其使用效果尚未得到充分的验证。

特点

  1. 支持HTTPS
  2. 自动过滤图片/js/css/html页面等静态内容
  3. 多线程检测,避免阻塞
  4. 支持输出报表与完整的URL、请求、响应

安装和使用

安装依赖

python3 -m pip install -r requirements.txt

启动

python3 start.py

即可监听socks5://127.0.0.1:8889。

安装证书

使用SwitchOmega等插件连接该代理,并访问mitm.it即可进入证书安装页面,根据操作系统进行证书安装。

以MacOS为例:

175143_y7wfgR

下载安装后,打开钥匙串访问,找到mitmproxy证书,修改为alwaystrust

175302_B8WD5s

检测漏洞

首先准备好目标系统的A、B两账号,根据系统的鉴权逻辑(Cookie、header、参数等)将A账号信息配置config/config.yml,之后登录B账号

175522_XdPt84

使用B账号访问,脚本会自动替换鉴权信息并重放,根据响应结果判断是否存在越权漏洞

175435_PFm3WY

生成报表

每次有新漏洞都会自动添加到report/result.html中,通过浏览器打开:

181645_PaztjA

点击具体条目可以展开/折叠对应的请求和响应:

181811_HJMDoo

检测逻辑

  1. 流量清洗:过滤掉静态资源和非json响应的请求
  2. 公共接口清洗:过滤掉无需参数即可访问的GET请求(例如/api/getCurrentTime)此类公共接口无需鉴权,因此无越权问题
  3. 长度卡点:判断响应长度是否大于100,用来去除一些空接口(只返回JSON骨架)
  4. 相似度检查:以Levenshtein距离计算相似度,相似度大于87%认为是相同的响应
  5. 关键字检查:对于响应长度小于100的请求判断是否包含“成功”“完成”等关键词。

测试用例

DEMO中给出了一个测试用代码,其中存在两个水平越权漏洞。

架构图