ujcms-8.0.2任意文件上传漏洞(CVE-2023-51806)
youkill 发表于 四川 漏洞分析 1526浏览 · 2024-01-25 09:09

前言

前沿知识

关于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)

仅学习使用

0 条评论
某人
表情
可输入 255