我正在尝试重现以下链接中发布的XXE场景
https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.md
正如我从文档中读到的那样,当 DTD 未显式设置 XMLResolver 时,当它使用 4.5.2+ 目标框架版本运行时,以下代码块不应加载 DTD。但是我看到了文件的内容。如果我将 XMLResolver 设置为 null,它不会按预期加载内容。
为什么目标框架不影响结果?我的目标是在这里验证此方案,并将解决方案应用于我的项目中。
static void LoadXML()
{
string xxePayload = "<!DOCTYPE doc [<!ENTITY win SYSTEM 'file:///C:/Users/testdata2.txt'>]>"
+ "<doc>&win;</doc>";
string xml = "<?xml version='1.0' ?>" + xxePayload;
XmlDocument xmlDoc = new XmlDocument();
// Setting this to NULL disables DTDs - Its NOT null by default.
// xmlDoc.XmlResolver = null;
xmlDoc.LoadXml(xml);
Console.WriteLine(xmlDoc.InnerText);
Console.ReadLine();
}
你的目标框架是在编译还是 httpRuntime 中?请检查两者中的目标框架。
<system.web>
<compilation targetFramework="4.6" />
<httpRuntime targetFramework="4.6" />
<!--... many other things -->
</system.web>