xxe漏洞学习笔记

一、xxe漏洞简介

XXE漏洞全称XML External Entity Injection 即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析 XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件和代码,造成任意文件读取、命令执行、内网端口扫描、攻击内网网站、发起Dos攻击等危害。 XXE漏洞触发的点往往是可以上传xml文件的位置,没有对上传的xml文件进行过滤,导致可上传恶意xml文件。
在这里插入图片描述

二、XML基础知识

要了xxe漏洞,那么一定得先弄明白基础知识,了解xml文档的基础组成 XML 指可扩展标记语言(Extensible Markup Language)
XML 被设计用来传输和存储数据。 HTML 被设计用来显示数据

XML的语法规则:
XML 文档必须有一个根元素
XML 元素都必须有一个关闭标签
XML 标签对大小敏感
XML 元素必须被正确的嵌套
XML 属性值必须加引导

<?xml version="1.0" encoding="UTF-8"?> <!--XML 声明-->
 <girl age="18">  <!--自定的根元素girl;age属性需要加引导-->
 <hair>长头发</hair>  <!--自定义的4个子元素,即girl对象的属性--> 
 <eye>大眼睛</eye> 
 <face>可爱的脸庞</face>
 <summary>可爱美丽的女孩</summary>
 </girl>  <!--根元素的闭合-->

实体引用
在 XML 中,一些字符拥有特殊的意义。
如果您把字符 “<” 放在 XML 元素中,会发生错误,这是因为解析器会把它当作新元素的开始。 这样会产生 XML 错误:

<message>if salary < 1000 then</message>

为了避免这个错误,请用实体引用来代替 “<” 字符:

<message>if salary &lt; 1000 then</message>

DTD (Document Type Definition)
DTD(文档类型定义)的作用是定义XML文档的合法构建模块
DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。

<!--XML声明--> 
<?xml version="1.0"?> 
<!--文档类型定义--> 
<!DOCTYPE note [    <!--定义此文档是 note 类型的文档-->
<!ELEMENT note (to,from,heading,body)>  <!--定义note元素有四个元素--> 
<!ELEMENT to (#PCDATA)>     <!--定义to元素为”#PCDATA”类型-->
<!ELEMENT from (#PCDATA)>   <!--定义from元素为”#PCDATA”类型--> 
<!ELEMENT head (#PCDATA)>   <!--定义head元素为”#PCDATA”类型--> 
<!ELEMENT body (#PCDATA)>   <!--定义body元素为”#PCDATA”类型-->
]> <!--文档元素-->
<note> <to>Dave</to>
<from>Tom</from>
<head>Reminder</head>
<body>You are a good man</body> 
</note>

上述XML代码基本分为三个部分:
第一部分是XML的声明;
第二部分是XML的DTD文档类型定义
第三部分是XML语句
而外部实体攻击主要利用DTD的外部实体来进行注入的。
DTD有两种构建方式,分别为内部DTD声明和外部DTD声明
内部DTD声明:

<!DOCTYPE 根元素 [元素声明]>

实例:如上述代码
外部DTD声明:

<!DOCTYPE 根元素 SYSTEM "文件名">

实例:

<?xml version="1.0"?>
 <!DOCTYPE root-element SYSTEM "test.dtd"> 
 <note> 
 <to>Y</to>
 <from>K</from>
 <head>J</head>
 <body>ESHLkangi</body> 
 </note>

test.dtd

<!ELEMENT to (#PCDATA)><!--定义to元素为”#PCDATA”类型-->
<!ELEMENT from (#PCDATA)><!--定义from元素为”#PCDATA”类型-->
<!ELEMENT head (#PCDATA)><!--定义head元素为”#PCDATA”类型--> 
<!ELEMENT body (#PCDATA)><!--定义body元素为”#PCDATA”类型-->

PCDATA的意思是被解析的字符数据。PCDATA是会被解析器解析的文本。这些文本将被解析器检查实体 以及标记。文本中的标签会被当作标记来处理,而实体会被展开。
CDATA意思是字符数据,CDATA 是不会被解析器解析的文本,在这些文本中的标签不会被当作标记来对 待,其中的实体也不会被展开。

DTD实体同样有两种构建方式,分别为内部实体声明和外部实体声明。
内部实体声明:

<!ENTITY entity-name "entity-value">

实例:

<?xml version="1.0">
 <!DOCTYPE note [ 
 <!ELEMENT note(name)> 
 <!ENTITY hacker "ESHLkangi">
  ]>
<note>
<name>&hacker;</name>
</note>

外部实体声明:

<!ENTITY entity-name SYSTEM "URL/URL">

默认协议
在这里插入图片描述php扩展协议
在这里插入图片描述实例:

<?xml cersion="1.0"> 
<!DOCTYPE hack [ 
<!ENTITY xxe SYSTEM "file:///etc/password"> 
]>
<hack>&xxe;</hack>

上述代码中,XML的外部实体“xxe”被赋予的值为:file:///etc/passwd
当解析xml文档是,xxe会被替换为file:///ect/passwd的内容。

参数实体+外部实体:

<?xml version="1.0" encoiding="utf-8"> 
<!DOCTYPE hack [
    <!ENTITY % name SYSTEM "file:///etc/passwd">  
     %name;
  ]>

“%name”(参数实体)实在DTD中被引用,而"&name;"是在xml文档中被引用的。 XXE漏洞攻击主要是利用了DTD引用外部实体导致的漏洞。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Geoserver是一个开源的地理信息系统(GIS)软件,它用于发布和共享地理数据和服务。然而,Geoserver在某些情况下可能存在一个称为XXE(XML外部实体)漏洞XXE漏洞是一种安全漏洞,攻击者可以利用该漏洞来读取本地或远程服务器上的文件。这种漏洞通常是由于应用程序在处理XML输入时,对外部实体的处理不当而引起的。 具体到Geoserver的XXE漏洞,它可能会受到XML实体注入攻击。攻击者可以通过向Geoserver发送包含恶意XML实体引用的请求,来读取系统上的敏感文件或执行任意代码。 为了防止Geoserver XXE漏洞的利用,有几个关键的步骤可以采取: 1. 更新Geoserver:确保您使用的是最新版本的Geoserver。开源软件的维护者通常会修复已知的漏洞,并在新版本中发布修复程序。 2. 安全的配置文件处理:确保Geoserver的配置文件中没有不必要的文件,因为攻击者可能会利用这些文件访问敏感信息。 3. 过滤和验证用户输入:在输入和输出时,对用户提交的XML数据进行充分验证和过滤。这将有助于防止输入的恶意XML实体被执行。 4. 强化安全意识:向Geoserver用户和管理员提供适当的培训,以提高他们对安全问题的意识。这将有助于减少社会工程学攻击和恶意操作。 总之,Geoserver XXE漏洞是一种可以利用的安全漏洞,但通过更新软件、安全配置文件处理、过滤验证用户输入和提高安全意识,可以有效地减少这种漏洞的风险。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值