大黑客必知必会的xxe攻击漏洞,带你了解黑客的世界( 二 )


大黑客必知必会的xxe攻击漏洞,带你了解黑客的世界

文章插图
 
4)、 Xml DTD介绍
刚才说了关于xml的语法规则以及对应的元素 , 这样一个灵活存储数据的文件格式 , 那我们势必要有一些约束规则来使得它符合这个规则 , 咱们用户定义的这个规则 , 才能把标明咱们这个数据是正确的 , 那这个时候我们就用xml DTD进行校验 , 
拥有正确的语法的xml被称为"形势良好"的xml 。通过DTD验证的xml是"合法"的xml
大黑客必知必会的xxe攻击漏洞,带你了解黑客的世界

文章插图
 

大黑客必知必会的xxe攻击漏洞,带你了解黑客的世界

文章插图
 
5)DTD快速入门
(1)、DTD声明介绍
内部的DCOTYPE声明:<!DOCTYPE root-element [element-declaeations]>
<根元素 [元素声明]>,首先是note根元素 , 用了方括号括起来了
大黑客必知必会的xxe攻击漏洞,带你了解黑客的世界

文章插图
 
这里是对应的子元素
大黑客必知必会的xxe攻击漏洞,带你了解黑客的世界

文章插图
 
用子元素的描述用的是element , 首先描述的是根元素note,然后对应是子元素(用括号括起来的的就是子元素) , 可以看见to是一个子元素 。括号内的就是对应的类型,所以我们称之为内部DTD
大黑客必知必会的xxe攻击漏洞,带你了解黑客的世界

文章插图
 
外部文档声明:假如DTD位于xml源文件的外部 , 那么它应通过下面的语法被封装在一个DOCTYPED定义中:<!DOCTYPE root-element SYSTEM "filename">
大黑客必知必会的xxe攻击漏洞,带你了解黑客的世界

文章插图
 
这个是个xml的文件
大黑客必知必会的xxe攻击漏洞,带你了解黑客的世界

文章插图
 
首先用了DOCTYPE note根元素 , 然后用SYSTEM用引用note.dtd
大黑客必知必会的xxe攻击漏洞,带你了解黑客的世界

文章插图
 
而note.dtd是外部的dtd文件 , 这个dtd文件以下内容是描述对应的元素 , 结构首先是根元素note , 然后对应的是子元素 , 接下来都是子元素对应的类型以及名称 。都是用ELEMENT进行声明
大黑客必知必会的xxe攻击漏洞,带你了解黑客的世界

文章插图
 
(2)、DTD数据类型
PCDATAd的意思是被解析的字符数据(parsed character data) PCDATA是会被解析器解析的文本 。这些文件将被解析器检查实体以及标记 , 可以看见这个图 。PCDATA是会被解析器作为合法的内容进行解析 。
大黑客必知必会的xxe攻击漏洞,带你了解黑客的世界

文章插图
 
CDATA的意思是字符数据(character data)
CDATA是不会解析器解析的文本 , 在这些文本中的标签不会被当作标记来对待 , 其中的实体也不会被展开 , 那么只作为一个普通的文本做处理
Pcdata是xml的解析器 , 可用于识别
Cdata无法进行识别的
(3)、DTD实体介绍
大黑客必知必会的xxe攻击漏洞,带你了解黑客的世界

文章插图
 
3、Xml注入产生原理
1)Xxe漏洞全称xml external entity injection即xml外部实体注入漏洞 , xxe漏洞发生在应用程序解析xml输入时 , 没有禁止外部实体的加载 , 导致可加载恶意外部文件 , 造成文件读取、命令执行、内网端口扫描、攻击内网网站、发起dos攻击等危害 。
Xxe/xml漏洞触发的点往往是可以上传xml文件的位置 , 没有对上传的xml文件进行过滤 , 导致可上传的恶意xml文件 。
2)、 测试代码介绍
首先要的是file_get_contents()来获取对应的数据流 , 获取的数据流是一个php://input这样一个可读的数据流 , 可以通过post的提交方式来将这个流输入对应的内容 , 通过file_get_contents()读取然后保存到$xml, 然后调用simplexml_load_string()加载$xml存储的字符串 , 保存到$data , 然后用echo进行格式化输出 。
大黑客必知必会的xxe攻击漏洞,带你了解黑客的世界

文章插图
 
3)Xxe漏洞利用-任意文件读取
首先这里是我们的一个靶机 , 我们用burp进行登录抓包
大黑客必知必会的xxe攻击漏洞,带你了解黑客的世界


推荐阅读