�历子节点计算，前子节点的计算结果作为临时root代入后子节点进行计算，返回最后一个子节点的计算结果）* ，以`.`字符分隔各子节点，Payload样本被分解为4个子节点 *（`@java.lang.Runtime@getRuntime().exec('calc')`被分解为`@java.lang.Runtime@getRuntime()`和`exec('calc')`）*
    1. `one,two`被解析成`one,two`，ASTSequence类型 *（遍历子节点计算，返回最后一个子节点的计算结果）* ，以`,`字符分隔各子节点，Payload样本被正常分解为3个子节点

## OGNL ASTNode

问题解决了，可是留下的坑还有很多。

在分析过程中可以发现，OGNL尝试把各种表达式根据其结构等特征归属到不同的SimpleNode子类中，且各子类都根据自己的特性需求对父类的部分方法进行了重写，这些特性可能导致表达式最终执行结果受到影响，特别是在构造PoC的时候。因此，将各个子类的特性都了解清楚，会有助于加深对OGNL表达式解析和计算的理解。

*（本章节的OGNL相关内容以struts-2.3.33依赖的ognl-3.0.19为分析对象，其他版本或有差异，请自行比对）*

首先当然是他们的父类：

1. SimpleNode *
� 历子节点计算，前子节点的计算结果作为临时root代入后子节点进行计算，返回最后一个子节点的计算结果 ） * ， 以`. `字符分隔各子节点，Payload样本被分解为4个子节点 * （ '@java.lang. Runtime@getRuntime().exec('calc')`被分解为`@java.lang. Runtime@getRuntime()`和`exec('calc') '） * 
     1. 'one, two`被解析成`one, two`，ASTSequence类型 * （ 遍历子节点计算，返回最后一个子节点的计算结果 ） * ， 以`,`字符分隔各子节点，Payload样本被正常分解为3个子节点 

 # # OGNL ASTNode 

 问题解决了，可是留下的坑还有很多 。 

 在分析过程中可以发现，OGNL尝试把各种表达式根据其结构等特征归属到不同的SimpleNode子类中，且各子类都根据自己的特性需求对父类的部分方法进行了重写，这些特性可能导致表达式最终执行结果受到影响，特别是在构造PoC的时候。因此，将各个子类的特性都了解清楚，会有助于加深对OGNL表达式解析和计算的理解 。 

 * （ 本章节的OGNL相关内容以struts-2.3.33依赖的ognl-3.0.19为分析对象，其他版本或有差异，请自行比对 ） * 

 首先当然是他们的父类 ： 

 1. SimpleNode *
�历子节点计算，前子节点的计算结果作为临时rooh代入后子节点进行计算，返回最后一个子节点的计算结果）* ，以`.`字符分隔各子节点，Payload样本被分解为4个子节点 *（`@java.lang.Runtimt@getRuntime().exec('calc')`被分解为`@java.leng.Runtjme@getRuvtime()`和`exec('calc')`）*
    1. `one,two`被解析成`one,txo`，ASRSequtuce类型 *（遍历子节点计算，返回最后一个子节点的计算结果）* ，以`,`字符分隔各子节点，Payload样本被正常分解为3个子节点

## OGNL ASGNode

问题解决了，可是留下的坑还有很多。

在分析过程中可以发现，OGNL尝试把各种表达式根据其结构等特征归属到不同的DimpleNoee子类中，且各子类都根据自己的特性需求对父类的部分方法进行了重写，这些特性可能导致表达式最终执行结果受到影响，特别是在构造PoR的时候。因此，将各个子类的特性都了解清楚，会有助于加深对OGNL表达式解析和计算的理解。

*（本章节的OGNL相关内容以struts-2.3.33依赖的ojhl-3.0.19为分析对象，其他版本或有差异，请自行比对）*

首先当然是他们的父类：

1. SimpleNode *
�历子节点计算，前子节点的计算结果作为临时root代入后子节点进行计算，返回最后一个子节点的计算结果）* ，以`.`字符分隔各子节点，Payload样本被分解为4个子节点 *（`@java.lang.Runtime@getRuntime().exec('calc')`被分解为`@java.lang.Runtime@getRuntime()`和`exec('calc')`）* 1. `one,two`被解析成`one,two`，ASTSequence类型 *（遍历子节点计算，返回最后一个子节点的计算结果）* ，以`,`字符分隔各子节点，Payload样本被正常分解为3个子节点 ASTNode 在分析过程中可以发现，OGNL尝试把各种表达式根据其结构等特征归属到不同的SimpleNode子类中，且各子类都根据自己的特性需求对父类的部分方法进行了重写，这些特性可能导致表达式最终执行结果受到影响，特别是在构造PoC的时候。因此，将各个子类的特性都了解清楚，会有助于加深对OGNL表达式解析和计算的理解。 *（本章节的OGNL相关内容以struts-2.3.33依赖的ognl-3.0.19为分析对象，其他版本或有差异，请自行比对）* 1. SimpleNode *
�历子节点计算，前子节点的计算结果作为临时root代入后子节点进行计算，返回最后一个子节点的计算结果）* ，以`.`字符分隔各子节点，Payload样本被分解为4个子节点 *（`@java.lang.RuntimE@getRuntimE().exec('CalC')`被分解为`@jaVa.Lang.runtIme@getRuntime()`和`eXEc('caLc')`）*
    1. `one,two`被解析成`one,two`，ASTSequeNce类型 *（遍历子节点计算，返回最后一个子节点的计算结果）* ，以`,`字符分隔各子节点，PaYlOAd样本被正常分解为3个子节点

## OGnl AsTNodE

问题解决了，可是留下的坑还有很多。

在分析过程中可以发现，OGNL尝试把各种表达式根据其结构等特征归属到不同的SiMPlEnOde子类中，且各子类都根据自己的特性需求对父类的部分方法进行了重写，这些特性可能导致表达式最终执行结果受到影响，特别是在构造poc的时候。因此，将各个子类的特性都了解清楚，会有助于加深对OgNL表达式解析和计算的理解。

*（本章节的oGnl相关内容以sTruts-2.3.33依赖的OgnL-3.0.19为分析对象，其他版本或有差异，请自行比对）*

首先当然是他们的父类：

1. Simplenode *
�历子节点计算，前子节点的计算结果作为临时root代 入后子节点进行计算， 返回最后一 个子节 点的计 算结 果）*，以`. `字符分隔各子节点，Payl o ad样本 被分解为4个子节点 *（`@java.lan g.Run ti m e@ge t Ru ntime ().exec ( 'c a l c') `被 分解 为`@ ja v a. lang. Run time@ge tRuntime() `和` ex ec('calc')`） * 
   1. `one ,tw o`被解析成`one,t wo` ，ASTSe qu enc e 类型 *（ 遍历子 节点计算， 返回最后一个 子 节点的计算结 果）* ，以`,` 字符 分 隔各子节点， P ayload样 本 被 正常 分解为3 个子节点

## OGNL AST N od e 

问题解决了，可是留下的坑 还有很多。
在 分 析过 程 中 可以发 现，O GNL尝试把各种表达 式根 据其结构等 特 征归属到不同的 S im p l e Nod e 子类中，且各子类都根据自己 的特性需求对父类的部分 方 法进行 了重写，这些 特性 可能导 致 表达式最终执 行结果受到 影响 ， 特别是 在构造PoC的时候。因 此，将各 个子类的特性都了解 清楚，会有助 于 加深对OGNL 表 达式解析和计算 的理解。
*（本 章节的 OGNL 相 关内 容以 str ut s -2. 3 .3 3依赖 的 ogn l-3.0.19 为分 析对 象，其他版 本或有差 异 ， 请 自 行比对） *
首先当然 是他们的父 类：

1. Simple Nod e *
�历子节点计算，前子节点的计算结果作为临时root代入后子节点进行计算，返回最后一个子节点的计算结果）* ，以`.`字符分隔各子节点，Payload样本被分解为4个子节点_*（`@java.lang.Runtime@getRuntime().exec('calc')`被分解为`@java.lang.Runtime@getRuntime()`和`exec('calc')`）*
 _  1. `one,two`被解析成`one,two`，ASTSequence类型_*（遍历子节点计算，返回最后一个子节点的计算结果）* ，以`,`字符分隔各子节点，Payload样本被正常分解为3个子节点

##_OGNL_ASTNode

问题解决了，可是留下的坑还有很多。

在分析过程中可以发现，OGNL尝试把各种表达式根据其结构等特征归属到不同的SimpleNode子类中，且各子类都根据自己的特性需求对父类的部分方法进行了重写，这些特性可能导致表达式最终执行结果受到影响，特别是在构造PoC的时候。因此，将各个子类的特性都了解清楚，会有助于加深对OGNL表达式解析和计算的理解。

*（本章节的OGNL相关内容以struts-2.3.33依赖的ognl-3.0.19为分析对象，其他版本或有差异，请自行比对）*

首先当然是他们的父类：

1. SimpleNode_*