【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、利用代码
a、构造请求
GET:创建Image对象,其src属性为目标URL
1 |
|
POST:如下
1 |
|
b、结合BeEF
安装及使用链接:BeEF wiki
c、恶意跳转
1 |
|
三、WAF绕过
1、大小写
当只过滤了 script 时,可以通过变换大小写绕过
2、双写过滤的字符
当只对特定字符替换为空一遍时,可以通过双写绕过
如替换 script 为空时,可以写成 scrscriptipt ,过滤为空后为 script
3、写在其他标签中
如:
1 |
|
4、在其中加入其他特殊字符
如:! @ # ¥ % …… & * ( ) ! @ # $ % ^ & * ( ) / \ | 等
5、其他
详见:链接
【CTF笔记】XSS漏洞
https://hel1um17.github.io/2025/02/11/2025-02-11/