首页 > 编程语言 >学习笔记-java代码审计-xxe

学习笔记-java代码审计-xxe

时间:2022-11-13 08:47:04浏览次数:61  
标签:xml java import 笔记 parse xxe org new

java代码审计-xxe

0x00 漏洞挖掘

java解析xml的方法有多种,比较常见的有四种:DOM、DOM4J、JDOM 和SAX。

//1. DocumentBuilder 原生、可回显
import javax.xml.parsers.DocumentBuilderFactory;
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
StringReader sr = new StringReader(xml_con);
InputSource is = new InputSource(sr);
Document document = db.parse(is); 

//2. saxReader 第三方库
import org.dom4j.io.SAXReader;
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(request.getInputStream());

//3. SAXBuilder 第三方库
import org.jdom2.input.SAXBuilder;
SAXBuilder builder = new SAXBuilder();  
Document document = builder.build(request.getInputStream());

//4. SAXParserFactory 原生、不可回显
import javax.xml.parsers.SAXParserFactory;
SAXParserFactory factory  = SAXParserFactory.newInstance(); 
SAXParser saxparser = factory.newSAXParser();
SAXHandler handler = new SAXHandler();  
saxparser.parse(request.getInputStream(), handler);

还有其他整理如下:

import org.xml.sax.helpers.XMLReaderFactory;
XMLReader xmlReader = XMLReaderFactory.createXMLReader();
xmlReader.parse( new InputSource(new StringReader(xml_con)) );

import org.apache.commons.digester3.Digester;
Digester digester = new Digester();
digester.parse(new StringReader(xml_con)); 

import javax.xml.parsers.DocumentBuilderFactory;
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setXIncludeAware(true);   // 支持XInclude
dbf.setNamespaceAware(true);  // 支持XInclude
DocumentBuilder db = dbf.newDocumentBuilder();
StringReader sr = new StringReader(xml_con);
InputSource is = new InputSource(sr);
Document document = db.parse(is);  // parse xml

SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser saxParser = spf.newSAXParser();
XMLReader xmlReader = saxParser.getXMLReader();
xmlReader.parse( new InputSource(new StringReader(xml_con)) );

通常parse方法返回void的,就是无回显的。

0x01 漏洞防御

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);

0x02 参考链接

JAVA代码审计之XXE与SSRF

https://github.com/JoyChou93/java-sec-code/blob/master/src/main/java/org/joychou/controller/XXE.java

点击关注,共同学习!
安全狗的自我修养

github haidragon

https://github.com/haidragon

标签:xml,java,import,笔记,parse,xxe,org,new
From: https://www.cnblogs.com/haidragon/p/16885381.html

相关文章

  • 学习笔记-java代码审计-xss
    java代码审计-xss0x01漏洞挖掘protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException,ServletException{respon......
  • 学习笔记-java代码审计-sqli
    Java代码审计-sqli0x01漏洞挖掘jdbc在上古时期,人们往往这么从数据库获取数据。publicUsergetUserById(Stringid)throwsSQLException{Connectionconnectio......
  • 学习笔记-java代码审计-ssrf
    java代码审计-ssrf0x01漏洞挖掘java发送http请求的方式还是比较多的,下面是原生的:Stringurl=request.getParameter("url");URLu=newURL(url);//1.URL,直接打开......
  • 学习笔记-java代码审计-ssti
    java代码审计-ssti0x01漏洞挖掘Velocity@RequestMapping("/ssti/velocity")publicStringvelocity(@RequestParam(name="content")Stringcontent){Velocity......
  • 学习笔记-java代码审计-命令执行
    java代码审计-命令执行0x01漏洞挖掘Stringcmd=request.getParameter("cmd");Runtimeruntime=Runtime.getRuntime();//Runtime.getRuntime.execProcessBuilder......
  • 学习笔记-java代码审计-文件操作
    java代码审计-文件操作0x01文件上传这段代码来自菜鸟教程:privatestaticfinalStringUPLOAD_PATH="/tmp/upload";privatebooleanuploadWithFileUpload(HttpServ......
  • 学习笔记-java代码审计-反序列化
    Java代码审计-反序列化0x00漏洞挖掘业务代码简单来说,找readObject/readUnshared就好了protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresp......
  • 学习笔记-java代码审计-环境搭建+前置知识
    Java代码审计-环境搭建+前置知识0x00中间件tomcat因为个人比较矫情,不想在mac搭java的开发环境,就想着有没有本地写代码然后部署到虚拟机上运行。毕竟java是静态语言,在编......
  • 学习笔记-java代码审计-表达式注入
    java代码审计-表达式注入0x01漏洞挖掘spelspel表达式有三种用法:注解@value("#{表达式}")publicStringarg;这种一般是写死在代码中的,不是关注的重点。xml<b......
  • 【Javaweb】做一个房产信息管理系统三(src目录的部署工作【三层框架】各个层含义)
    接下来,我打算进行Java文件的部署工作,但实际上为了得到更多的分数,我们还是应该先做页面首先我们需要了解对于Javaweb,src下的目录应该如何部署:(三层架构单独开一篇讲) 那......