前言
前沿知识
关于xss漏洞,它的本质其实就是执行了javascript里面的js代码,而简单的wps是没有携带转pdf的,但我们可以通过脚本的方式对pdf添加javascript代码并且可使用。
首先,(Acrobat)JavaScript工作的主要条件是使用的PDF查看器实现了(Acrobat)JavaScript(至少是表单中使用的对象、属性和方法)
xss漏洞
跨站脚本攻击XSS通过将恶意得Script代码注入到Web页面中,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。
可以理解为网站的注入攻击,将恶意脚本注入到网页,别的用户访问时,浏览器就会对网页进行解析执行,达到攻击网站的其它访问者。
XSS主要基于JavaScript完成恶意的攻击行为,由于JS可以非常灵活地操作html、css和浏览器。
所以XSS漏洞的攻击对象并不是网站,,而是访问网站的用户。
漏洞描述
Ujcms v.8.0.2 存在文件上传漏洞,本地攻击者可以通过精心制作的文件执行任意代码。
影响版本
Ujcms v.8.0.2
漏洞成因
没有对其过滤用户上传的PDF文件,判断其中是否存有js代码
这一段是对其进行文件上传部分,没有对其pdf进行验证
代码分析
先进行到这里
checkFilesManagementEnabled():检查文件管理是否启用,可能是一个预处理步骤,确保文件管理功能处于正确的状态。
String name = FilenameUtils.getName(params.id);:从参数中获取文件ID,并使用FilenameUtils工具类获取文件名。
checkId(params.id);:检查文件ID,可能是确保文件ID的有效性的检查。
checkName(name, params.name);:检查文件名,可能是确保文件名的有效性的检查。
FileHandler fileHandler = storage.getFileHandler(pathResolver);:从给定的存储配置中获取文件处理器(FileHandler),
if (StringUtils.equalsAny(FilenameUtils.getExtension(params.id), TEXT_EXTENSIONS)):检查文件扩展名是否与预定义的文本文件扩展名匹配。如果是文本文件,则执行下一步,但这一步没有进行检验
fileHandler.store(params.id, params.text);:如果是文本文件,则将文件内容存储到文件处理器中。
if (!StringUtils.equals(name, params.name)):检查文件名是否需要修改。
fileHandler.rename(params.id, params.name);:如果文件名需要修改,则将文件重命名为新的文件名。
中级有一个检查文件名的地方
先是检查的是斜杠一类和点
这是先获取长度,判断是否为空
这里就没有对其内容进行验证
漏洞的利用
点击预览,然后发给朋友或者谁打开
文件上传中的pdf的生成
使用PyPDF2库
pip install PyPDF2
下面只是基础的xss的形成,具体按需求修改
from PyPDF2 import PdfReader, PdfWriter
output_pdf = PdfWriter()
page = output_pdf.add_blank_page(width=72, height=72)
output_pdf.add_js("app.alert('Youkill');")
with open("xss.pdf", "wb") as f:
output_pdf.write(f)