ElasticSearchPersistenceServiceImpl重写的excute()方法中
看完buildFilter() , 然后接着看eval()(count()方法作用不大 , 忽略)eval()最终回溯到的位置(即入口位置)位于ElasticSearchPersistenceServiceImpl重写的testMatch()方法中
然后只需要找出调用如下两个方法的位置就可以找到完整的调用链
ElasticSearchPersistenceServiceImpl#excute()
ElasticSearchPersistenceServiceImpl#testMatch()
正推分析接下来我开始从请求的入口处开始进行分析
在docker环境中找到了如下jar包
unomi-wab-1.5.1.jar
这个jar包包含了处理web的逻辑 , 其对应着的源码包是
unomi-unomi-root-1.5.1/wab
里面的contextServlet.class对应着我们请求的/context.json
该类继承了HttpServlet类 , 且无doGet()和doPost()方法 , 但是有用于处理请求的service()方法
注:service()此方法是接收http-request请求的原始方法 , 请求会发送到这个方法然后才会向doGet()或doPost()分发
这里的
contextRequest就是我们poc传入的body(可以根据getSessionId等方法以及响应数据判断出来)接着这里会将
contextRequest作为参数传入handleRequest()接着看到355行
在执行
getFilters()后 , 拿到的应该是如下部分之后进入for循环 , 比较重要的是有一个
personalizedContent对象 , 这个类的数据结构如下:正好对应着我们上图传入的内容
然后跟进359行的
personalizationService.filter()方法所以这里的
注:personalizationService是interface , 我们知道 , 接口不可以实例化 。 但是接口对象可以指向它的实现类对象 。
filter()应该是其Impl类的filter()方法 , 所以我们跟进位于源码包unomi-unomi-root-1.5.1\\services\\src\\main\\java\\org\\apache\\unomi\\services\\impl\\profiles\\ProfileServiceImpl.java
的
filter()方法然后跟进67行的
profileService.matchCondition()也在同一个源码包下在781行出现了最关键的
persistenceService.testMatch() , 而上半段分析的ElasticSearchPersistenceServiceImpl正好是persistenceService唯一的实现类至此 , 整个调用链已经打通 , 我们整理一下调用链
调用链整理org.apache.unomi.web.ContextServlet#service() -> org.apache.unomi.web.ContextServlet#handleRequest() -> org.apache.unomi.services.impl.personalization.PersonalizationServiceImpl#filter() -> org.apache.unomi.services.impl.profiles.ProfileServiceImpl#matchCondition() -> org.apache.unomi.persistence.elasticsearch.ElasticSearchPersistenceServiceImpl#testMatch() -> org.apache.unomi.persistence.elasticsearch.conditions.ConditionEvaluatorDispatcher#eval() -> org.apache.unomi.persistence.elasticsearch.conditions.ConditionContextHelper#getContextualCondition() -> org.apache.unomi.persistence.elasticsearch.conditions.ConditionContextHelper#parseParameter() -> org.apache.unomi.persistence.elasticsearch.conditions.ConditionContextHelper#executeScript()
最终被
executeScript()的MVEL.executeExpression(mvelExpressions.get(script) context);
【apache|apacheunomi漏洞介绍及代码分析】解析执行
- 安全漏洞|又一新规发布:禁止美企向中企分享安全漏洞,鸿蒙迎来最佳发展机遇!
- |美国拒绝分享系统漏洞,中国打造首个桌面操作系统根社区应对
- apache|汇总 | 2022年6月,全价格段性价比最高的装机方案,你想要的都在这
- 高通骁龙|薅羊毛遭秋后算账,微软大规模退款因漏洞低价购入的XGP会员
- apache|华为手机,vivo手机和iQOO哪个性价比好,各有什么优缺点?
- 微软、英特尔警告:Win11/10/8.1 存在 MMIO 陈旧数据漏洞
- AMD|x86 CPU 危!最新漏洞引发热议 黑客可远程窃取密钥
- 香烟|直播间成香烟卖场,堵住漏洞要线上线下并行
- 操作系统|美出台新规:限制向我国分享安全漏洞,中企:来得很及时!
- 香烟|直播间成香烟卖场 堵住漏洞要线上线下并行
