CSRF 和越权漏洞笔记:改密 PoC 页面怎么写、水平越权和垂直越权的区别,这两个类型我都在 Pikachu 靶场完整演示过。
核心知识点
1. CSRF 原理
- 称:Cross-Site Request Forgery(跨站请求伪造)。
- 定义:攻击构造恶意页面,诱导已登录目标用户的浏览器向存在 CSRF 漏洞的站点发送恶意请求,从而盗用用户身份完成操作。
- 通俗例子(淘宝):用户已登录淘宝,访问攻击构造的恶意网页,该网页偷偷让浏览器向淘宝发送”修改密码”等敏感请求。浏览器自动带上用户登录凭证(Cookie),淘宝误以为是用户本人操作,整个过程用户毫不知。
- CSRF 成功的前提(记):用户已保持登录状态。未登录用户访问恶意链接会被重定向到登录页,攻击无效。
- 防护机制:操作携带随机生成的 token,证明是用户主动发起的请求;二次验证(如密码/验证码)。
2. CSRF 演示(修改密码)
- DVWA 修改密码请求字段:
password_new、password_conf、change=change。 - 对比验证:已登录的浏览器访问恶意构造链接可直接改密;未登录浏览器被重定向拦截。
- 用 test.html 构造恶意页面,观察修改密码的 URL 结构来加深理解。
3. XSS 与 Cookie 窃取(与 CSRF )
- JS 页面跳转:
document.location='http://...'或简写location='http://...',效果相同,立即发起 GET 请求。 - 收集 Cookie:向指定 URL 发送请求时自动携带当前所有 Cookie 信息(Pikachu 的”空品收集”后台功能)。
- 理解要点:1)有权限的用户自己触发操作是 CSRF 成功的前提;2)XSS 可以实现数据窃取。
4. 越权攻击
两种类型:
- 水平越权:权限相同的用户之间非法访问数据。例:学生张三和李四权限相同,张三通过修改 URL 中的用户 ID/用户名参数看到李四的个人信息。
- 垂直越权:低权限用户获取高权限功能。例:普通学生张三本无权增删改查账号,但通过漏洞获得管理员权限。
水平越权演示:
- 系统显示当前登录用户(如 lily),直接修改 URL 参数中的 username(改成 lucy/kobe),就能越权查看同权限用户信息。
- 漏洞根源:系统依赖前端传递的 username 参数判断身份,未在后端校验当前登录会话是否请求的数据。
垂直越权演示:
- 普通用户”皮卡丘”登录后,直接访问管理员的”创建用户”链接,能后台并创建新用户。
- 分析抓发现:请求中携带 PHP Session 字段,系统通过 Session 区分用户身份;修改身份标识(如把管理员改为普通用户)后权限验证未实时更新,旧请求仍被接受。
- 危害:低权限用户可执行高权限操作,批量爬取同权限用户敏感信息。
5. 防御
- CSRF:token 校验、SameSite Cookie、二次确认、Referer 校验。
- 越权:后端根据当前会话(Session)校验操作身份与数据归属,不能信任前端传来的用户 ID/身份标识;访问控制列表(ACL)严格分级。
实操步骤
# CSRF 测试:构造恶意页面(修改密码)
# 登录目标站 → 抓取修改密码请求 → 构造 test.html 诱导点击
# 已登录浏览器点击即触发,未登录被拦截
# 水平越权:修改 URL 参数
?username=lily → ?username=lucy
# 垂直越权:普通用户访问管理员功能 URL
用普通账号登录后,直接访问添加用户的管理链接
常见错误与排查
- CSRF 不生效 → 检查是否已登录目标站;检查是否有 token 防护。
- 越权测试不生效 → 确认修改的是”身份标识”还是”数据 ID”;注意后端 Session 校验。
- 抓分析身份 → PHP Session 等会话标识字段。