XXE漏洞利用

英文全名即 Xml External Entity Injection, 即我们所说的 xml 外部实体注入攻击。
实体可以通过预定义在文档中被调用,而实体的标识符又可以访问本地或者远程内容,当允许引用外部实体时,攻击者便可以构造恶意内容来达到攻击。

XML:

xml 是一种可扩展的标记语言,主要就是用来传输数据的,你可以理解为就是一种写法类似于 html 语言的数据格式文档。但是 xmlhtml 是为不同目的而设计的,html 旨在显示数据信息,而 xml 旨在传输数据信息

DTD:
xml 格式相关的就是这个叫 dtd(document type definition )的东西了,这个 dtd 的作用就是去定义 xml 文档的合法构建模块,也就是说声明了 xml 的内容格式规范。

DTD的声明方式:

1、内部 dtd:即对 XML 文档中的元素、属性和实体的 DTD 的声明都在 XML 文档中。

2、外部 dtd : 即对 XML 文档中的元素、属性和实体的 DTD 的声明都在一个独立的 DTD 文件(.dtd)中。

内部DTD的实例:


<!--XML声明-->
<?xml version="1.0" encoding="UTF-8"?>
<!--DTD,文档类型声明-->          
<!DOCTYPE note [
<!ELEMENT note (body)>
<!ELEMENT body (#PCDATA)>
<!ENTITY writer "hello word">        
]>

<!--文档元素-->                                                                         
<note>
<body>&writer</body>
</note>

我们就 dtd 的内容一个一个来看,

1、!DOCTYPE note (第四行)定义此文档是 note 类型的文档。
2、!ELEMENT note (第五行)定义 note 元素有一个元素:“body "
3、!ELEMENT body (第六行)定义 body 元素为 " #PCDATA” 类型
4、!ENTITY writer " hello world"(第七行)定义了一个内部实体

最后 body 元素标签里的"&writer"就是对内部实体的一个引用,到输出的时候 &writer 就会被 "hello world" 替换。

外部DTD的实例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///c:/test.dtd" >]>

<root>
  <body>&xxe</body>
</root>

1、!ELEMENT foo ANY (第三行)定义元素为 ANY,即可以接受任何元素。
2、!ENTITY xxe SYSTEM “file:///c:/test.dtd”(第四行)定义了一个外部实体

这里样义文档就会对 c:/test.dtd 文件资源进行引用,这是一种用 SYSTEM 关键字的引用方式,还有一种用 PUBLIC 引用公用 DTD 的方式:

<!DOCTYPE 根元素名称 PUBLIC "DTD标识名" "公用DTD的URI">
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值