XSS与CSRF漏洞利用与防范实战

本实验基于 Pikachu 靶场,通过实操演示反射型与存储型 XSS 的攻击流程,并结合在线 XSS 平台进行钓鱼攻击模拟,最后演示 CSRF 漏洞的请求伪造与防御。

实验环境

  • 靶场: 本地部署的 Pikachu 靶场
  • 工具: 浏览器、BurpSuite、XSS 平台(如 Beef XSS)

一、反射型 XSS 实战演练

反射型 XSS(非持久化)通常存在于搜索框或URL参数中,需要诱导受害者点击。

1. 探测注入点

  • 在靶场的反射型 XSS 页面,输入 hello
  • 观察到输入的 hello 被反射回 HTML 页面中,且 URL 变成了 GET 请求(如 ?name=hello&submit=提交)。

2. 测试 HTML 标签

  • 输入 <h1>test</h1>
  • 页面出现巨大的 test 字样,说明后台没有对 < > 等特殊字符进行过滤,存在漏洞。

3. 绕过前端限制与执行脚本

  • 输入 payload:<script>alert('xss')</script>,发现输入框有长度限制。
  • 绕过方法: 右键“检查”,双击该输入框的 HTML 源码,手动修改 maxlength 属性。
  • 再次输入 payload,成功弹出警告框。

二、存储型 XSS 与钓鱼攻击模拟

存储型 XSS 会将恶意脚本永久存入数据库,影响所有访问该页面的用户。

1. 留言板注入与持久化验证

  • 在留言框中输入:<script>alert('test')</script> 并提交,弹出警告框。
  • 持久性验证: 刷新页面或更换浏览器访问留言板,弹窗依然出现。这是存储型与反射型最大的区别。

2. 结合 XSS 平台进行钓鱼攻击

为了窃取用户的 Cookie 甚至控制浏览器,攻击者通常会使用 XSS 平台生成特定的 Payload。

  • 获取 Payload: 在 XSS 平台(如 Beef)创建项目,选择合适的模块(如窃取 Cookie 或 Flash 钓鱼弹窗)并生成 JavaScript 代码。
  • 植入恶意代码: 将生成的代码插入靶场留言板提交。
  • 攻击效果: 当受害者访问留言板时,XSS 平台会成功捕获其浏览器版本、操作系统及 Cookie 信息。若配置了 Flash 钓鱼模块,受害者页面会弹出“Flash版本过低”的虚假提示,诱导下载木马程序。

三、CSRF 客户端请求伪造实战

CSRF 漏洞允许攻击者冒充已登录用户发起恶意请求。

1. GET 型 CSRF 攻击

  • 抓包分析: 使用 BurpSuite 抓取受害者(如用户科比)修改个人信息的 GET 请求,发现参数直接暴露在 URL 中(如 ?username=kobe&sex=boy&phone=12345)。
  • 构造恶意链接: 攻击者篡改参数(如修改手机号),拼接成恶意 URL,并通过短链接或图片标签 <img src="恶意URL"> 伪装,诱导受害者点击触发。

2. POST 型 CSRF 攻击

  • 抓包分析: 若修改信息接口使用 POST 请求,参数在请求体中,无法通过 URL 触发。
  • 生成 PoC: 使用 BurpSuite 的 CSRF PoC 生成器,构造一个包含隐藏表单和自动提交脚本的 HTML 页面。
  • 攻击实施: 将该 HTML 页面部署在攻击者服务器上,受害者访问后即在后台静默提交表单完成信息篡改。

3. 防御验证(Token机制)

修复该漏洞的核心是在请求数据包中加入 Token 字段。服务器在接收请求时校验该随机字符串,由于同源策略限制,攻击者无法从恶意站点读取受害者的有效 Token,从而导致伪造请求失败。