XXE基础(1)--实体类别

2020-03-27  本文已影响0人  六亲不认的步伐

DTD实体声明的几个重要类别

1.内置实体

作用:通过内置实体能够表达特殊字符

特殊字符 替代符号
小于符号(<) <
大于符号(>) >
and符号(&) &
双引符号(") "
单引符号(’) '

使用方式:

<?xml version="1.0" encoding="utf-8"?>
<test>
<to>
    &lt;script&gt;document.write("Hello,World")&lt;/script&gt;
</to>
</test>
使用实体,显示Javascript代码

2.字符实体

作用:通过字符不同进制格式显示Unicode字符

进制 用法 显示效果
十进制 &#169; ©
十六进制 &#xa9; ©

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)--抛砖引玉

上一篇 下一篇

猜你喜欢

热点阅读