拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

逻辑漏洞比 0day 更危险|越权漏洞挖掘思路总结

逻辑漏洞比 0day 更危险|越权漏洞挖掘思路总结

逻辑漏洞比 0day 更危险|越权漏洞挖掘思路总结

免责声明:本文仅用于网络安全学习,文中思路仅可用于自己授权范围内的测试,严禁用于未授权渗透、攻击、数据窃取等违法行为,一切违规操作后果由行为人自行承担。

前言

提到漏洞,很多人第一反应是 SQL 注入、XSS、命令执行、0day 这类高危漏洞。0day 听起来炫酷,一旦爆出就能快速拿下服务器,但是 0day 可遇不可求,门槛高、存量少,并且厂商往往会快速修复。

而逻辑漏洞,尤其是越权漏洞,没有复杂的 Payload,没有特征化的报错,很多时候只是业务流程设计考虑不周。它广泛存在于各类 Web 应用、小程序、APP 接口中,大量越权漏洞不需要利用任何底层代码缺陷,仅凭业务逻辑缺陷就能直接窃取、篡改他人数据。

在真实攻防演练、漏洞挖掘场景里,逻辑越权的危害往往比 0day 更大:0day 可能受环境、补丁限制无法利用;但越权只要业务没做好权限校验,几乎通杀所有用户数据,且很多厂商不认为这是高危漏洞,修复优先级很低,大量存量越权长期躺在线上。

这也是我挖漏洞过程中最深的感受:代码漏洞靠工具扫描,逻辑漏洞靠思考。

一、什么是越权漏洞

越权,简单理解就是用户拿到了不属于自己的权限,访问 / 操作别人的数据。
分为两大类:

  1. 水平越权:同角色之间越权。A 用户和 B 用户权限等级一样,A 可以查看、修改 B 的信息。例如用户 A 改请求参数里的user_id=1001,就能看到 user_id=1002 用户的订单、手机号。
  2. 垂直越权:低权限用户拿到高权限功能。普通用户直接访问管理员接口,新增管理员、查看后台所有用户数据。

核心本质:后端只信任前端传过来的参数,没有在服务端校验「当前登录用户,是否有权操作目标资源」。

前端只是展示页面,所有的权限判断,绝对不能放在前端。很多开发做权限控制只在页面隐藏按钮,后端接口不校验,这就是越权产生最常见的根源。

二、为什么越权比 0day 更危险

  1. 数量多,覆盖面广
    0day 是未知代码漏洞,数量稀少;越权属于业务设计缺陷,电商、OA、CRM、小程序、后台管理系统几乎随处可见。很多业务迭代速度快,开发重心在功能实现,权限校验容易被忽略。
  2. 难扫描,自动化工具很难发现
    AWVS、Nessus 这类扫描器,很难识别业务逻辑。扫描器可以检测 SQL 注入的特征,但它看不懂 “修改 id 就能看别人订单” 这种业务逻辑问题。越权漏洞大多只能人工挖掘,大量漏洞长期不被发现。
  3. 危害直接,直击核心业务数据
    利用越权不需要上传木马、拿服务器权限。改一个 ID 参数,就能批量导出用户手机号、身份证、订单、资产信息,直接造成用户隐私泄露,这是很多企业最害怕的风险。
  4. 修复不重视
    很多厂商会把注入、命令执行标记高危;但越权经常被判定为中危甚至低危,修复排期一拖再拖,很多业务甚至长期不修复。
    而 0day 一旦公开,全网紧急打补丁。
  5. 利用门槛极低
    不需要复杂的漏洞原理,抓包改参数,替换 ID,重放请求,就能验证漏洞。新人挖漏洞,逻辑越权也是最容易挖到第一个有效漏洞的方向。

一句话总结:0day 是攻城重炮,稀缺难寻;越权是后门,遍地都是,悄悄拿走核心数据。

三、越权漏洞通用挖掘思路

3.1 准备工作:准备两个账号

挖掘越权最基础的操作,注册两个同角色账号 A、B。

  • A 账号:自己主账号,正常操作,抓包。
  • B 账号:辅助账号,用来验证是否能访问 B 的数据。
    两个账号最好有明显区分的数据:订单、个人资料、资产、文件、留言等。

核心测试思想:A 登录状态下,尝试访问 B 的资源。

3.2 重点寻找可控参数

抓包观察请求,寻找代表资源唯一标识的参数,常见名称:
id、user_id、uid、order_id、article_id、file_id、record_id、account_id、mobile、card_id

测试步骤:

  1. 使用账号 A,查看自己的订单,抓包拿到自己的order_id=10001
  2. 修改参数为账号 B 的订单号order_id=10002,保持 A 的 Cookie/token 不变,重放请求
  3. 观察返回结果:如果返回 B 的订单信息,水平越权存在

不仅仅是 GET 请求,POST、JSON 接口一样测试。很多现在前后端分离项目,token 放在请求头,只需要修改请求体里的资源 ID。

3.3 全业务流程逐个梳理

按照业务流程走一遍,每一个增删改查接口都要考虑越权:

  1. 查询类接口:查看个人资料、订单列表、账单、文件、消息、收藏
  2. 修改类接口:修改手机号、密码、收货地址、资产信息
  3. 删除类接口:删除订单、文件、留言
  4. 新增接口:创建单据、上传文件(看是否能归属到其他用户名下)

很多人只测查询越权,忽略修改和删除越权。修改类越权危害更大,比如修改别人的收货地址,修改他人密码。

3.4 垂直越权挖掘思路

垂直越权是低权限访问高权限接口。
测试思路:

  1. 普通用户账号登录,抓取普通用户所有接口
  2. 寻找后台管理接口路径,例如/admin/user/list、/api/admin/adduser
  3. 在普通用户 token/cookie 不变的情况下,直接请求管理员接口
  4. 如果可以访问管理员数据、执行管理员操作,即为垂直越权

小技巧:

  • 观察前端 JS、接口返回数据包,很多会泄露后台接口地址
  • 查看接口命名,带有 admin、manage、super、root 关键词的接口优先测试

3.5 分页与批量接口的越权(容易被忽略)

有些接口不是通过单 id 查询,而是列表分页接口。
例如/api/order/list?page=1&size=10
如果后端没有做用户过滤,直接返回全库数据,会出现批量越权,一次性获取所有用户数据。

这种漏洞危害巨大,很多时候比单条越权严重得多。
测试方式:登录 A 账号,调用列表接口,看是否返回 A 以外其他用户数据。

3.6 资源标识符遍历测试(ID 遍历)

拿到一条有效 ID,尝试递增 / 递减 ID,看能不能遍历其他用户数据。
id=1001 → 1002 →1003
适合订单、工单、文件这类自增 ID 场景。

注意:不要大规模批量遍历,授权测试范围内少量验证即可,避免违规。

3.7 多身份场景下的越权

部分系统角色复杂:用户、商家、客服、子账号。
需要测试跨角色越权:

  • 子账号能否操作主账号数据
  • 商家 A 能否查看商家 B 店铺订单
  • 客服能否越权修改非自己负责用户的数据

3.8 JWT、Token 场景下的越权

现在大量接口使用 JWT token 认证。
很多开发误以为 JWT 加密了就安全,但是:

  • JWT 只做身份认证,不代表做了资源权限校验
    token 确认你是谁,但是接口没有判断 “你能不能操作这个 id 的数据”,依然会产生越权。
    不要看到 JWT 就跳过越权测试。

四、常见坑点:这些情况容易误判

  1. 接口返回统一报错,但是可以通过响应时间、返回长度判断数据是否存在,不要轻易下结论。
  2. 有些接口做了简单过滤,只能同部门越权,跨部门不行,属于部分越权,依然是漏洞。
  3. 有些前端做了拦截,但是后端接口没校验,直接调用接口就能绕过,不要只看页面效果。
  4. 资源 ID 不是数字,UUID、字符串类型 id,同样存在越权,不要因为不是自增 id 直接放弃测试。

五、越权漏洞的修复方案

  1. 所有权限校验必须放在后端,前端隐藏按钮没有任何安全作用。
  2. 每一次接口请求,后端获取当前登录用户身份,校验该用户是否拥有目标资源的操作权限。

伪代码示例:

// 不安全写法:直接根据id查询 select * from order where id = ${order_id} // 安全写法:同时带上当前用户uid校验 select * from order where id = ${order_id} AND user_id = 当前登录uid
  1. 资源查询、修改、删除接口,强制绑定所属用户标识。
  2. 管理员接口增加角色校验,校验当前用户角色是否为管理员,不能仅靠路由隐藏。
  3. 列表查询接口,默认追加用户身份过滤条件,禁止直接返回全量数据。
  4. 权限模块统一封装,所有接口复用统一权限校验组件,避免开发遗漏。

六、挖掘经验总结

在长期漏洞挖掘中,我发现:
很多新人一上来就拿着扫描器疯狂扫注入、XSS,耗费大量时间,却忽略逻辑漏洞。
逻辑漏洞不需要高超的代码审计功底,核心在于模拟业务角色,思考业务流程,思考资源归属。

0day 固然耀眼,但在真实的企业安全风险里,逻辑越权才是常态化、高危害、长期被低估的漏洞。
漏洞挖掘不只是寻找代码缺陷,更是寻找业务设计上的思维盲区。业务越复杂,权限流转越多,越容易出现越权。

在测试时,记住一个核心灵魂拷问:

后端接口收到请求时,有没有确认:这个登录用户,凭什么能操作这条数据?

如果答案是否定的,大概率存在越权。

写在最后

安全行业很多人沉迷 0day 的光环,但是业务逻辑漏洞才是蓝队、白帽子日常对抗中最常遇到的风险。
工具可以辅助,但是逻辑漏洞只能靠人的思考。学好越权挖掘思路,是每一位 Web 安全学习者必须掌握的基本功。

再次提醒:漏洞挖掘必须在获得书面授权的目标上开展,未经授权的测试属于违法行为。


最后

网络安全需要学习那些知识

网络安全零基础入门学习路线&规划

初级
1、网络安全理论知识(2天)
①了解行业相关背景,前景,确定发展方向。
②学习网络安全相关法律法规。
③网络安全运营的概念。
④等保简介、等保规定、流程和规范。(非常重要)

2、渗透测试基础(一周)
①渗透测试的流程、分类、标准
②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking
③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察
④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等

3、操作系统基础(一周)
①Windows系统常见功能和命令
②Kali Linux系统常见功能和命令
③操作系统安全(系统入侵排查/系统加固基础)

4、计算机网络基础(一周)
①计算机网络基础、协议和架构
②网络通信原理、OSI模型、数据转发流程
③常见协议解析(HTTP、TCP/IP、ARP等)
④网络攻击技术与网络安全防御技术
⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现

5、数据库基础操作(2天)
①数据库基础
②SQL语言基础
③数据库安全加固

6、Web渗透(1周)
①HTML、CSS和JavaScript简介
②OWASP Top10
③Web漏洞扫描工具
④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)

恭喜你,如果学到这里,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web 渗透、安全服务、安全分析等岗位;如果等保模块学的好,还可以从事等保工程师。薪资区间6k-15k

到此为止,大概1个月的时间。你已经成为了一名“脚本小子”。那么你还想往下探索吗?

想要入坑黑客&网络安全的朋友,给大家准备了一份:282G全网最全的网络安全资料包免费领取!

7、脚本编程(初级/中级/高级)
在网络安全领域。是否具备编程能力是“脚本小子”和真正黑客的本质区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力.

零基础入门,建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习; 搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP, IDE强烈推荐Sublime; ·Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,不要看完; ·用Python编写漏洞的exp,然后写一个简单的网络爬虫; ·PHP基本语法学习并书写一个简单的博客系统; 熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选); ·了解Bootstrap的布局或者CSS。

8、超级黑客
这部分内容对零基础的同学来说还比较遥远,就不展开细说了,贴一个大概的路线。

网络安全工程师企业级学习路线

视频配套资料&国内外网安书籍、文档&工具
当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料&工具,并且已经帮大家分好类了。

一些我自己买的、其他平台白嫖不到的视频教程:

要学习网安其实不难,难的是坚持和相信自己,我的经验是既然已经选定网安你就要相信它,相信它能成为你日后进阶的高效渠道,这样自己才会更有信念去学习,才能在碰到困难的时候坚持下去。

机会属于有准备的人,这是一个实力的时代。人和人之间的差距不在于智商,而在于如何利用业余时间,只要你想学习,什么时候开始都不晚,不要担心这担心那,你只需努力,剩下的交给时间!

这份完整版的学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

返回列表