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