ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

好靶场:逻辑漏洞-越权漏洞

好靶场:逻辑漏洞-越权漏洞 ⚠️免责声明本文所有操作仅在【好靶场】官方授权的线上安全练习靶场中完成仅用于网络安全原理学习、技术研究。严禁将文中Payload、漏洞利用方法应用到任何未获得授权的公网服务器、网站。未经授权对网站进行渗透测试属于违法行为一切违规操作由行为人自行承担法律责任。越权漏洞笔记重点抓哪些数据包只抓业务数据接口静态资源、页面 HTML、简单登录检测包不用重点看列表查询接口最高优先级特征AJAX 异步请求POST/GET返回 JSON 数组关键词list/get/query/api/xxx例子/api/student学生列表、订单列表单条详情接口特征GET /xxx?id1通过编号查看单条记录经典 IDOR 场景增删改业务接口POST/PUT/DELETE携带 id可测试越权修改 / 删除权限角色接口返回role/type/is_adminCookie 携带角色字段容易出现垂直越权可忽略css/js/ 图片等静态资源、单纯登录状态检测包寻找可修改参数两类核心参数1. 平行越权跨用户 / 租户读取数据作用控制查询哪一份数据常见参数id、user_id、order_id、pid、school_id、tenant_id、uid、record_id存放位置URL 参数、POST 表单、JSON 请求体2. 垂直越权权限提升作用控制当前用户身份权限常见参数type、role、is_admin、admin、permission、user_type存放位置Cookie、请求头、POST body⚠️ 区分参数在 URL/POST body大概率后端读取可测试Cookie 里的参数有可能只是前端展示用后端从 session 读取修改无效标准化测试步骤Burp 实操抓包保存原始参数session 保持不变身份不能丢逐个修改参数发包到 Repeater对比响应结果判断返回他人数据 / 多出敏感字段 → 存在越权返回空 / 无权限提示 / 还是自己数据 → 后端鉴权参数仅前端使用业务联动校验部分场景需要同步修改配套参数原则逐个测试参数不要一次性改多个方便定位漏洞点参数可能出现的 4 个位置全部检查URL 查询串?id1POST 表单x-www-form-urlencoded表单数据POST JSON{user_id:111}Cookietype0; school2025029补充自定义请求头也可能携带可控参数不要漏掉自检清单是否为业务查询接口返回列表 / 详情 JSON是否存在编号参数id /pid/school_id是否存在角色参数type /role/is_admin参数位置URL / POST body / Cookie修改参数保留 session观察响应变化判断能否读不属于自己的数据平行能否提升权限垂直一个攒劲的购物网站25本关提示:支付项1.借助页面给的手机号注册并登录网站。个人中心里有一个订单记录和支付项有关。里面有一个用户ID可以手动输入输入1尝试刷新页面并抓包发现参数为user_id2.猜测在购买商品时是否可以通过水平越权改变用户ID点击立即支付时抓包放到攻击器在unpaid后面添加user_id1对1进行标记攻击一个攒劲的购物网站18本关提示购物车项你知道range是干什么的吗前置知识Range是什么1.Range定义Range是HTTP 请求头作用是只请求资源的一部分字节而不是下载整个文件属于 HTTP/1.1 标准。2.语法Range: bytesstart-endbytes固定前缀代表按字节偏移读取不能省略start起始字节位置从 0 开始计数end结束字节位置包含该字节几种合法写法 1. Range: bytes0-100读取第 0 ~ 100 字节共 101 个字节 2. Range: bytes100-从 100 字节读到文件末尾不写结束位置 3. Range: bytes-20读取文件**最后 20 字节** 4. Range: bytes0-50,100-150多段分片读取很少用3.对应响应状态码206 Partial Content成功返回你请求的片段响应头会带上Content-Range: bytes 0-38/39416 Requested Range Not Satisfiable请求范围非法。比如范围超过文件总大小、格式写错如没写bytesRange 相关漏洞原理漏洞后端代码对 Range 的逻辑校验缺陷。漏洞 1文件读取限制绕过CTF 最常考就是你现在这个靶场场景后端做了限制直接完整下载 flag.txt 会被拦截 / 返回空但是支持 Range 分片读取。后端校验逻辑只在完整下载文件的时候做权限 / 内容过滤当携带 Range 头请求部分片段时跳过了校验逻辑直接返回文件片段。解题一个门户网站哎漏洞不安全的直接对象引用 IDOR平行越权 原理应用使用用户 id 作为资源访问标识在查询用户信息接口处查询目标用户时泄露目标用户的 session 会话凭证访问详情接口时服务端仅依靠 Cookie 中的 session 判断用户身份未做严格的权限校验。攻击者获取目标用户 session 后携带该 session 访问目标 id 对应的资源接口成功读取属于目标用户的敏感数据网站的两个安全缺陷查询用户信息接口查询他人数据时泄露对方 session 凭证高危正常业务绝对不会返回别人 session/hr/detail/{id}详情接口只看 Cookie 里的 session 是谁不做二次权限校验。1.进入人才招聘页面随便点一个立即报名信息随便填点击提交报名时bp抓包里面id和talent_id标记爆破发现id5时找到“小秋”并且有session_id。Set-Cookie: sessioneyJ1bmxvY2tlZF90YWxlbnRfNSI6dHJ1ZX0.arn9NQ.mnrVsM3rny7xxKXSrBEzJJa7e4M; HttpOnly; Path/2.在下面的公司人员随机点一个抓包将id改为5session换成小秋的flag{242ed9dfcf4941bcadd3ae11280285c1}系统采购员2漏洞客户端前端校验绕过 原理业务访问限制仅在前端 JavaScript 中通过window.location.hostname校验访问域名后端服务未对请求来源域名做权限校验。攻击者可直接绕过前端 JS 校验手动调用后端接口/api/flag?idlocation直接获取敏感 flag 数据。1.登录demo/demo这个测试账号点击进入付费中心页面说访问受限2.刷新页面时抓包查看响应包发现可以尝试绕过前端校验直接进入接口页面flag{2b0e337cf7e94964b6959a116530eab8篡改 Cookie 实现任意用户伪造1.注册用户并登录进入个人信息页面抓包标记UserID和AccountID爆破,发现只有刚才注册的那个账号的信息。2.点击投诉管理重复刚才的操作flag{7abcdb70f9bc44fb8ef4fb25734f6a94存在缺陷的退款流程漏洞平行越权IDOR 不安全的直接对象引用 原理用户信息查询接口将用户 ID 直接置于 URL 路径参数中后端仅使用传入的 userId 查询数据库缺少对访问者身份的权限校验未判断当前登录用户是否具备访问该用户数据的权限。攻击者修改 URL 中的 userId或者使用 Intruder 爆破遍历用户 ID即可获取其他用户的个人敏感信息拿到 flag。这道靶场的问题只做了认证没做鉴权认证正常你必须登录才能访问接口。没有鉴权后端拿到 URL 传进来的 userId直接去数据库查不去对比当前登录用户 ID 和被访问的 userId 是否一致。 所以你把 URL 改成别人的 ID服务器直接返回别人信息造成平行越权。1.个人信息页面刷新抓包在响应包中发现userId参数2.标记Id末尾数字爆破flag{cc93089305cc465ca85c5142ab54add2}WebSocket也可以有越权漏洞WebSocket 越权垂直越权 原理服务端仅在 WebSocket 握手阶段校验身份只读取握手包内的param判断权限没有将长连接与用户会话做绑定校验。攻击者修改握手消息中的param值为管理员标识握手建立后服务端认为攻击者是管理员返回管理员敏感数据。登录user用户。网页源码刷新并抓包param的值从2修改为1flag{8707f1243d9045bfa451f66480525829}ETag权限混淆漏洞漏洞基于 ETag/If-Match 并发控制逻辑缺陷导致的垂直越权 (IDOR)原理后端在处理携带If-Match请求头时优先校验文档版本 ETag缺失对资源所属用户的权限校验。攻击者使用自己账号笔记的合法 ETag访问管理员笔记 ID携带 If-Match 头即可绕过权限限制读取管理员机密笔记。前置知识ETag 是服务器给每一份资源笔记打的唯一指纹放在响应头里返回给浏览器。If-Match: 指纹的含义服务器只有当你当前这份资源的 ETag和我请求头里写的指纹一致时才处理本次请求不一致就拒绝返回 412。解题题目提示构造接口url并抓包进入详情构造ID3的请求包flag{29dc111f070340ae89a10862502d7be1}一个多租户的学生登录系统漏洞平行越权跨学校读数据 Cookie 篡改垂直越权提升角色看到 flag。平行越权IDOR不安全的直接对象引用接口接收 POST 参数PID作为查询学校的标识后端没有校验当前登录用户所属学校是否与 PID 指定学校一致直接使用 PID 去数据库查询对应学校学生数据导致可以跨学校读取其他租户信息。垂直越权权限提升后端直接读取 Cookie 中的type参数判断用户角色没有从服务端 session 中读取真实权限角色。普通用户type0只能查看基础字段修改为type1管理员后端返回完整数据包含 flag 字段。额外校验逻辑接口会校验 Cookie 中school值与 POST 请求体PID的学校编号必须一致二者不一致会拦截请求因此需要同步修改。解题1.使用普通账号登录系统进入学生管理页面抓包。2.找到学生列表查询接口POST /api/student3.将数据包发送至 Burp Repeater修改三处参数PID告诉后端「我要查哪一个学校的数据」越权核心Cookie school告诉后端前端当前选中的学校要和 PID 保持一致否则拦截Cookie type告诉后端「我是什么角色」改成 1 拿到管理员权限flag{73182ec1e8af4e848dada0f609ec6cf9某酒店服务任意用户登录接管1.点击我的套餐券进行身份认证先输入随意电话弹出提示框说测试手机号为18888888888。用这个号码成功获得验证码并验证2.接着抓到会员确认的数据包里面有个token有base64编码解码看看token: MDU3MjAzMHwxODg4ODg4ODg4OA3.点击我的宾客意见并抓包id可以改变进行爆破攻击数值1-200。前三个长度最长的数据包里有其他人的意见包含电话4.用0572030|15812342896进行base64编码伪造tokenflag{20bac39106d1408584289aa5ea345985}你能进入管理后台吗1.利用官方字典爆破用户名和密码2.登录后提示秘密在管理员后台。刷新该页面并抓包看到cookie中有一个user参数尝试改为admin发现不行标记此处用字典爆破正确为systemflag{82fb8676362c493c9e8748563f7eef2a}一个多租户的学生登录系统2后端把权限校验开关交给前端type控制一旦校验关闭直接信任前端可控的encrypt_school租户标识没有二次校验导致多租户数据隔离被突破实现水平越权。登录测试用户进入后点击学校时抓包查看信息退回登录页点击不同学校抓包获得各自的encrypt_school俄罗斯大学encrypt_school:gwX3LNtsh9cFehcgoANcAOJfr26_uTTwZgZ2X08lYts重新用“美国大学-user-user登录点击学校时抓包修改PIDencrypt_school,type发现能看到其他学校的学生信息好靶场encrypt_school:Z5btAMCBWoYz6cy996o2SP6wAwDkHyHn61sxVUgdxxk重新用“美国大学-user-user登录点击学校时抓包修改PIDencrypt_school,type只要 type 参数有值就开启租户隔离只有 type 参数的值为空才关闭校验flag{f3ce0ef531c949ffad1be1989eafea31}隐藏的参数漏洞类型垂直越权IDOR不安全的直接对象引用业务场景普通用户登录访问 dashboard 面板正常情况下只能查看普通用户界面无法访问管理员功能。漏洞成因后端鉴权逻辑缺陷直接读取 GET 请求参数is_admin来判断用户身份权限未校验当前会话 (session) 对应的用户真实角色。攻击者可以自行构造 URL 追加is_admin1参数绕过权限控制提升权限获取管理员页面内容与 flag。使用测试账号user/user登录进入显示普通账户统计面板什么都不能点刷新抓包。根据题目隐藏的参数可以改变权限想到fuzz。使用CaA插件注意取消勾选EndpointBurp Intruder 取消勾选【URL 编码字符】防止 payload 被 URL 编码后端无法识别is_admin。flag{a2264f81155c40b49f333b9adda44d6f}数字西游-欢迎来到水帘洞做客尝试发现被拦截。查看留言的原码发现留言是闭合需要把留言闭合且尝试双写绕过url编码等等手段最后/li%3c/a%3e%3cscript%3ealert(%22xss%22)%3c/script%3eli成功留言。/a是闭合 a 标签就算页面里没有对应的a浏览器会容错直接忽略这个多余的/a继续正常解析后面的scriptJS 正常执行弹窗。前面随便加**开标签xxx或者闭合标签/xxx**都行。 浏览器遇到不认识的标签直接忽略后面script正常解析执行 JS。构造数据包获得访问码访问码haobachang666999.输入访问码进入接下来与两个人相关。查看源码发现一个崩将军账号: bengjiangjun123使用万能密码1’ or ‘1’1成功登录根据提示得出关键在另一个账户芭将军上在巡逻日志中找到芭将军账号base64解码后为bajiangjun3215直接修改密码时抓包把账号和密码修改后重新登录flag{9a2003f161a340d3b8ca67c0a0ac3ef5}一个多租户的学生登录系统3在登陆页面点击不同的学校同时抓包重发获得encrypt_school好靶场TEe7efSCdF58VqOh-InrpTck78CTMMxcYC8BpxzUmQM俄罗斯CRZRicvw87EQVC9D8CUCmBbZRKmcZSOFY0C5WzYqwoM登录后点击“点击学校”同时抓包修改cookie当中 encrypt_schoolTEe7efSCdF58VqOh-InrpTck78CTMMxcYC8BpxzUmQM; type;PIDS%253ATEe7efSCdF58VqOh-InrpTck78CTMMxcYC8BpxzUmQMschoolTEe7efSCdF58VqOh-InrpTck78CTMMxcYC8BpxzUmQMtype重发后发现只有10个人的信息但是总共有105人修改pagerows105得到flag{93f9af9bbff34a8c96d2d6761bee4c45}
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进