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文件内容,如下图
星球优惠活动
原文始发于微信公众号(dotNet安全矩阵):.NET代码审计XXE漏洞系列-详解XmlReader
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论