NutzCN Logo
问答 关于xml xxe漏洞的疑问
发布于 2362天前 作者 wanjunjun 2310 次浏览 复制 上一个帖子 下一个帖子
标签:

@wendal
hi! 大神好
请问nutz里面,Xmls类里面,直接new DocumentBuilderFactory(), 是否存在XML外部实体注入漏洞?
相关代码贴在下面了。

public static DocumentBuilder xmls() throws ParserConfigurationException {
        return DocumentBuilderFactory.newInstance().newDocumentBuilder();
    }
public abstract class DocumentBuilderFactory {

    private boolean validating = false;
    private boolean namespaceAware = false;
    private boolean whitespace = false;
    private boolean expandEntityRef = true;//这里是否有XML外部实体注入漏洞?
    private boolean ignoreComments = false;
    private boolean coalescing = false;

    /**
     * <p>Protected constructor to prevent instantiation.
     * Use {@link #newInstance()}.</p>
     */
    protected DocumentBuilderFactory () {
    }
17 回复

java不受影响吧?

这个也不确定,微信官方建议的好像是要设置expandEntityRef =false,不允许加载外部实体,我看代码里面默认是没有禁用的。

改成这样??

    public static DocumentBuilder xmls() throws ParserConfigurationException {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        factory.setExpandEntityReferences(false);
        return factory.newDocumentBuilder();
    }

看起来是要这样修复,没做过测试,不确定额。。。。

我升级了,收到支付消息后报错了,提示:[Fatal Error] :1:1: 前言中不允许有内容
这个不清楚是什么原因导致的.

据说微信又更新了方案, 我再改改

OK,辛苦了。。。

我push了, 你能下载代码测试不?

刚更新了下,是这个方法吗?
public static DocumentBuilder xmls() throws ParserConfigurationException, SAXException, IOException {
//修复XXE form https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=23_5
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
String FEATURE = null;
FEATURE = "http://apache.org/xml/features/disallow-doctype-decl";
factory.setFeature(FEATURE, true);
FEATURE = "http://xml.org/sax/features/external-general-entities";
factory.setFeature(FEATURE, false);
FEATURE = "http://xml.org/sax/features/external-parameter-entities";
factory.setFeature(FEATURE, false);
FEATURE = "http://apache.org/xml/features/nonvalidating/load-external-dtd";
factory.setFeature(FEATURE, false);
factory.setXIncludeAware(false);
factory.setExpandEntityReferences(false);
return factory.newDocumentBuilder();

}

NutMap map = Xmls.asMap(xmls().parse(new InputSource(new StringReader(key))).getDocumentElement());
这一行就报错了,还是提示:[Fatal Error] :1:1: 前言中不允许有内容。

哦, 我晕, 写错了

push了,我的锅

测试通过了。。。。666

已上传 1.r.66.r3

添加回复
请先登陆
回到顶部