ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

接口安全测试:容易被忽略的 API 高危漏洞盘点

接口安全测试:容易被忽略的 API 高危漏洞盘点 接口安全测试容易被忽略的 API 高危漏洞盘点前言现在前后端分离、小程序、APP、H5 业务几乎所有交互都依靠 API 接口。很多安全测试人员习惯性使用扫描器重点检测 SQL 注入、XSS 这类传统 Web 漏洞。但 API 场景下大量高危漏洞属于授权缺陷、业务逻辑缺陷、配置错误扫描器很难发现也是很多企业上线前容易漏掉的安全短板。很多开发认为接口加了 Token、加了前端 sign 签名接口就是安全的。但签名只能防参数篡改不能替代后端权限校验、字段校验、幂等控制。本文结合 OWASP API Top10盘点接口安全测试中高频、但容易被忽略的高危 API 漏洞附带原理、测试方法和修复方案适合渗透测试、SRC 挖洞、甲方接口安全基线测试。免责声明本文技术内容仅用于已获得书面授权的接口安全测试、网络安全学习。严禁在未授权系统中调用、探测接口任何未经授权的接口测试行为违反网络安全相关法律法规。0x01 BOLA 失效的对象级授权水平越权API 类第一高危漏洞原理BOLABroken Object Level Authorization原 IDOR 不安全的直接对象引用也是接口测试最常挖到的高危漏洞。接口接收用户可控 IDorderId、userId、couponId后端只校验 Token 是否登录有效没有校验该用户是否拥有这条数据的操作权限OWASP Deve…。实战场景普通用户 A 调用查询订单接口GET /api/order/detail?orderId10001 Authorization: Bearer token_A正常返回 A 自己的订单。修改 orderId 为其他用户的订单编号10002携带 A 的 Token 直接请求成功拿到用户 B 的订单信息、手机号、收货地址。容易忽略的点批量查询接口更容易踩坑。POST /api/order/batch传入{ids:[10001,10002,10003]}单条接口做了权限校验但批量接口忘记校验一次性批量遍历大量用户数据。测试方法准备两个账号 A、BA 账号获取自己资源 ID替换为 B 的资源 ID使用 A 的 Token 发起请求观察是否返回 B 的敏感数据额外测试批量查询、导出接口这类接口权限校验最容易遗漏。修复方案后端查询数据时数据库查询语句必须同时带上当前登录用户 ID 作为查询条件禁止只根据前端传入的资源 ID 查询数据。0x02 BOPLA 对象属性级授权失效批量赋值 / 字段越权很多测试人员只关注 ID 越权很容易忽略 BOPLABroken Object Property Level Authorization。简单理解用户可以正常访问某个对象但是可以修改对象内不允许操作的敏感字段大量赋值漏洞。实战场景修改个人信息接口PUT /api/user/profile { email:testshturl., is_admin:true }业务本意只允许用户修改邮箱但是后端直接接收全部 JSON 字段更新数据库。攻击者在请求体新增is_admin:true字段直接提升为管理员权限。另一种场景过度返回数据。查询个人资料接口返回完整 JSON包含身份证、银行卡、内部标记字段前端页面只是不展示但原始接口响应里面明文返回敏感信息依靠前端过滤后端没有做字段过滤。测试方法正常抓包查看接口返回所有字段在请求体里新增额外敏感字段is_admin、role、balance提交请求查看字段是否成功写入数据库检查接口返回 JSON是否包含前端不需要的敏感字段。修复方案后端采用字段白名单只接收允许修改的字段返回数据时后端做字段过滤不能直接返回数据库实体全部字段。0x03 BFLA 功能级权限失效垂直越权BOLA 是 “同角色访问别人的数据”BFLABroken Function Level Authorization是低权限用户调用管理员专属接口属于垂直越权。场景管理员接口/api/user/list用于查询全部用户列表。开发只在前端菜单隐藏入口后端没有做角色校验。普通用户拿到接口路径携带普通用户 Token 直接请求成功获取全站用户数据。容易踩坑REST 风格接口、旧版本 v1 接口、后台管理 API前端隐藏之后很多开发忘记后端鉴权。测试方法使用管理员账号抓取所有后台接口替换 Token 为普通用户 Token直接调用管理员接口测试 PUT、DELETE 这类高危操作接口。修复方案所有接口统一做角色权限校验不能依靠前端隐藏菜单基于 RBAC 权限模型在网关或者接口层统一拦截。0x04 认证机制缺陷JWT/Token 安全问题传统扫描器很少深度检测 Token这一块漏洞很容易漏掉。常见缺陷JWT 签名未校验后端直接信任 JWT 载荷不校验签名。攻击者修改 payload 里面userId重新生成 JWT直接接管其他用户账号Token 永久有效没有过期时间刷新 Token 没有绑定设备泄露之后可以无限续期Token 放在 URL 参数传递日志里会记录 Token造成泄露。坑点很多开发认为 JWT 自带安全只要生成就没问题忽略签名校验、过期时间、密钥泄露风险。测试方法拿到 JWT修改 payload 中的用户 id重新编码发送请求删除 exp 过期字段测试是否仍然有效查看 token 是否在 URL 中传输。修复方案后端必须校验 JWT 签名设置合理过期时间密钥严格保管不能硬编码Token 放在请求头 Authorization禁止放在 URL。0x05 接口缺少幂等控制业务重放漏洞这是业务类 API 高频漏洞扫描器完全无法发现。同一个请求多次重放产生多次业务效果。典型场景领取优惠券接口没有幂等多次重放无限领取优惠券订单提交接口重复创建订单核销接口同一个核销码重复提交多次核销。很多业务仅前端限制按钮后端没有防重放机制。测试方法Burp 抓取业务提交请求使用 Repeater 多次重复发包观察业务是否多次生效。修复方案业务接口增加幂等号unique 流水号后端数据库唯一索引同一个流水号只处理一次。0x06 未限制资源消耗无频率限制API4Unrestricted Resource Consumption缺少限流、配额限制。风险场景登录、找回密码接口无频率限制暴力破解、撞库短信验证码接口无限制短信轰炸大数据查询接口不限制分页大小传入超大 pageSize一次性拉取全库数据造成数据库拖库、服务 DoS。容易忽略内部接口、后台接口开发默认只有内网访问不添加限流。一旦内网被突破直接拖库。测试方法对登录、短信接口进行多次循环请求修改分页参数 pageSize99999观察接口返回数据量。修复方案按用户 / IP 维度增加接口限流分页参数后端强制上限拒绝超大分页。0x07 影子 API、遗留旧接口资产管理不当OWASP API9 不当资产管理这个漏洞经常被忽略。很多项目迭代过程中旧版本 API/api/v1/xxx已经下线、前端不再使用但是后端服务没有删除。旧接口安全校验薄弱存在大量漏洞形成影子 API没有纳入安全管理、扫描、基线检查范围。还有预发布环境 API 直接暴露在公网测试 swagger 文档开放公网访问泄露全部接口参数。测试方法收集接口版本v1/v2/v3测试废弃旧版本接口探测/swagger、/openapi.json查看接口文档是否公网可访问。修复方案梳理全量 API 资产下线废弃旧接口生产环境禁用 Swagger、OpenAPI 文档。0x08 SSRF 服务端请求伪造API 参数传入 URL 场景很多 API 支持传入 URL用于图片抓取、网页预览、文件下载、webhook 回调。如果没有严格校验 URL 目标会触发 SSRF。攻击者传入内网地址http://127.0.0.1:8080让服务器访问内网探测内网资产、读取内网服务数据。容易忽略webhook 回调接口、图片远程上传接口这类接口开发很少做内网地址过滤。测试方法传入可控 URL 参数使用 Burp 的 SSRF 探测 payload尝试访问本地回环地址、内网网段。修复方案URL 白名单校验禁止访问内网、回环地址使用独立网络环境服务器禁止访问内网。0x09 CORS 跨域配置错误很多接口 CORS 配置不当Access-Control-Allow-Origin: *或者动态直接读取 Origin 头未做校验允许任意域名跨域读取接口返回敏感数据。搭配 Cookie 认证场景会造成跨域窃取用户数据。测试方法修改请求 Origin 头为任意恶意域名查看响应头Access-Control-Allow-Origin是否返回该域名。修复方案CORS 配置使用可信域名白名单不要直接配置*高敏感接口不要允许跨域。0x10 注入类漏洞JSON 注入、NoSQL 注入传统 SQL 注入大家都熟悉但是 JSON 格式接口容易忽略 NoSQL 注入、参数注入。比如 MongoDB 接口传入{username:{$ne:null}}绕过登录查询直接查询全部用户。还有参数污染、JSON 参数类型混淆数字和字符串切换。测试方法在 JSON 请求体中插入 NoSQL 操作符观察接口返回数据。修复方案参数强类型校验使用参数化查询禁止直接拼接用户输入到查询语句。0x11 签名机制缺陷很多开发误以为签名万能前面 JS 逆向文章提到的接口 sign 签名这里讲签名本身的漏洞签名只对部分参数做计算攻击者修改未参与签名的参数密钥硬编码在前端 JS没有 nonce 一次性随机串仅靠 timestamp时间窗口内可以重放签名算法弱MD5 无加盐。重点前端签名只是防普通爬虫不能作为权限校验依据不能阻止越权、业务漏洞。很多企业踩坑以为加了 sign 接口就安全忽略后端校验。0x12 接口安全标准化测试流程实战可用资产梳理收集全部 API包含版本、废弃旧接口、swagger 文档认证测试Token/JWT 校验、过期、传输方式权限测试BOLA、BFLA、BOPLA多账号对照测试业务测试幂等、重复提交、参数篡改资源限制限流、分页、请求大小注入与特殊接口SSRF、NoSQL 注入、CORS信息泄露响应返回敏感字段、详细报错堆栈影子接口排查扫描遗留旧版本 API。0x13 高频踩坑总结❌坑 1扫描器没有告警就认为接口没有漏洞大部分权限类、业务逻辑类 API 漏洞自动化扫描器无法识别必须人工多账号测试。❌坑 2接口加了 sign 签名就跳过权限测试sign 仅校验参数完整性不能校验用户资源归属依然存在 BOLA 越权漏洞。❌坑 3只测试前端调用的接口忽略 v1 旧版本、后台内部接口影子 API 往往是攻击突破口安全测试必须覆盖全部接口资产。❌坑 4只做对象级别权限忽略字段级权限BOPLA允许用户提交额外字段造成批量赋值提权这类漏洞隐蔽性极强。❌坑 5依赖前端按钮禁用后端不做幂等和次数限制前端限制很容易通过抓包绕过后端校验才有效。0x14 企业 API 安全建设建议API 网关统一管控鉴权、限流、日志不要分散在各个业务代码上线前做接口安全评审重点审核权限逻辑维护 API 资产清单及时下线废弃旧接口采用 Schema 校验对入参做严格校验使用字段白名单敏感业务接口增加幂等、防重放定期人工渗透测试不能只依靠自动化扫描。总结API 安全的核心风险和传统 Web 差异很大权限失效类漏洞是 API 场景最高危的风险。很多接口漏洞不会出现报错、注入特征只是返回了不属于当前用户的数据或者执行了不允许的业务操作。接口安全测试不能依赖扫描器一键扫漏洞需要站在业务角度多账号、多角色对照测试关注权限、字段、业务状态、幂等性。前端签名、Token 认证、加密传输都只是安全防护中的一环后端多层次的权限校验、参数校验才是 API 安全的根基。一句话记住扫描器只能发现特征漏洞API 高危漏洞大多藏在权限和业务逻辑里需要人工对照多账号测试。最后关于网络安全技术储备学好网络安全不论是就业还是做副业赚钱都不错但要学会网络安全还是要有一个学习规划。最后大家分享一份全套的网络安全学习资料给那些想学习网络安全的小伙伴们一点帮助对于0基础小白入门如果你是零基础小白想快速入门网络安全是可以考虑的。一方面是学习时间相对较短学习内容更全面更集中。二方面是可以找到适合自己的学习方案包括网安成长学习路线图、SRC黑客文档、护网行动、黑客必读书单、面试题、学习视频等教程。带你从零基础系统性的学好网络安全需要的可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】1.成长路线图学习规划要学习一门新的技术作为新手一定要先学习成长路线图方向不对努力白费。对于从来没有接触过网络安全的同学我们帮你准备了详细的学习成长路线图学习规划。可以说是最科学最系统的学习路线大家跟着这个大的方向学习准没问题。2.网安入门到进阶视频教程很多朋友都不喜欢晦涩的文字我也为大家准备了视频教程其中一共有21个章节每个章节都是当前板块的精华浓缩。全套教程文末领取哈3.SRC黑客文档大家最喜欢也是最关心的SRC技术文籍黑客技术也有收录SRC技术文籍黑客资料由于是敏感资源这里不能直接展示哦全套教程文末领取哈4.护网行动资料其中关于HW护网行动也准备了对应的资料这些内容可相当于比赛的金手指5.黑客必读书单随着互联网技术的飞速发展网络安全已经成为了当今科技领域的一大热点。这些SQL注入、CCNA、Web渗透、Linux服务器等以其强大的语言理解和防御能力正在守护着我们网络世界。 那以下这些PDF籍就是非常不错的学习资源。6.网络安全岗面试题合集当你自学到这里你就要开始思考找工作的事情了而工作绕不开的就是真题和面试题。这份完整版的网络安全学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
返回列表