#c# #xml #xmldocument #.net-framework-version #xxe
#c# #xml #xmldocument #.net-framework-version #xxe
Вопрос:
Я пытаюсь воспроизвести сценарий XXE, который размещен по следующей ссылке
Как я прочитал из документации, следующий блок кода не должен загружать DTD при его запуске с целевой версией framework 4.5.2 , когда XmlResolver явно не задан. Однако я вижу содержимое файла. Если я установлю для XmlResolver значение null, он не загрузит содержимое, как ожидалось.
Почему целевая платформа не влияет на результат? Моя цель — проверить этот сценарий здесь и применить решение в моем проекте.
static void LoadXML()
{
string xxePayload = "<!DOCTYPE doc [<!ENTITY win SYSTEM 'file:///C:/Users/testdata2.txt'>]>"
"<doc>amp;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();
}
Комментарии:
1. Я почти уверен, что значение null по умолчанию было установлено в .NET 4.6, а не раньше (даже то, что вы можете прочитать в OWASP CheatSheet). Я рекомендую установить для xmlDoc.XmlResolver значение null по умолчанию при всем синтаксическом анализе XML для моего разработчика даже в .NET 4.6 framework
Ответ №1:
Ваш targetFramework находится в процессе компиляции или HttpRuntime? Пожалуйста, проверьте targetFramework в обоих.
<system.web>
<compilation targetFramework="4.6" />
<httpRuntime targetFramework="4.6" />
<!--... many other things -->
</system.web>