XXE注入漏洞总结

XXE和XML概念

XML被设计为传输和存储数据,XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素,其焦点是数据的内容,其把数据从HTML分离,是独立于软件和硬件的信息传输工具。XXE漏洞全称XML External Entity Injection,即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站等危害。

XML数据传输数据包分析

xml是文件传输的一种格式,就像字符串一样,xml对应的数据格式

我们使用xxe-labs靶场进行抓包可以获取xml格式的数据报文

XXE注入漏洞总结_第1张图片

在数据报中的头部信息中accept字段和Content-Type字段中具有xml字段,且数据内容中都有<>的字样

在数据报中我们可以通过其特征来判断是xml传输数据

源码查看

服务器的数据解析形式决定了数据的传输格式

我们可以查看源代码可以看见,源代码中有处理xml数据的特定代码

XXE注入漏洞总结_第2张图片

利用XXE漏洞进行系统网站的文件读取

有数据回显


    
]>
          

直接执行xml读取文件内容

XXE注入漏洞总结_第3张图片

成功读取到了主机里面的文件

这种情况适用于有页面回显的情况,我们直接读取系统文件可以获取其中的内容

无数据回显

带外测试:确定目标可以向外发送数据--->目的:解决数据的无回显问题

请求DNSlog地址的数据报

XXE注入漏洞总结_第4张图片

查看DNSlog的数据回显

XXE注入漏洞总结_第5张图片

引用外部实体--dtd

目的:1.解决拦截防护问题

           2.解决数据不回显问题

我们先使用xml语句获取我们想要的文件信息,并且将其中的信息存入指定的变量

">

XXE注入漏洞总结_第6张图片

我们获取到信息后然后去请求我们构造好的get.php代码就会将文件信息写到我们的网站目录下

最后查看get.php就可以获取到无法回显的内容

XXE注入漏洞总结_第7张图片

案例分析

XXE注入漏洞总结_第8张图片

这是一个在线等靶场环境

题目给我们一个输入框,我们查看源代码可以看到,前端代码中有一个函数是调用了xml进行数据传输

XXE注入漏洞总结_第9张图片

为此,我们可以抓包修改其数据包进行xml注入

但是 我们捕获到的数据是json数据

XXE注入漏洞总结_第10张图片

为此我们可以修改content-type的类型,使网站接收xml数据,我们写入都去文件信息的语句发现文章回显了内容,证明xml语句执行成功

XXE注入漏洞总结_第11张图片

为此我们可以得出结论,在网站的数据接收接口,不管数据包中的数据类型是什么,我们都可以修改Content-Type为xml进行测试

XXE漏洞测试思路
黑盒

抓获数据包,数据包中的数据类型Content-Type为xml的时候 ,可以尝试xml的payload测试

不管数据包中的数据类型是什么,我们都可以修改Content-Type为xml进行测试

功能分析-->前端提交-->抓包分析-->构造payload

白盒

通过功能定位追踪代码定位审计

通过脚本固定特定的函数搜索定位审计

通过伪协议绕过相关防护

PHP举例

SimpleXML是PHP5后提供的一套简单易用的xml工具集,可以把xml转换成方便处理的对象,也可以组织生成xml数据。不过它不适用于包含namespace的xml,而且要保证xml格式完整(well-formed)。它提供了三个方法:simplexml_import_dom、simplexml_load_file、simplexml_load_string,函数名很直观地说明了函数的作用。三个函数都返回SimpleXMLElement对象,数据的读取/添加都是通过SimpleXMLElement操作。

我们就可以去定位这些函数去判断里面的代码是否存在XXE注入漏洞

漏洞修复

禁用关键字如:

禁用实体类引用

写在最后

如有错误,请及时指出,感谢

你可能感兴趣的:(Web安全漏洞,安全,网络安全)