[JAVA代码审计]OFCMSv1.3.3之前存在SQL注入漏洞

Posted Y4tacker

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[JAVA代码审计]OFCMSv1.3.3之前存在SQL注入漏洞相关的知识,希望对你有一定的参考价值。

写在前面

好久没碰过Javaweb了,但是感觉自己配环境的时候还是满熟练的哈,这一篇算是超级简单那种了,就开启我的Java审计之旅吧

环境配置

我这里是老古董无敌兼容版本Jdk1.8,开启配置
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

分析

漏洞点在http://url/admin/system/generate/create.json?sqlid=,在com/ofsoft/cms/admin/controller/system/SystemGenerateController.java,能看到这里直接接收了sql参数
在这里插入图片描述
看看传参方式,跟踪getpara函数,只是一个get请求罢了
在这里插入图片描述

再来跟踪update方法

public static int update(String sql) {
        return MAIN.update(sql);
    }

再跟进

public int update(String sql) {
        return this.update(sql, DbKit.NULL_PARA_ARRAY);
    }

终于到了最关键的地方吧,这里...是可变长参数,也就是相当于一个数组,能够传入0个至n个参数,好久没碰java有点忘了,一般可以用foreach取得每个参数

public int update(String sql, Object... paras) {
        Connection conn = null;

        int var4;
        try {
            conn = this.config.getConnection();
            var4 = this.update(this.config, conn, sql, paras);
        } catch (Exception var8) {
            throw new ActiveRecordException(var8);
        } finally {
            this.config.close(conn);
        }

        return var4;
    }

看到先建立数据库链接,再执行update(也太多update了,吐槽,委屈

int update(Config config, Connection conn, String sql, Object... paras) throws SQLException {
        PreparedStatement pst = conn.prepareStatement(sql);
        config.dialect.fillStatement(pst, paras);
        int result = pst.executeUpdate();
        DbKit.close(pst);
        return result;
    }

我们甚至能看到这里还是高科技用了预编译可惜没用,我们传入的完整sql语句直接被执行了,没有一点点过滤,真拉跨,当然既然是update那就直接配合报错注入吧,payload是

update of_cms_link set link_name=updatexml(1,concat(0x7e,(user())),0) where link_id = 4

在这里插入图片描述

以上是关于[JAVA代码审计]OFCMSv1.3.3之前存在SQL注入漏洞的主要内容,如果未能解决你的问题,请参考以下文章

JAVA代码审计 SQL注入篇

代码审计学php还是java

Java代码审计之SQL注入

Java代码审计

[PHP代码审计]LightCMS1.3.7存在命令执行漏洞

[PHP代码审计]LightCMS1.3.7存在命令执行漏洞