Batik渲染png图片异常的bug修复 batik是apache的一个开源项目,可以实现svg的渲染,后端借助它可以比较简单的实现图片渲染,当然和java一贯处理图片不太方便一样,使用起来也有不少坑 :180) at org.apache.batik.bridge.SVGImageElementBridge.createGraphicsNode(SVGImageElementBridge.java :122) at org.apache.batik.bridge.GVTBuilder.buildGraphicsNode(GVTBuilder.java:213) at org.apache.batik.bridge.GVTBuilder.buildComposite (GVTBuilder.java:171) at org.apache.batik.bridge.GVTBuilder.build(GVTBuilder.java:82) at org.apache.batik.transcoder.SVGAbstractTranscoder.transcode :92) at org.apache.batik.transcoder.XMLAbstractTranscoder.transcode(XMLAbstractTranscoder.java:142)
Batik渲染png图片异常的bug修复 batik是apache的一个开源项目,可以实现svg的渲染,后端借助它可以比较简单的实现图片渲染,当然和java一贯处理图片不太方便一样,使用起来也有不少坑 :180) at org.apache.batik.bridge.SVGImageElementBridge.createGraphicsNode(SVGImageElementBridge.java :122) at org.apache.batik.bridge.GVTBuilder.buildGraphicsNode(GVTBuilder.java:213) at org.apache.batik.bridge.GVTBuilder.buildComposite (GVTBuilder.java:171) at org.apache.batik.bridge.GVTBuilder.build(GVTBuilder.java:82) at org.apache.batik.transcoder.SVGAbstractTranscoder.transcode :92) at org.apache.batik.transcoder.XMLAbstractTranscoder.transcode(XMLAbstractTranscoder.java:142)
导出原理: Highcharts图表导出(或下载)本质上是将SVG代码转换为不同文件格式的过程,用到的工具是batik,所以所谓导出服务器,只不过是调用batik,将SVG代码转换并下载。 ; import org.apache.batik.transcoder.TranscoderException; import org.apache.batik.transcoder.TranscoderInput ; import org.apache.batik.transcoder.TranscoderOutput; import org.apache.batik.transcoder.image.JPEGTranscoder ; import org.apache.batik.transcoder.TranscoderException; import org.apache.batik.transcoder.TranscoderInput ; import org.apache.batik.transcoder.TranscoderOutput; import org.apache.batik.transcoder.image.JPEGTranscoder
-- batik start --> <! >org.apache.xmlgraphics</groupId> <artifactId>batik-anim</artifactId> <version>${batik.version >org.apache.xmlgraphics</groupId> <artifactId>batik-css</artifactId> <version>${batik.version >org.apache.xmlgraphics</groupId> <artifactId>batik-dom</artifactId> <version>${batik.version >org.apache.xmlgraphics</groupId> <artifactId>batik-js</artifactId> <version>${batik.version
flex-bootstrap.jar xercesPatch.jar oscache.jar xercesImpl.jar xmlParserAPIs.jar jakarta-oro-2.0.7.jar batik-awt-util.jar batik-bridge.jar batik-css.jar batik-dom.jar batik-ext.jar batik-gvt.jar batik-parser.jar batik-script.jar batik-svg-dom.jar batik-util.jar batik-transcoder.jar batik-xml.jar axis.jar commons-discovery.jar commons-logging.jar
3、其他常规升级 升级 Ant 至 1.10.5 版本 升级 Batik 至 1.10 版本 Linux 文件系统提供方拥有毫秒精度 详细更新说明 https://www.eclipse.org/eclipse
其实到这里稍微筛选一下就很清楚了,主要是像前面一样,set函数基本上没什么功能,稍微花时间翻一下,我们得到最终的目标函数 org.apache.batik.swing.JSVGCanvas-->setURI 到这里最关键的是找到具体svg的解析逻辑,但是这块代码不是很好跟,一般来说到xml这里第一反应肯定是XXE,然后我就顺手去搜了一下,结果还找到这个库之前报过的一个XXE漏洞,但是这个漏洞在1.9版本就已经修复了,现在的batik 原文中展示了一个思路挺有意思的,其实走到svg第一反应肯定还是可以执行js,那么我们就尝试执行一个试试看 理所当然的报错了,这里我们顺着报错的执行顺序直接跟到具体的解析代码中 从这里可以找到一个关键方法org.apache.batik.bridge.BaseScriptingEnvironment.loadScripts 原文当中走到这里其实后续就是研究逻辑如何构造满足条件的svg文件逻辑了,但是到这里我想到,既然代码当中留了这样的一个功能,那么理论上来说就应该有类似的官方文档吧,于是开始顺着这个思路去找,首先发现的是,在cs漏洞曝光一段时间之后,batik 甚至还有相应的补丁可以找到 https://github.com/apache/xmlgraphics-batik/commit/905f368b50c2567cf2c4869a0ab596a7b1b5125c
nekohtml.version>1.9.20</nekohtml.version> <xml-apis.version>1.4.01</xml-apis.version> <batik-ext.version >1.9.1</batik-ext.version> <jsoup.version>1.11.2</jsoup.version> <httpclient.version> <dependency> <groupId>org.apache.xmlgraphics</groupId> <artifactId>batik-ext </artifactId> <version>${batik-ext.version}</version> </dependency>
高级属性根本不能玩,Adobe SVG Viewer好多年前就停止更新,Flex支持SVG导入也仅供基本属性玩玩,当然SVG也不是一无是处highcharts还是运用得很不错,Java领域也有维护多年的 Batik
高级属性根本不能玩,Adobe SVG Viewer好多年前就停止更新,Flex支持SVG导入也仅供基本属性玩玩,当然SVG也不是一无是处highcharts还是运用得很不错,Java领域也有维护多年的 Batik
└── src│ ├── index.ets # 对外暴露文件的存放目录│ ├── package.json # 项目介绍│ └──main/ets/batik
找了个poc:https://github.com/its-arun 这里使用的类是org.apache.batik.swing.JSVGCanvas这个类,这个类继承Component,并且存在无参构造方法 ,其URI属性,即setURI是利用点: 如下,测试setURI方法:可以看到这里实现了RCE 所以payload就是这样了: <html><object classid='org.apache.<em>batik</em>.swing.JSVGCanvas
三、AI主导绘图改造:自动化转换+三段式适配突破原系统采用JGraph和Batik SVG库实现绘图,存在绘制逻辑硬编码、跨端复用差等问题。 2天30分钟-96%样式调整耗时1天10分钟-98%跨端绘图适配成本重复开发多套代码WebJSON一次适配成本降为0组态数据联动开发需定制开发注解配置即可实现开发效率提升90%原系统使用JGraph和Batik
file:///etc/passwd"/></foo> 09、Exploiting XXE via image file upload 描述 该实验室允许用户将头像附加到评论中,并使用 Apache Batik
官网 Apache Batik:在Java应用中程序以SVG格式显示、生成及处理图像的工具集,包括SVG解析器、SVG生成器、SVG DOM等模块,可以集成使用也可以单独使用,还可以扩展自定义的SVG标签
官网 Apache Batik:在Java应用中程序以SVG格式显示、生成及处理图像的工具集,包括SVG解析器、SVG生成器、SVG DOM等模块,可以集成使用也可以单独使用,还可以扩展自定义的SVG
.*; import org.apache.batik.dom.GenericDOMImplementation; import org.apache.batik.svggen.SVGGraphics2DIOException
commons-logging 1.0.4 standard 1.0.2 PDF导出需要的Jars: minimum jars (above) avalon-framework 4.0 batik