java代码审计-xxe
描述
XXE为XML外部实体注入。当应用程序在解析XML输入时,在没有禁止外部实体的加载而导致加载了外部文件及代码时,就会造成XXE漏洞。XXE漏洞可以通过file协议或是FTP协议来读取文件源码,当然也可以通过XXE漏洞来对内网进行探测或者攻击,如图2-96所示。漏洞危害有:任意文件读取、内网探测、攻击内网站点、命令执行、DOS攻击等。
解析XML的几种方式
- XMLReader
- SAXBuilder
- SAXReader
- SAXParserFactory
- Digester
- DocumentBuilderFactory
审计技巧
- 全局查找相关关键字
Documentbuilder
、DocumentBuilderFactory
、SAXReader
、SAXParser
、SAXParserFactory
、SAXBuilder
、TransformerFactory
、reqXml
、getInputStream
、XMLReaderFactory
、.newInstance
、SchemaFactory
、SAXTransformerFactory
、javax.xml.bind
、XMLReader
、XmlUtils.get
、Validator
,找到对应的地址后跟踪方法调用栈,最后找他的入口点即客户端传参获取地点进行分析
防御方式
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