.NET代码审计XXE漏洞系列-详解XmlReader

0x01 XmlReader介绍

XmlReader是.NET中最常用的XML读取类,通过Read()实例方法不断读取Xml文档中的声明,节点开始,节点内容,节点结束,以及空白等等,直到文档结束Read()方法返回false。它有一个配置项XmlReaderSettings。XmlReaderSettings 则为 XmlReader提供了一系列的配置选项。例如是否启用 DTD 解析、是否忽略注释和空白节点等。签名和定义如下图.

.NET代码审计XXE漏洞系列-详解XmlReader

0x02 复现XXE漏洞

XMLReader默认情况下是禁止处理外部实体的,但XmlReaderSettings类ProhibitDtd属性被设置为false时会受到XXE攻击的风险。如下代码

XmlReaderSettings rs = new XmlReaderSettings();rs.ProhibitDtd = false;XmlReader myReader = XmlReader.Create(new StringReader(xml), rs);while (myReader.Read()){    Response.Write(myReader.Value);}

加载<!ENTITY xxe SYSTEM \"file:///c:/windows/win.ini\"> 成功触发漏洞读系统win文件内容,如下图

.NET代码审计XXE漏洞系列-详解XmlReader