Skip to content

java代码审计-xxe

描述

XXE为XML外部实体注入。当应用程序在解析XML输入时,在没有禁止外部实体的加载而导致加载了外部文件及代码时,就会造成XXE漏洞。XXE漏洞可以通过file协议或是FTP协议来读取文件源码,当然也可以通过XXE漏洞来对内网进行探测或者攻击,如图2-96所示。漏洞危害有:任意文件读取、内网探测、攻击内网站点、命令执行、DOS攻击等。

解析XML的几种方式

  • XMLReader
  • SAXBuilder
  • SAXReader
  • SAXParserFactory
  • Digester
  • DocumentBuilderFactory

审计技巧

  • 全局查找相关关键字DocumentbuilderDocumentBuilderFactorySAXReaderSAXParserSAXParserFactorySAXBuilderTransformerFactoryreqXmlgetInputStreamXMLReaderFactory.newInstanceSchemaFactorySAXTransformerFactoryjavax.xml.bindXMLReaderXmlUtils.getValidator,找到对应的地址后跟踪方法调用栈,最后找他的入口点即客户端传参获取地点进行分析

防御方式

xxe的防御比较简单,禁用外部实体即可。

//实例化解析类之后通常会支持着三个配置
obj.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
obj.setFeature("http://xml.org/sax/features/external-general-entities", false);
obj.setFeature("http://xml.org/sax/features/external-parameter-entities", false);

参考地址:

山石JavaWeb靶场的sql注入相关页面,具体代码见com.hillstone.controller.xxe

Comments