CSRF 与越权:改密 PoC 怎么写、水平/垂直越权的区别,基于 Pikachu 靶场演示。
核心知识点
1. CSRF 原理
- 全称:Cross-Site Request Forgery(跨站请求伪造)。
- 定义:攻击者构造恶意页面,诱导已登录目标的浏览器向有漏洞站点发请求,盗用身份完成操作。
- 例子(淘宝):用户已登录淘宝,访问恶意页面,页面偷偷让浏览器发”修改密码”请求;浏览器自动带 Cookie,淘宝误认为本人操作,用户全程不知情。
- 成功前提:用户已保持登录;未登录会被重定向到登录页,攻击无效。
- 防护:操作携带随机 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 的”空品收集”后台功能)。
- 要点:有权限的用户自己触发操作是 CSRF 成功前提;XSS 可实现数据窃取。
4. 越权攻击
两种类型:
- 水平越权:权限相同的用户之间非法访问数据。例:张三和李四权限相同,张三改 URL 里的用户 ID/用户名参数看到李四的个人信息。
- 垂直越权:低权限用户获取高权限功能。例:普通学生本无权增删改查账号,通过漏洞拿到管理员权限。
水平越权演示:系统按 URL 参数里的 username 显示当前用户(如 lily),改成 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 等会话标识字段。