安全技术研究-XXE漏洞利用(.NET代码)

漏洞利用代码

下面的c#代码片段使用XmlDocument类解析XML文件的内容

XmlDocument document = new XmlDocument();
document.XmlResolver = new XmlUrlResolver();
document.Load(model.MyFileInput.OpenReadStream());

注意,在解析过程中使用了一个非默认解析器(XmlUrlResolver)来解析外部实体。该代码段以一种不安全的方式解析XML数据,可以被用来注入一个特别伪造的XML,将其路径作为一个外部实体,来暴露/etc/passwd系统文件,例如:

]>&e;

如何防护

XMLDocument

在. 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,因为它提供了一种方法来微调所允许的外部实体及其加载行为。

XMLReader

在. net 4.0之前的版本中,XMLReader的ProhibitDtd属性用于确定是否将解析DTD。默认情况下,它被设置为True,如果识别到了DTD,会抛出异常。

从. net 4.0版本开始,可以将DtdProcessing属性配置为Ignore以忽略DTD而不抛出异常。

XmlTextReader

在. net 4.0之前的版本中,XmlTextReader的ProhibitDtd属性用于确定是否将解析DTD。默认情况下,它被设置为False,允许不安全的DTD文档解析。

从. net 4.0版本开始,可以将DtdProcessing属性配置为禁止(forbid)以在标识DTD时抛出异常,或者将其配置为Ignore (Ignore)以忽略DTD而不抛出异常。

展开阅读全文

页面更新:2024-04-30

标签:漏洞   代码   语义   应用程序   实体   路径   属性   异常   版本   文件

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top