xxe漏洞

一、什么是xxe

XXE(XML External Entity Injection) XML外部实体注入。XXE就是在可以解析XML(XML是一种类似于HTML的可扩展标记语言,是用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言)的地方,在这种地方提交XML的恶意代码来执行。它一般可以做到,内网文件读取,端口扫描,内网程序攻击,任意命令执行等。

php版本大于5.4.45的默认不解析外部实体。这也就是为什么说xxe漏洞越来越少了的原因。

二、xml的基础知识

DTD(document type definition 文档类型定义)的作用是定义XML文档的合法构建模块。DTD可以在XML文档内声明,也可以外部引用。

DTD中的一些重要的关键字:

DOCTYPE(DTD的声明)
ENTITY(实体的声明)
SYSTEM、PUBLIC(外部资源申请)

1.system引用本地实体

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xdsec [
<!ELEMENT methodname ANY >
<!ENTITY xxe(实体引用名) SYSTEM "file:///etc/passwd"(实体内容) >]>
<methodcall>
<methodname>&xxe;</methodname>
</methodcall>

2.引用公共实体

<!ENTITY 实体名称 PUBLIC "public_ID" "URI">

三、具体的xxe代码

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE a [<!ENTITY passwd SYSTEM "file:///etc/passwd">]>
<foo>
        <value>&passwd;</value>
</foo>

上代码是获取本地的ect/passwd的内容,以上代码是有回显信息的。

在介绍没有回显的情况利用blind xxe漏洞

PHP:
可以将libxml_disable_entity_loader设置为TRUE来禁用外部实体,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=False))
方案二、过滤用户提交的XML数据
关键词:<!DOCTYPE和<!ENTITY。

参考链接Web安全-XXE漏洞_Tr0e的博客-CSDN博客

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值