XXE漏洞


刚刚理清楚这个漏洞,容我去跑个步,再回来修改这篇文章,等我啊,现在是晚上22.27,刚刚问了朋友一个有关xxe的问题,耗费了点时间。那现在就开始。

漏洞原理

XXE漏洞全称XML External Entity Injection,即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,就可能导致任意文件读取、系统命令执行、内网端口探测、攻击内网网站等危害。
讲到这里如果有了解的应该是懂了,但是我猜有些人肯定很晕,接下来我解决你的困惑。(以下但是个人的理解,如果不严谨,轻喷,好哥哥们)

什么是XML

说白了,就是一种数据格式,或者储存数据的格式。类似的有json等等,但是跟这些常见的数据格式又是有区别的,它能定义元素,实体。

什么是元素

有了解过html,应该知道啥是元素,比如

等等,在html都是定义好的,但是在xml中是有用户自定义的

什么是实体

这里就是产生漏洞的关键,首先你要知道DTD是啥,网上有这么一句话:拥有正确语法的 XML 被称为“形式良好”的 XML,通过 DTD 验证的 XML 是“合法”的 XML。
在这里插入图片描述
图看不懂没事,你只要知道DTD是文档类型定义,就是一种规矩吧。对于xml可有可无,但是要触发xxe漏洞,就必须要这个部分。因为这个部分可以定义实体。
在这里插入图片描述
在这里插入图片描述
内部实体可以理解为定义一个变量,给一个变量值,然后通过&变量名;的方法就可以打印出变量值。但是当变量值为URL时,此时定义的实体就是外部实体(这是xml决定的,它会去执行这个URL,而且有很多的伪协议),当这里写成恶意代码呢,不就叫做xml外部实体注入。

伪协议

在这里插入图片描述
这是你利用验证漏洞,必须知道的知识。
用的最多的就是file协议,功能读取文件

漏洞利用

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE xxe [
<!ELEMENT name ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<root>
<name>&xxe;</name>
</root>

这是常见读取/etc/passwd的攻击代码。

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE xxe [
<!ELEMENT name ANY >
<!ENTITY xxe SYSTEM "http://127.0.0.1/1.dtd" >]>
<root>
<name>&xxe;</name>
</root>
1.dtd
<!ENTITY send SYSTEM "file:///etc/passwd">

这种也是一种常见写法。

漏洞危害

  • 文件读取
  • RCE
  • 内网探测
  • 攻击内网主机

漏洞防御

xxe漏洞跟所处的语言环境没有直接关系,跟libxml有直接关系。libxml2.9.0以后,默认不解析外部实体,导致XXE漏洞逐渐消亡。

  • 禁用外部实体
    PHP:
    libxml_disable_entity_loader(true);

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

    Python:
    from lxml import etreexmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))

  • 过滤
    过滤用户提交的XML数据
    过滤关键词:<!DOCTYPE和<!ENTITY,或者SYSTEM和PUBLIC

总结

现实吃瓜中,XXE漏洞我是没碰见。所以也忽视这个漏洞原理啥的,作为网络安全人员,说句实话基础的东西还是要懂的,不然被别人问道,答不上来,说不上话,就很尴尬。或许根本用不到,但你得知道(其实xxe还有很多细节,但也没必要太深入)。切勿浮躁!!!
如果有什么问题,什么方面都可以,欢迎评论或者私信

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值