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漏洞介绍及代码分析】解析执行
- iOS|苹果推送iOS15.2.1正式版修复漏洞为主 用户是否要更新看体验再说
- iOS|苹果发布iOS 15.2.1修补严重的HomeKit DDoS漏洞
- apache|如果美团外卖倒闭,对当今社会来说是利大于弊?还是弊大于利?
- IT之家1月14日消息|netusbusb共享组件中存在严重的远程代码执行漏洞
- Google|WordPress 爆料核心漏洞致使数百万个网站遭受攻击
- 谷歌|2G网络漏洞威胁大 新版安卓将加入开关允许用户手动关闭
- 中高端无线路由器 USB 共享组件被曝严重漏洞,厂商推出固件更新
- 美光|SATA SSD硬盘爆出安全漏洞 美光:攻击很难 会推更新
- 漏洞|苹果将出席白宫会议讨论开源软件的安全风险问题
- it|年轻黑客宣称远程控制了 25 辆特斯拉:并非通过软件漏洞操作