漏洞利用代码
下面的c#代码片段使用XmlDocument类解析XML文件的内容
XmlDocument document = new XmlDocument();
document.XmlResolver = new XmlUrlResolver();
document.Load(model.MyFileInput.OpenReadStream());
注意,在解析过程中使用了一个非默认解析器(XmlUrlResolver)来解析外部实体。该代码段以一种不安全的方式解析XML数据,可以被用来注入一个特别伪造的XML,将其路径作为一个外部实体,来暴露/etc/passwd系统文件,例如:
]>&e;
如何防护
在. net 4.6之前的版本中,XMLDocument将XmlResolver属性设置为URLResolver允许DTD解析,这可能导致XML实体扩展攻击(XXE)。为了禁止这种情况,XmlResolver应该显式地设置为null。
从. net 4.6版开始,XmlDocument的XmlResolver被设置为空,默认为安全配置。当不需要解析外部实体时,建议使用默认行为,即省略这行:
// Vulnerable setting
document.XmlResolver = new XmlUrlResolver();
如果web应用程序的语义需要解析外部实体,则可以使用XmlSecureResolver的实例来代替XmlUrlResolver,因为它提供了一种方法来微调所允许的外部实体及其加载行为。
在. net 4.0之前的版本中,XMLReader的ProhibitDtd属性用于确定是否将解析DTD。默认情况下,它被设置为True,如果识别到了DTD,会抛出异常。
从. net 4.0版本开始,可以将DtdProcessing属性配置为Ignore以忽略DTD而不抛出异常。
在. net 4.0之前的版本中,XmlTextReader的ProhibitDtd属性用于确定是否将解析DTD。默认情况下,它被设置为False,允许不安全的DTD文档解析。
从. net 4.0版本开始,可以将DtdProcessing属性配置为禁止(forbid)以在标识DTD时抛出异常,或者将其配置为Ignore (Ignore)以忽略DTD而不抛出异常。
页面更新:2024-04-30
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号