XSS与CSRF漏洞利用与防范实战
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,从而导致伪造请求失败。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 小枝的博客!