freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

记录javaxxe审计经历
2023-04-10 09:17:45
所属地 河北省

前言:

最近把php相关的xxe搞了一遍,然后正好自己也在学java干脆一起搞一搞。

用的靶场是

https://github.com/JoyChou93/java-sec-code/wiki/XXE
配置:直接用springboot运行即可

一、xmlReader(测试无回显)

image.png
访问到这里提示我们xxe除外那直接burp抓包看看,
image.png
发现xxe成功直接看跟进去源码看一下

@PostMapping("/xmlReader/vuln")
    public String xmlReaderVuln(HttpServletRequest request) {
        try {
            String body = WebUtils.getRequestBody(request);//得到请求体
            logger.info(body);
            XMLReader xmlReader = XMLReaderFactory.createXMLReader();//建立解析器
            xmlReader.parse(new InputSource(new StringReader(body)));  // 这是真正解析的地方
            return "xmlReader xxe vuln code";
        } catch (Exception e) {
            logger.error(e.toString());
            return EXCEPT;
        }

二、SAXBuilder(无回显)

这个和上面的其实功能几乎完全一样,就是解析xml的class不一样

String body = WebUtils.getRequestBody(request);
            logger.info(body);

            SAXBuilder builder = new SAXBuilder();
            // org.jdom2.Document document
            builder.build(new InputSource(new StringReader(body)));  // cause xxe

需要注意的是,因为我们要解析xml!这里一定要改成xml不然默认就是post的那个image.png

三、SAXReader(无回显)

image.png

String body 获取请求体
logger.info(body)把请求体写入日志
new SAXReader() 初始化解析器
reader.read进行了解析xml的功能

四、SAXParser(无回显)

发现这几个类的效果实现的都一样,就简单写一下

String body = WebUtils.getRequestBody(request);
            logger.info(body);

            SAXParserFactory spf = SAXParserFactory.newInstance();
            //这里为什么要用newInstance,因为SAXParserFactory是一个抽象类,不能直接new
            SAXParser parser = spf.newSAXParser();
            parser.parse(new InputSource(new StringReader(body)), new DefaultHandler());  // parse xml

五、Digester(无回显)

String body = WebUtils.getRequestBody(request);
Digester digester = new Digester();
digester.parse(new StringReader(body));

六、DocumentBuilder(有回显!)

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            //这里的newInstance也是因为这个类是抽象类
            DocumentBuilder db = dbf.newDocumentBuilder();
            InputSource is = new InputSource(request.getInputStream());
            Document document = db.parse(is);  // parse xml
            //上面的代码其实就是解析,关键的是下面进行了遍历
            // 遍历xml节点name和value
            StringBuilder buf = new StringBuilder();
            NodeList rootNodeList = document.getChildNodes();
            for (int i = 0; i < rootNodeList.getLength(); i++) {
                Node rootNode = rootNodeList.item(i);
                NodeList child = rootNode.getChildNodes();
                for (int j = 0; j < child.getLength(); j++) {
                    Node node = child.item(j);
                    //使用的append追加内容得以回显
                    buf.append(String.format("%s: %s\n", node.getNodeName(), node.getTextContent()));
                }
            }
            return buf.toString();

image.png

七、XMLReader(无回显)

就是xml解析器不同大同小异,就不写了。

八、DocumentHelper(无回显 )

总结:

分析java xxe漏洞成因

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
//这里是因为Document... 是一个抽象类,不能直接实例化
            DocumentBuilder db = dbf.newDocumentBuilder();
//得到DOM解析器对象
            StringReader sr = new StringReader(xml_con);
//获取传入的数据
            InputSource is = new InputSource(sr);
//把数据变成输入流方便解析器解析
            Document document = db.parse(is);  // parse xml
//最后用解析器解析它

java中防御xxe手段

dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); //禁用DTDs (doctypes),几乎可以防御所有xml实体攻击
//如果不能禁用DTDs,可以使用下两项,必须两项同时存在
dbf.setFeature("http://xml.org/sax/features/external-general-entities", false);      //防止外部普通实体POC 攻击
dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);   //防止外部参数实体POC攻击

只是大概的总结留个印象,方便以后看见这些第三方库的函数知道是解析xml的,会想到xxe漏洞,日后遇见再详细总结。
https://blog.csdn.net/qq_62046696/article/details/129548189?spm=1001.2014.3001.5501贴一下php中的xxe,如果有师傅有更好的文章可以推一下感激不尽。

# Java代码审计
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者