当前位置: 首页 > news >正文

XSS(跨站脚本攻击)

基本概念

XSS是一种将恶意脚本注入到其他用户浏览的网页中的攻击方式

分类

  • 反射型
    • 非持久化攻击
    • 典型场景
恶意URL:http://example.com/search?q=<script>alert(1)</script>
当用户点击该链接时,服务器返回的页面中包含未转义的搜索词,导致脚本执行
  • 存储型
    • 持久化攻击
    • 恶意脚本被永久存储再目标服务器上
    • 当其他用户访问包含该脚本的页面时触发
    • 典型场景
攻击者在论坛评论区提交:
<script>stealCookie()</script>
该评论被存入数据库,每当其他用户查看该评论页面时恶意脚本都会执行
  • Dom型
    • 完全在客户端执行,不涉及服务器
    • 恶意代码通过修改DOM环境在客户端执行
    • 典型场景
// 漏洞代码
document.write(location.hash.substring(1));
// 攻击者构造的URL
http://example.com#<script>alert(1)</script>

特征

反射型XSS

DOM型XSS

存储型XSS

持久性

非持久

非持久

持久

触发方式

需要用户点击恶意链接

需要用户点击恶意链接

自动触发(访问被污染页面)

存储位置

不存储

不存储

服务器存储

传播范围

单个用户

单个用户

所有访问用户

防御难度

较易防御

较难检测

危害最大,需重点防御

常见位置

  • 会回显搜索内容的搜索框
  • 会回显用户数据的输入字段
  • 返回用户提供文本的错误消息
  • 包含用户提供数据的隐藏字段
  • 任何显示用户提供数据的页面
  • HTTP头部信息

危害

  1. 直接会话威胁
  2. 身份冒用风险
  3. 恶意代码执行
  4. 增强钓鱼攻击可信性
  5. 商业与法律风险

攻击流程

  • 反射型

识别漏洞位置,构造漏洞->诱导用户点击->网站未过滤,嵌入->恶意代码执行->数据 回传、利用

  • Dom型

区别在于漏洞构造和客户端执行阶段 纯客户端,完全不接触服务器

//构造恶意URL(通常包含hash或参数):
http://vulnerable-site.com#<img src=x onerror=stealCookie()>// 漏洞代码示例
document.getElementById('content').innerHTML = location.hash.substring(1);  // 不安全地插入hash内容

CrossSiteScriptingLesson1

靶场

把选项勾上就成功了

审计

就是简单的检验一下传入的checkboxAttack1这个是否为空

CrossSiteScriptingLesson5a

一个基础的反射型XSS

靶场

先找一下漏洞点,发现在第一个输入框

直接写入<script>alert(1)</script>就行

审计

这里利用XSS_PATTERN判断语句是否有XSS尝试,如field2没有,field1有,则成功返回

XSS_PATTERN的定义

这是一个大小写不敏感,严格匹配 <script>...</script> 结构以及只判断alert和console.log()两个特定函数的用于XSS过滤的正则表达式

CrossSiteScriptingLesson6a

由于DOM类型是纯客户端的,所以代码审计需要在前端里

先把涉及到的代码找到

完整的攻击链:URL参数 → testRoute → testHandler → showTestParam → innerHTML

后端仅检查格式start.mvc#test/,不检查内容

通过

DOMCrossSiteScriptingVerifier

审计

重点看这个已经给出的函数,

发送POST请求到指定端点"CrossSiteScripting/phone-home-xss",携带固定此参数和特殊请求头,收到响应后在控制台输出结果··

"CrossSiteScripting/phone-home-xss"用于生成随机数

这里是对随机数的匹配判断

靶场

访问

http://127.0.0.1:8080/WebGoat/start.mvc#test/%3Cscript%3Ewebgoat.customjs.phoneHome%28%29%3C%2Fscript%3E

之后可以在控制台看到随机数,输入即可

http://www.lryc.cn/news/584223.html

相关文章:

  • 3.9 spring的mybatis数据库数据回弹以及下划线,驼峰转换
  • 【音视频】TS协议解析
  • 在vscode中和obsidian中使用Mermaid
  • SSRF(ctfshow)
  • 生成式人工智能实战 | 自注意力生成对抗网络(Self-Attention Generative Adversarial Network, SAGAN)
  • Java并发编程中的StampedLock详解:原理、实践与性能优化
  • UI前端大数据可视化实战策略:如何设计交互式数据探索界面?
  • Spring AI Alibaba(2)——通过Graph实现工作流
  • 异步I/O库:libuv、libev、libevent与libeio
  • Ubuntu基础(Python虚拟环境和Vue)
  • 输入框过滤选项列表,el-checkbox-group单选
  • 案例分享--福建洋柄水库大桥智慧桥梁安全监测(二)之数字孪生和系统平台
  • Qt开发:QtConcurrent介绍和使用
  • 【网络】Linux 内核优化实战 - net.ipv4.tcp_max_orphans
  • 如何发现Redis中的bigkey?
  • 数据库复合索引设计:为什么等值查询列应该放在范围查询列前面?
  • ip地址可以精确到什么级别?如何获取/更改ip地址
  • 第1讲:C语言常见概念
  • 实训八——路由器与交换机与网线
  • TCP传输控制层协议深入理解
  • 20250710【再来一题快慢指针】Leetcodehot100之141【首个自己一遍pass】今天计划
  • 【算法笔记】6.LeetCode-Hot100-链表专项
  • 数据跨越信任边界及修复方案
  • 通过vue如何利用 Three 绘制 简单3D模型(源码案例)
  • 观成科技:基于自监督学习技术的恶意加密流量检测方案
  • 科技守护银发睡眠健康:七彩喜睡眠监护仪重塑养老新体验
  • 医学+AI!湖北中医药大学信息工程学院与和鲸科技签约101数智领航计划
  • 图片合并pdf
  • MinerU将PDF转成md文件,并分拣图片
  • 【fitz+PIL】PDF图片文字颜色加深