引言
H2 database 允许用户自定义函数别名,然后执行Java代码。这一特性可以导致SQL注入漏洞提升为RCE。某系统前台存在SQL注入漏洞,因为后台默认采用H2 database,结合Resin命令回显以及BCEL字节码方式,可实现命令执行回显。
漏洞分析
漏洞本身比较简单。查看web.xml文件:

所有的*.do访问URL均通过springmvc进行处理。定位client.do处理代码`ClientAction.class`:

当参数`method`的值为`getupload`,进入`getupload`函数处理:


提取`uploadID`参数,并通过`MobileManager#getUpload`进行处理:

进入`mobileService#getMobileUserUpload`函数:

直接进行了参数拼接,导致出现SQL注入漏洞。系统后台默认采用H2 database数据库,所以有注入就可以直接执行java代码。
SQL注入到RCE
系统后台默认采用H2 database数据库。H2 database允许用户定义函数别名:
H2 database create alias
https://www.h2database.com/html/commands.html#create_alias
因此可以执行Java代码。使用`CALL`语句调用别名,执行Java代码:
CREATE ALIAS EXEC AS$$ void e(String cmd) throws java.io.IOException{java.lang.Runtime rt= java.lang.Runtime.getRuntime();rt.exec(cmd);}$$CALL EXEC('whoami');
结合Resin回显和`com.sun.org.apache.bcel.internal.util.ClassLoader`字节码方式,可以构造命令回显利用:

参考
https://www.h2database.com/html/commands.html#create_alias
由于传播、利用此文档提供的信息而造成任何直接或间接的后果及损害,均由使用本人负责,且听安全团队及文章作者不为此承担任何责任。
点关注,不迷路!

文章转载自且听安全,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




