JoSQL全称SQL for Java Objects,提供了应用SQL语句的Java对象的集合的能力开发,JoSQL提供了搜索,排序,group等对Java对象的集合进行类似SQL的查询应该应用的功能。
例如,查找所有在2004年内修改过的html文件:
java中使用JoSQL:
下面分析下远程代码造成的原因
1.首先写一个demo查询从User列表中查询:
上面代码运行结果是:
现在将sql语句换成:
则运行结果:
从上面结果就可以看出help方法被调用了,从而可以得知joSQL可以调用无参函数(关键)。
2.joSQL存在一个特性,即可以通过new来构造一个新的对象比如:
执行结果:
3.joSQL另外一个特性就是可以通过EXECUTE ON支持函数式编程。其执行结果可以通过变量作为其他查询参数来调用
语法:EXECUTE ON ALL | RESULTS | GROUP_BY_RESULTS Expression [ , Expression ]* [ [ AS ] Alias ] 例子:
执行结果:
从结果中可以看到Demo成功被创建。
结合第1,2,3点可以执行无参函数,则我们可以调用ProcessBuilder的start可以执行系统命令。
执行结果:
则系统命令成功被执行。
利用场景
当某处查询利用了joSQL并且存在注入,则通过这个漏洞直接调用系统命令。