DTD实体声明的几个重要类别
1.内置实体
作用:通过内置实体能够表达特殊字符
特殊字符 | 替代符号 |
---|---|
小于符号(<) | < |
大于符号(>) | > |
and符号(&) | & |
双引符号(") | " |
单引符号(’) | ' |
使用方式:
<?xml version="1.0" encoding="utf-8"?>
<test>
<to>
<script>document.write("Hello,World")</script>
</to>
</test>
使用实体,显示Javascript代码
2.字符实体
作用:通过字符不同进制格式显示Unicode字符
进制 | 用法 | 显示效果 |
---|---|---|
十进制 | © | © |
十六进制 | © | © |
3.引用实体
可以参考:XML引用(4)-DTD应用
对于引用实体可以进行连续性拼接使用
特点:不仅仅可以在xml内部使用,而且可以在DTD部分使用,但是在引用实体前,应当先完成实体声明。
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE to [
<!ENTITY SSH "port:22">
<!ENTITY scan "&SSH; is opening">
]>
<root>
<to>
<ssh>&scan;</ssh>
</to>
</root>
通过多个实体的相关嵌套性使用可以进行恶意拼接,就像是SQL Injection 攻击手法
4.参数实体
关键符号:%
特点:只可以在DTD部分进行使用。
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE to [
<!ENTITY SSH "port:22">
<!ENTITY scan "&SSH; is opening">
<!ENTITY % ele "<!ELEMENT to (ssh)>">
%ele;
]>
<root>
<to>
<ssh>&scan;</ssh>
</to>
</root>
参数实体成功执行
XXE基本利用思路介绍
对于上面的使用演示都是基于内部嵌入式DTD限制,XXE攻击就是基于外部DTD实体声明导致
基本思想:通过外部DTD引入任意文件或URL来进行漏洞利用,加载至xml进行实体利用回显
例如:
<! ENTITY b SYSTEM "file:///etc/passwd">
参考资料:
https://www.ibm.com/developerworks/cn/xml/x-entities/#l2
https://blog.csdn.net/janchin/article/details/46849209
第一篇:XML简介(1)--头部声明
第二篇:XML编写(2)--语法要求
第三篇:XML规范(3)--DTD限制
第四篇:XML引用(4)--DTD应用
第六篇:XXE利用(2)--漏洞实现
第七篇:XXE后记(3)--抛砖引玉
网友评论